{"version":3,"file":"openziti-ziti-console-lib.mjs","sources":["../../../projects/ziti-console-lib/src/lib/safe.pipe.ts","../../../projects/ziti-console-lib/src/lib/zac-routing.module.ts","../../../projects/ziti-console-lib/src/lib/features/extendable/extensions-noop.service.ts","../../../projects/ziti-console-lib/src/lib/features/extendable/extendable.component.ts","../../../projects/ziti-console-lib/src/lib/features/dynamic-widgets/string/string-input.component.ts","../../../projects/ziti-console-lib/src/lib/features/dynamic-widgets/number/number-input.component.ts","../../../projects/ziti-console-lib/src/lib/features/dynamic-widgets/boolean/boolean-toggle-input.component.ts","../../../projects/ziti-console-lib/src/lib/features/dynamic-widgets/object/object.component.ts","../../../projects/ziti-console-lib/src/lib/features/dynamic-widgets/selector/selector-input.component.ts","../../../projects/ziti-console-lib/src/lib/features/dynamic-widgets/checkbox-list/checkbox-list-input.component.ts","../../../projects/ziti-console-lib/src/lib/features/chips-input/chips-input.component.ts","../../../projects/ziti-console-lib/src/lib/features/chips-input/chips-input.component.html","../../../projects/ziti-console-lib/src/lib/features/dynamic-widgets/text-list/text-list-input.component.ts","../../../projects/ziti-console-lib/src/lib/services/validation.service.ts","../../../projects/ziti-console-lib/src/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.ts","../../../projects/ziti-console-lib/src/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.html","../../../projects/ziti-console-lib/src/lib/ziti-console.constants.ts","../../../projects/ziti-console-lib/src/lib/features/sidebars/side-navbar/side-navbar.component.ts","../../../projects/ziti-console-lib/src/lib/features/sidebars/side-navbar/side-navbar.component.html","../../../projects/ziti-console-lib/src/lib/features/dynamic-widgets/password/password-input.component.ts","../../../projects/ziti-console-lib/src/lib/features/messaging/growler.model.ts","../../../projects/ziti-console-lib/src/lib/features/messaging/logger.service.ts","../../../projects/ziti-console-lib/src/lib/features/messaging/growler.service.ts","../../../projects/ziti-console-lib/src/lib/services/settings-service.class.ts","../../../projects/ziti-console-lib/src/lib/services/settings.service.ts","../../../projects/ziti-console-lib/src/lib/services/ziti-data.service.ts","../../../projects/ziti-console-lib/src/lib/services/management-permissions.service.ts","../../../projects/ziti-console-lib/src/lib/features/confirm/confirm.component.ts","../../../projects/ziti-console-lib/src/lib/features/confirm/confirm.component.html","../../../projects/ziti-console-lib/src/lib/features/data-table/data-table-filter.service.ts","../../../projects/ziti-console-lib/src/lib/features/data-table/column-headers/table-column-filter/table-column-filter.component.ts","../../../projects/ziti-console-lib/src/lib/features/data-table/column-headers/table-column-filter/table-column-filter.component.html","../../../projects/ziti-console-lib/src/lib/features/data-table/column-headers/table-column-default/table-column-default.component.ts","../../../projects/ziti-console-lib/src/lib/features/data-table/column-headers/table-column-default/table-column-default.component.html","../../../projects/ziti-console-lib/src/lib/shared/list-page-service.class.ts","../../../projects/ziti-console-lib/src/lib/services/console-events.service.ts","../../../projects/ziti-console-lib/src/lib/shared/list-page-component.class.ts","../../../projects/ziti-console-lib/src/lib/models/service.ts","../../../projects/ziti-console-lib/src/lib/features/data-table/cells/table-cell-name/table-cell-name.component.ts","../../../projects/ziti-console-lib/src/lib/features/data-table/cells/table-cell-name/table-cell-name.component.html","../../../projects/ziti-console-lib/src/lib/features/dynamic-widgets/port-ranges/port-ranges.component.ts","../../../projects/ziti-console-lib/src/lib/features/dynamic-widgets/port-ranges/port-ranges.component.html","../../../projects/ziti-console-lib/src/lib/features/dynamic-widgets/forwarding-config/forwarding-config.service.ts","../../../projects/ziti-console-lib/src/lib/features/dynamic-widgets/forwarding-config/forwarding-config.component.ts","../../../projects/ziti-console-lib/src/lib/features/dynamic-widgets/forwarding-config/forwarding-config.component.html","../../../projects/ziti-console-lib/src/lib/services/schema.service.ts","../../../projects/ziti-console-lib/src/lib/services/csv-download.service.ts","../../../projects/ziti-console-lib/src/lib/pages/configurations/configurations-page.service.ts","../../../projects/ziti-console-lib/src/lib/urls.ts","../../../projects/ziti-console-lib/src/lib/services/tab-name.service.ts","../../../projects/ziti-console-lib/src/lib/features/list-page-features/list-page-header/list-page-header.component.ts","../../../projects/ziti-console-lib/src/lib/features/list-page-features/list-page-header/list-page-header.component.html","../../../projects/ziti-console-lib/src/lib/features/date-range-quick-header/date-range-quick-header.service.ts","../../../projects/ziti-console-lib/src/lib/features/date-range-quick-header/date-range-quick-header.component.ts","../../../projects/ziti-console-lib/src/lib/features/date-range-quick-header/date-range-quick-header.component.html","../../../projects/ziti-console-lib/src/lib/features/data-table/column-headers/table-column-select/table-column-select.component.ts","../../../projects/ziti-console-lib/src/lib/features/data-table/column-headers/table-column-select/table-column-select.component.html","../../../projects/ziti-console-lib/src/lib/features/data-table/column-headers/table-column-menu/table-column-menu.component.ts","../../../projects/ziti-console-lib/src/lib/features/data-table/column-headers/table-column-menu/table-column-menu.component.html","../../../projects/ziti-console-lib/src/lib/features/data-table/cells/table-cell-select/table-cell-select.component.ts","../../../projects/ziti-console-lib/src/lib/features/data-table/cells/table-cell-select/table-cell-select.component.html","../../../projects/ziti-console-lib/src/lib/features/data-table/cells/table-cell-menu/table-cell-menu.component.ts","../../../projects/ziti-console-lib/src/lib/features/data-table/cells/table-cell-menu/table-cell-menu.component.html","../../../projects/ziti-console-lib/src/lib/models/identity.ts","../../../projects/ziti-console-lib/src/lib/features/data-table/tooltips/os-tooltip.component.ts","../../../projects/ziti-console-lib/src/lib/features/data-table/tooltips/sdk-tooltip.component.ts","../../../projects/ziti-console-lib/src/lib/features/reset-enrollment/reset-enrollment.service.ts","../../../projects/ziti-console-lib/src/lib/features/date-time-picker/date-time-picker.component.ts","../../../projects/ziti-console-lib/src/lib/features/date-time-picker/date-time-picker.component.html","../../../projects/ziti-console-lib/src/lib/features/reset-enrollment/reset-enrollment.component.ts","../../../projects/ziti-console-lib/src/lib/features/reset-enrollment/reset-enrollment.component.html","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/identity/identity-form.service.ts","../../../projects/ziti-console-lib/src/lib/pages/identities/identities-page.service.ts","../../../projects/ziti-console-lib/src/lib/models/edge-router.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/edge-router/edge-router-form.service.ts","../../../projects/ziti-console-lib/src/lib/pages/edge-routers/edge-routers-page.service.ts","../../../projects/ziti-console-lib/src/lib/features/qr-code/qr-code.component.ts","../../../projects/ziti-console-lib/src/lib/features/qr-code/qr-code.component.html","../../../projects/ziti-console-lib/src/lib/features/data-table/cells/table-cell-token/table-cell-token.component.ts","../../../projects/ziti-console-lib/src/lib/features/data-table/cells/table-cell-token/table-cell-token.component.html","../../../projects/ziti-console-lib/src/lib/features/data-table/data-table.service.ts","../../../projects/ziti-console-lib/src/lib/features/data-table/table-filter-bar/filter-bar.component.ts","../../../projects/ziti-console-lib/src/lib/features/data-table/table-filter-bar/filter-bar.component.html","../../../projects/ziti-console-lib/src/lib/features/data-table/table-hidden-columns-bar/hidden-columns-bar.component.ts","../../../projects/ziti-console-lib/src/lib/features/data-table/table-hidden-columns-bar/hidden-columns-bar.component.html","../../../projects/ziti-console-lib/src/lib/features/no-items/no-items.component.ts","../../../projects/ziti-console-lib/src/lib/features/no-items/no-items.component.html","../../../projects/ziti-console-lib/src/lib/features/tag-selector/tag-selector.component.ts","../../../projects/ziti-console-lib/src/lib/features/tag-selector/tag-selector.component.html","../../../projects/ziti-console-lib/src/lib/features/data-table/data-table.component.ts","../../../projects/ziti-console-lib/src/lib/features/data-table/data-table.component.html","../../../projects/ziti-console-lib/src/lib/pages/configurations/configurations-page.component.ts","../../../projects/ziti-console-lib/src/lib/pages/configurations/configurations-page.component.html","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/projectable-form.class.ts","../../../projects/ziti-console-lib/src/lib/models/terminator.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/terminator/terminator-form.service.ts","../../../projects/ziti-console-lib/src/lib/features/multi-action-button/multi-action-button.component.ts","../../../projects/ziti-console-lib/src/lib/features/multi-action-button/multi-action-button.component.html","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/form-header/form-header.component.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/form-header/form-header.component.html","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/form-field-container/form-field-container.component.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/form-field-container/form-field-container.component.html","../../../projects/ziti-console-lib/src/lib/features/loading-indicator/loading-indicator.component.ts","../../../projects/ziti-console-lib/src/lib/features/loading-indicator/loading-indicator.component.html","../../../projects/ziti-console-lib/src/lib/features/json-view/json-view.component.ts","../../../projects/ziti-console-lib/src/lib/features/json-view/json-view.component.html","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/terminator/terminator-form.component.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/terminator/terminator-form.component.html","../../../projects/ziti-console-lib/src/lib/features/list-page-features/list-page-form/list-page-form.component.ts","../../../projects/ziti-console-lib/src/lib/features/visualizer/identity-service-path/identity-service-path.helper.ts","../../../projects/ziti-console-lib/src/lib/pages/geolocate/services/map-data.service.ts","../../../projects/ziti-console-lib/src/lib/features/visualizer/identity-service-path/identity-service-path.component.ts","../../../projects/ziti-console-lib/src/lib/features/visualizer/identity-service-path/identity-service-path.component.html","../../../projects/ziti-console-lib/src/lib/features/side-modal/side-modal.component.ts","../../../projects/ziti-console-lib/src/lib/features/side-modal/side-modal.component.html","../../../projects/ziti-console-lib/src/lib/features/overrides/overrides.service.ts","../../../projects/ziti-console-lib/src/lib/features/filter-select/filter-select-templates.directive.ts","../../../projects/ziti-console-lib/src/lib/features/filter-select/filter-select.component.ts","../../../projects/ziti-console-lib/src/lib/features/filter-select/filter-select.component.html","../../../projects/ziti-console-lib/src/lib/features/overrides/overrides.component.ts","../../../projects/ziti-console-lib/src/lib/features/overrides/overrides.component.html","../../../projects/ziti-console-lib/src/lib/pages/identities/identities-page.component.ts","../../../projects/ziti-console-lib/src/lib/pages/identities/identities-page.component.html","../../../projects/ziti-console-lib/src/lib/pages/edge-routers/edge-routers-page.component.ts","../../../projects/ziti-console-lib/src/lib/pages/edge-routers/edge-routers-page.component.html","../../../projects/ziti-console-lib/src/lib/pages/transit-routers/transit-routers-page.service.ts","../../../projects/ziti-console-lib/src/lib/pages/transit-routers/transit-routers-page.component.ts","../../../projects/ziti-console-lib/src/lib/pages/transit-routers/transit-routers-page.component.html","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/service/service-form.service.ts","../../../projects/ziti-console-lib/src/lib/models/service-policy.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/service-policy/service-policy-form.service.ts","../../../projects/ziti-console-lib/src/lib/pages/services/services-page.service.ts","../../../projects/ziti-console-lib/src/lib/features/preview-list/preview-list.component.ts","../../../projects/ziti-console-lib/src/lib/features/preview-list/preview-list.component.html","../../../projects/ziti-console-lib/src/lib/features/preview-selections/preview-selections.component.ts","../../../projects/ziti-console-lib/src/lib/features/preview-selections/preview-selections.component.html","../../../projects/ziti-console-lib/src/lib/pages/services/services-page.component.ts","../../../projects/ziti-console-lib/src/lib/pages/services/services-page.component.html","../../../projects/ziti-console-lib/src/lib/services/login-service.class.ts","../../../projects/ziti-console-lib/src/lib/app.initializer.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/form-field-toggle/form-field-toggle.component.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/form-field-toggle/form-field-toggle.component.html","../../../projects/ziti-console-lib/src/lib/features/custom-tags/custom-tags.component.ts","../../../projects/ziti-console-lib/src/lib/features/custom-tags/custom-tags.component.html","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/identity/identity-form.component.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/identity/identity-form.component.html","../../../projects/ziti-console-lib/src/lib/features/messaging/growler.component.ts","../../../projects/ziti-console-lib/src/lib/features/messaging/growler.module.ts","../../../projects/ziti-console-lib/src/lib/features/visualizer/visualizer-service.class.ts","../../../projects/ziti-console-lib/src/lib/features/visualizer/network-visualizer/network-visualizer.helper.ts","../../../projects/ziti-console-lib/src/lib/features/visualizer/network-visualizer/network-visualizer.treenodeprocessor.ts","../../../projects/ziti-console-lib/src/lib/features/visualizer/network-visualizer/network-visualizer.component.ts","../../../projects/ziti-console-lib/src/lib/features/visualizer/network-visualizer/network-visualizer.component.html","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/edge-router/edge-router-form.component.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/edge-router/edge-router-form.component.html","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/transit-router/transit-router-form.service.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/transit-router/transit-router-form.component.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/transit-router/transit-router-form.component.html","../../../projects/ziti-console-lib/src/lib/features/config-editor/config-editor.component.ts","../../../projects/ziti-console-lib/src/lib/features/config-editor/config-editor.component.html","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/service/service-form.component.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/service/service-form.component.html","../../../projects/ziti-console-lib/src/lib/features/card/card.component.ts","../../../projects/ziti-console-lib/src/lib/features/card/card.component.html","../../../projects/ziti-console-lib/src/lib/features/card-list/card-list.component.ts","../../../projects/ziti-console-lib/src/lib/features/card-list/card-list.component.html","../../../projects/ziti-console-lib/src/lib/features/creation-summary-dialog/creation-summary-dialog.component.ts","../../../projects/ziti-console-lib/src/lib/features/creation-summary-dialog/creation-summary-dialog.component.html","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/service/simple-service/simple-service.component.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/service/simple-service/simple-service.component.html","../../../projects/ziti-console-lib/src/lib/models/edge-router-policy.ts","../../../projects/ziti-console-lib/src/lib/pages/edge-router-policies/edge-router-policies-page.service.ts","../../../projects/ziti-console-lib/src/lib/pages/edge-router-policies/edge-router-policies-page.component.ts","../../../projects/ziti-console-lib/src/lib/pages/edge-router-policies/edge-router-policies-page.component.html","../../../projects/ziti-console-lib/src/lib/pages/service-policies/service-policies-page.service.ts","../../../projects/ziti-console-lib/src/lib/pages/service-policies/service-policies-page.component.ts","../../../projects/ziti-console-lib/src/lib/pages/service-policies/service-policies-page.component.html","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/service-policy/service-policy-form.component.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/service-policy/service-policy-form.component.html","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.html","../../../projects/ziti-console-lib/src/lib/pages/service-edge-router-policies/service-edge-router-policies-page.service.ts","../../../projects/ziti-console-lib/src/lib/pages/service-edge-router-policies/service-edge-router-policies-page.component.ts","../../../projects/ziti-console-lib/src/lib/pages/service-edge-router-policies/service-edge-router-policies-page.component.html","../../../projects/ziti-console-lib/src/lib/models/service-edge-router-policy.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.html","../../../projects/ziti-console-lib/src/lib/pages/terminators/terminators-page.service.ts","../../../projects/ziti-console-lib/src/lib/pages/terminators/terminators-page.component.ts","../../../projects/ziti-console-lib/src/lib/pages/terminators/terminators-page.component.html","../../../projects/ziti-console-lib/src/lib/models/config.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/configuration/configuration.service.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/configuration/configuration-form.component.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/configuration/configuration-form.component.html","../../../projects/ziti-console-lib/src/lib/pages/jwt-signers/jwt-signers-page.service.ts","../../../projects/ziti-console-lib/src/lib/pages/jwt-signers/jwt-signers-page.component.ts","../../../projects/ziti-console-lib/src/lib/pages/jwt-signers/jwt-signers-page.component.html","../../../projects/ziti-console-lib/src/lib/models/jwt-signer.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/jwt-signer/jwt-signer-form.service.ts","../../../projects/ziti-console-lib/src/lib/services/auth.service.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.html","../../../projects/ziti-console-lib/src/lib/pages/auth-policies/auth-policies-page.service.ts","../../../projects/ziti-console-lib/src/lib/pages/auth-policies/auth-policies-page.component.ts","../../../projects/ziti-console-lib/src/lib/pages/auth-policies/auth-policies-page.component.html","../../../projects/ziti-console-lib/src/lib/models/auth-policy.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/auth-policy/auth-policy-form.service.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/auth-policy/auth-policy-form.component.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/auth-policy/auth-policy-form.component.html","../../../projects/ziti-console-lib/src/lib/pages/certificate-authorities/certificate-authorities-page.service.ts","../../../projects/ziti-console-lib/src/lib/pages/certificate-authorities/certificate-authorities-page.component.ts","../../../projects/ziti-console-lib/src/lib/pages/certificate-authorities/certificate-authorities-page.component.html","../../../projects/ziti-console-lib/src/lib/models/certificate-authority.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/certificate-authority/certificate-authority-form.service.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.html","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.service.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.html","../../../projects/ziti-console-lib/src/lib/features/login/login-dialog.component.ts","../../../projects/ziti-console-lib/src/lib/features/login/login-dialog.component.html","../../../projects/ziti-console-lib/src/lib/pages/config-types/config-types-page.service.ts","../../../projects/ziti-console-lib/src/lib/pages/config-types/config-types-page.component.ts","../../../projects/ziti-console-lib/src/lib/pages/config-types/config-types-page.component.html","../../../projects/ziti-console-lib/src/lib/models/config-type.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/config-type/config-type-form.service.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/config-type/config-type-form.component.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/config-type/config-type-form.component.html","../../../projects/ziti-console-lib/src/lib/pages/posture-checks/posture-checks-page.service.ts","../../../projects/ziti-console-lib/src/lib/pages/posture-checks/posture-checks-page.component.ts","../../../projects/ziti-console-lib/src/lib/pages/posture-checks/posture-checks-page.component.html","../../../projects/ziti-console-lib/src/lib/models/posture-check.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/posture-check/posture-check-form.service.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/posture-check/posture-check-form.component.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/posture-check/posture-check-form.component.html","../../../projects/ziti-console-lib/src/lib/models/session.ts","../../../projects/ziti-console-lib/src/lib/pages/sessions/sessions-page.service.ts","../../../projects/ziti-console-lib/src/lib/pages/sessions/sessions-page.component.ts","../../../projects/ziti-console-lib/src/lib/pages/sessions/sessions-page.component.html","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/session/session-form.service.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/session/session-form.component.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/session/session-form.component.html","../../../projects/ziti-console-lib/src/lib/models/api-session.ts","../../../projects/ziti-console-lib/src/lib/pages/api-sessions/api-sessions-page.service.ts","../../../projects/ziti-console-lib/src/lib/pages/api-sessions/api-sessions-page.component.ts","../../../projects/ziti-console-lib/src/lib/pages/api-sessions/api-sessions-page.component.html","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/api-session/api-session-form.service.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/api-session/api-session-form.component.ts","../../../projects/ziti-console-lib/src/lib/features/projectable-forms/api-session/api-session-form.component.html","../../../projects/ziti-console-lib/src/lib/pages/callback/callback.component.ts","../../../projects/ziti-console-lib/src/lib/features/progress-meter/progress-meter.component.ts","../../../projects/ziti-console-lib/src/lib/features/progress-meter/progress-meter.component.html","../../../projects/ziti-console-lib/src/lib/features/progress-wizard/progress-wizard.component.ts","../../../projects/ziti-console-lib/src/lib/features/progress-wizard/progress-wizard.component.html","../../../projects/ziti-console-lib/src/lib/pages/settings/settings.component.ts","../../../projects/ziti-console-lib/src/lib/pages/settings/settings.component.html","../../../projects/ziti-console-lib/src/lib/pages/profile/profile.component.ts","../../../projects/ziti-console-lib/src/lib/pages/profile/profile.component.html","../../../projects/ziti-console-lib/src/lib/pages/geolocate/services/geolocation.service.ts","../../../projects/ziti-console-lib/src/lib/pages/geolocate/services/circuit-calculation.service.ts","../../../projects/ziti-console-lib/src/lib/pages/geolocate/services/circuit-path-builder.service.ts","../../../projects/ziti-console-lib/src/lib/pages/geolocate/services/circuit-filter.service.ts","../../../projects/ziti-console-lib/src/lib/pages/geolocate/services/map-marker.service.ts","../../../projects/ziti-console-lib/src/lib/pages/geolocate/services/map-rendering.service.ts","../../../projects/ziti-console-lib/src/lib/pages/geolocate/services/map-state.service.ts","../../../projects/ziti-console-lib/src/lib/pages/geolocate/components/map-legend/map-legend.component.ts","../../../projects/ziti-console-lib/src/lib/pages/geolocate/components/map-legend/map-legend.component.html","../../../projects/ziti-console-lib/src/lib/pages/geolocate/components/entity-count-legend/entity-count-legend.component.ts","../../../projects/ziti-console-lib/src/lib/pages/geolocate/components/entity-count-legend/entity-count-legend.component.html","../../../projects/ziti-console-lib/src/lib/pages/geolocate/components/filter-bar/filter-bar.component.ts","../../../projects/ziti-console-lib/src/lib/pages/geolocate/components/filter-bar/filter-bar.component.html","../../../projects/ziti-console-lib/src/lib/pages/geolocate/components/marker-panel/marker-panel.component.ts","../../../projects/ziti-console-lib/src/lib/pages/geolocate/components/marker-panel/marker-panel.component.html","../../../projects/ziti-console-lib/src/lib/pages/geolocate/components/link-panel/link-panel.component.ts","../../../projects/ziti-console-lib/src/lib/pages/geolocate/components/link-panel/link-panel.component.html","../../../projects/ziti-console-lib/src/lib/pages/geolocate/components/circuit-hops-table/circuit-hops-table.component.ts","../../../projects/ziti-console-lib/src/lib/pages/geolocate/components/circuit-hops-table/circuit-hops-table.component.html","../../../projects/ziti-console-lib/src/lib/pages/geolocate/components/router-path-table/router-path-table.component.ts","../../../projects/ziti-console-lib/src/lib/pages/geolocate/components/router-path-table/router-path-table.component.html","../../../projects/ziti-console-lib/src/lib/pages/geolocate/components/circuit-panel/circuit-panel.component.ts","../../../projects/ziti-console-lib/src/lib/pages/geolocate/components/circuit-panel/circuit-panel.component.html","../../../projects/ziti-console-lib/src/lib/pages/geolocate/components/entity-list-panel/entity-list-panel.component.ts","../../../projects/ziti-console-lib/src/lib/pages/geolocate/components/entity-list-panel/entity-list-panel.component.html","../../../projects/ziti-console-lib/src/lib/pages/geolocate/components/unlocated-panel/unlocated-panel.component.ts","../../../projects/ziti-console-lib/src/lib/pages/geolocate/components/unlocated-panel/unlocated-panel.component.html","../../../projects/ziti-console-lib/src/lib/pages/geolocate/components/services-with-circuits-panel/services-with-circuits-panel.component.ts","../../../projects/ziti-console-lib/src/lib/pages/geolocate/components/services-with-circuits-panel/services-with-circuits-panel.component.html","../../../projects/ziti-console-lib/src/lib/pages/geolocate/components/side-panel-container/side-panel-container.component.ts","../../../projects/ziti-console-lib/src/lib/pages/geolocate/components/side-panel-container/side-panel-container.component.html","../../../projects/ziti-console-lib/src/lib/pages/geolocate/geolocate.component.ts","../../../projects/ziti-console-lib/src/lib/pages/geolocate/geolocate.component.html","../../../projects/ziti-console-lib/src/lib/services/ha-controller.service.ts","../../../projects/ziti-console-lib/src/lib/pages/geolocate/components/ha-status-indicator/ha-status-indicator.component.ts","../../../projects/ziti-console-lib/src/lib/pages/geolocate/components/ha-status-indicator/ha-status-indicator.component.html","../../../projects/ziti-console-lib/src/lib/pages/attributes/attributes.component.ts","../../../projects/ziti-console-lib/src/lib/pages/attributes/attributes.component.html","../../../projects/ziti-console-lib/src/lib/features/side-navigator/side-navigator.component.ts","../../../projects/ziti-console-lib/src/lib/features/side-navigator/side-navigator.component.html","../../../projects/ziti-console-lib/src/lib/features/quick-add/quick-add.component.ts","../../../projects/ziti-console-lib/src/lib/features/quick-add/quick-add.component.html","../../../projects/ziti-console-lib/src/lib/features/header-bar/header-bar.component.ts","../../../projects/ziti-console-lib/src/lib/features/header-bar/header-bar.component.html","../../../projects/ziti-console-lib/src/lib/ziti-console-lib.module.ts","../../../projects/ziti-console-lib/src/lib/services/noop-login.service.ts","../../../projects/ziti-console-lib/src/lib/services/node-data.service.ts","../../../projects/ziti-console-lib/src/lib/services/ziti-controller-data.service.ts","../../../projects/ziti-console-lib/src/lib/services/ziti-domain-controller.service.ts","../../../projects/ziti-console-lib/src/lib/services/deactivate-guard.service.ts","../../../projects/ziti-console-lib/src/lib/services/oidc-utils.ts","../../../projects/ziti-console-lib/src/lib/services/ziti-oidc.service.ts","../../../projects/ziti-console-lib/src/lib/services/session-refresh.service.ts","../../../projects/ziti-console-lib/src/lib/ZAC_VERSION.ts","../../../projects/ziti-console-lib/src/public-api.ts","../../../projects/ziti-console-lib/src/openziti-ziti-console-lib.ts"],"sourcesContent":["/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({\n    name: \"safe\",\n    standalone: false\n})\nexport class SafePipe implements PipeTransform {\n  constructor(private sanitized: DomSanitizer) {}\n\n  transform(value: string) {\n    return this.sanitized.bypassSecurityTrustHtml(value);\n  }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {NgModule} from '@angular/core';\nimport {RouterModule, Routes} from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n    declarations: [],\n    exports: [RouterModule],\n    imports: [RouterModule.forChild(routes)],\n})\nexport class ZacRoutingModule {\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { Injectable, InjectionToken, ViewContainerRef, EventEmitter } from '@angular/core';\nimport {BehaviorSubject, Subject} from \"rxjs\";\n\nexport const SHAREDZ_EXTENSION = new InjectionToken<any>('SHAREDZ_EXTENSION');\n\nexport type ExtensionEventType =\n  | 'formDataUpdated'\n  | 'attributesChanged'\n  | 'service-attributes-changed'\n  | 'identity-attributes-changed'\n  | 'policy-type-changed'\n  | 'policy-semantic-changed'\n  | 'tableDataUpdated'\n  | string;\n\nexport interface ExtensionEvent<TData = any, TResult = any> {\n  type: ExtensionEventType;\n  data?: TData;\n}\n\nexport interface ExtensionService {\n  formDataChanged: BehaviorSubject<any>;\n  closed: EventEmitter<any>;\n  closeAfterSave: boolean;\n  moreActions?: any[];\n  listActions?: any[];\n  consoleActionTriggered?: EventEmitter<any>;\n  disabledComponents?: any[];\n  showApiCalls?: boolean;\n  useDeleteSplitButton?: boolean;\n  emitEvent?<TData, TResult>(event: ExtensionEvent<TData, TResult>): Promise<TResult | undefined>;\n  extendOnInit(): void;\n  extendAfterViewInits(extentionPoints: any): void;\n  updateFormData(data: any): void;\n  validateData(): Promise<any>;\n  formDataSaved(data: any): Promise<any>;\n  processTableColumns(tableColumns: any): any[];\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ExtensionsNoopService implements ExtensionService {\n\n  formDataChanged = new BehaviorSubject<any>({isEmpty: true});\n  closed: EventEmitter<any> = new EventEmitter<any>();\n  consoleActionTriggered: EventEmitter<any> = new EventEmitter<any>();\n  closeAfterSave = true;\n  moreActions = [];\n  disabledComponents = [];\n\n  constructor() { }\n\n  async emitEvent<TData, TResult>(event: ExtensionEvent<TData, TResult>): Promise<TResult | undefined> {\n    return undefined;\n  }\n\n  extendOnInit(): void {\n  }\n\n  extendAfterViewInits(extentionPoints: any): void {\n  }\n\n  updateFormData(data: any): void {\n  }\n\n  formDataSaved(data: any): Promise<any> {\n    return Promise.resolve(data);\n  }\n\n  validateData(): Promise<any> {\n    return Promise.resolve(true);\n  }\n\n  processTableColumns(tableColumns: any): any[] {\n    return tableColumns;\n  }\n\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, inject, ViewChild, ViewContainerRef} from \"@angular/core\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"./extensions-noop.service\";\n\n@Component({\n    template: ` `,\n    standalone: false\n})\nexport class ExtendableComponent {\n  @ViewChild(\"beforetitleext\", {read: ViewContainerRef}) beforeTitleVC: ViewContainerRef | undefined;\n  @ViewChild(\"aftertitleext\", {read: ViewContainerRef}) afterTitleVC: ViewContainerRef | undefined;\n  @ViewChild(\"beforebuttonsext\", {read: ViewContainerRef}) beforeButtonsVC: ViewContainerRef | undefined;\n  @ViewChild(\"afterbuttonsext\", {read: ViewContainerRef}) afterButtonsVC: ViewContainerRef | undefined;\n\n  extSvc: ExtensionService | undefined;\n\n  constructor() {\n    this.extSvc = inject(SHAREDZ_EXTENSION);\n  }\n\n  ngAfterViewInit() {\n    const vcrs = {\n      beforeTitleVC: this.beforeTitleVC,\n      afterTitleVC: this.afterTitleVC,\n      beforeButtonsVC: this.beforeButtonsVC,\n      afterButtonsVC: this.afterButtonsVC\n    }\n    if (this.extSvc) {\n      this.extSvc.extendAfterViewInits(vcrs);\n    }\n  }\n}\n","import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\nimport {Subject} from \"rxjs\";\nimport {debounce} from \"lodash\";\n\n@Component({\n    selector: 'lib-string-input',\n    template: `\n      <div [ngClass]=\"fieldClass + (!_isValid ? 'invalid' : '')\" class=\"string-input-container\">\n        <div class=\"label-container\">\n          <label for=\"schema_{{parentage?parentage+'_':''}}{{_idName}}\"  [ngStyle]=\"{'color': labelColor}\">{{_fieldName}}</label>\n          @if (helpText) {\n            <div\n              class=\"form-field-info infoicon\"\n              matTooltip=\"{{helpText}}\"\n              matTooltipPosition=\"above\"\n              matTooltipClass=\"wide-tooltip\"\n            ></div>\n          }\n        </div>\n        <input id=\"schema_{{parentage?parentage+'_':''}}{{_idName}}\"\n          type=\"text\" class=\"jsonEntry\"\n          [required]=\"required\"\n          [autocomplete]=\"autocomplete\"\n          [ngClass]=\"{'error': error}\"\n          [placeholder]=\"placeholder\" [(ngModel)]=\"fieldValue\" (paste)=\"onKeyup()\" (keyup)=\"onKeyup()\" (change)=\"emitEvents()\"/>\n        @if (error) {\n          <div class=\"error\">{{error}}</div>\n        }\n      </div>\n      `,\n    styleUrls: ['string-input.component.scss'],\n    standalone: false\n})\nexport class StringInputComponent {\n    _fieldName = 'Field Label';\n    _idName = 'fieldname';\n    @Input() set fieldName(name: string) {\n        this._fieldName = name;\n        this._idName = name.replace(/\\s/g, '').toLowerCase();\n    }\n    @Input() helpText;\n    @Input() fieldValue = '';\n    @Input() placeholder = '';\n    @Input() parentage: string[] = [];\n    @Input() labelColor = '#000000';\n    @Input() fieldClass = '';\n    @Input() error = '';\n    @Input() autocomplete = '';\n    @Input() required = false;\n    @Output() fieldValueChange = new EventEmitter<string>();\n    valueChange = new Subject<string> ();\n\n    _isValid = true;\n    public setIsValid (isValid) {\n        this._isValid = isValid;\n    }\n\n    onKeyup() {\n        this.emitEventsDebounced();\n    }\n\n    emitEventsDebounced = debounce(this.emitEvents.bind(this), 500);\n    emitEvents() {\n        this.fieldValueChange.emit(this.fieldValue);\n        this.valueChange.next(this.fieldValue);\n    }\n}\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {Subject} from \"rxjs\";\nimport {debounce} from \"lodash\";\n\n@Component({\n    selector: 'lib-number-input',\n    template: `\n    <div [ngClass]=\"fieldClass + (!_isValid ? 'invalid' : '')\" class=\"{{!_isValid ? 'invalid' : ''}} number-input-container\">\n      <div class=\"label-container\">\n        <label for=\"schema_{{parentage?parentage+'_':''}}{{_idName}}\"  [ngStyle]=\"{'color': labelColor}\">{{_fieldName}}</label>\n        @if (helpText) {\n          <div\n            class=\"form-field-info infoicon\"\n            matTooltip=\"{{helpText}}\"\n            matTooltipPosition=\"above\"\n            matTooltipClass=\"wide-tooltip\"\n          ></div>\n        }\n      </div>\n      <input id=\"schema_{{parentage?parentage+'_':''}}{{_idName}}\"\n        type=\"number\" class=\"jsonEntry\"\n        [ngClass]=\"{'error': error}\"\n        [placeholder]=\"placeholder\" [(ngModel)]=\"fieldValue\" (paste)=\"onKeyup()\" (keyup)=\"onKeyup()\" (change)=\"emitEvents()\"/>\n      @if (error) {\n        <div class=\"error\">{{error}}</div>\n      }\n    </div>\n    `,\n    styleUrls: ['number-input.component.scss'],\n    standalone: false\n})\nexport class NumberInputComponent {\n  _fieldName = 'Field Label';\n  _idName = 'fieldname';\n  @Input() set fieldName(name: string) {\n    this._fieldName = name;\n    this._idName = name.replace(/\\s/g, '').toLowerCase();\n  }\n  @Input() helpText;\n  @Input() fieldValue: number | undefined;\n  @Input() placeholder = '';\n  @Input() parentage: string[] = [];\n  @Input() labelColor = '#000000';\n  @Input() fieldClass = '';\n  @Input() error = '';\n  @Output() fieldValueChange = new EventEmitter<number| undefined>();\n  valueChange = new Subject<number| undefined> ();\n\n  _isValid = true;\n  private _emitEventsDebounced: any;\n\n  constructor() {\n    this._emitEventsDebounced = debounce(this.emitEvents.bind(this), 500);\n  }\n\n  public setIsValid(isValid) {\n    this._isValid = isValid;\n  }\n\n  onKeyup() {\n    this._emitEventsDebounced();\n  }\n\n  emitEvents() {\n    this.fieldValueChange.emit(this.fieldValue);\n    this.valueChange.next(this.fieldValue);\n  }\n}\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {Subject} from \"rxjs\";\nimport {debounce} from \"lodash\";\n\n@Component({\n    selector: 'lib-boolean-toggle-input',\n    template: `\n    <div [ngClass]=\"fieldClass\">\n      <label for=\"schema_{{parentage?parentage+'_':''}}{{_idName}}\"  [ngStyle]=\"{'color': labelColor}\">{{_fieldName}}</label>\n      <div id=\"schema_{{parentage?parentage+'_':''}}{{_idName}}\" (click)=\"toggle()\"\n        [ngClass]=\"{ on: fieldValue, error: error }\" class=\"toggle\">\n        <span class=\"no\" [hidden]=\"fieldValue\">NO</span >\n        <span class=\"yes\" [hidden]=\"!fieldValue\">YES</span >\n        <div class=\"switch\"></div>\n      </div>\n      @if (error) {\n        <div class=\"error\">{{error}}</div>\n      }\n    </div>\n    `,\n    styleUrls: ['./boolean-toggle-input.component.scss'],\n    standalone: false\n})\nexport class BooleanToggleInputComponent {\n  _fieldName = 'Field Label';\n  _idName = 'fieldname';\n  @Input() set fieldName(name: string) {\n    this._fieldName = name;\n    this._idName = name.replace(/\\s/g, '').toLowerCase();\n  }\n  @Input() fieldValue = false;\n  @Input() parentage: string[] = [];\n  @Input() labelColor = '#000000';\n  @Input() fieldClass = '';\n  @Input() error = '';\n  @Output() fieldValueChange = new EventEmitter<boolean>();\n  valueChange = new Subject<boolean> ();\n\n  toggle() {\n    this.fieldValue = !this.fieldValue\n    debounce(() => {\n      this.fieldValueChange.emit(this.fieldValue);\n      this.valueChange.next(this.fieldValue);\n    }, 500)();\n  }\n\n}\n","import {Component, EventEmitter, Input, Output, ViewChild, ViewContainerRef} from '@angular/core';\n\n@Component({\n    selector: 'lib-object',\n    template: `\n    <div id=\"schema_{{parentage?parentage+'_':''}}{{_idName}}\" class=\"wrapper\" [ngStyle]=\"{'background-color': bcolor}\" [ngClass]=\"{closed: !open}\" (click)=\"toggleOpen($event, 'wrapper')\">\n      <div class=\"object-header-container\">\n        <div class=\"object-header-title\" (click)=\"toggleOpen($event, 'header')\">\n          <label class=\"object-label\" for=\"schema_{{parentage?parentage+'_':''}}{{_idName}}\"  [ngStyle]=\"{'color': labelColor}\">{{_fieldName}}</label>\n          <div class=\"expand-toggle\" [ngClass]=\"{open: open}\"></div>\n        </div>\n        <div class=\"added-items-list\" [hidden]=\"!open || !showAdd\">\n          <div class=\"object-list-items-container\">\n            @if (!addedItems || addedItems.length <= 0) {\n              <span class=\"none-added-label\">NONE ADDED...</span>\n            }\n            @for (item of addedItems; track item; let i = $index) {\n              <div (click)=\"itemClicked(item, i)\" class=\"object-list-item clickable\">\n                <div class=\"icon-clear\" (click)=\"removeItemClicked(item, i)\"></div>\n                <span class=\"preview-name\" matTooltip=\"\" matTooltipPosition=\"below\">{{ _fieldName + '_item_' + i  }}</span>\n              </div>\n            }\n          </div>\n        </div>\n      </div>\n      <div class=\"object-main-content\" [hidden]=\"!open\">\n        <ng-container #wrappercontents></ng-container>\n        @if (showAdd) {\n          <div class=\"save-button button\" (click)=\"addClicked()\">Add</div>\n        }\n      </div>\n    </div>\n    `,\n    styleUrls: ['./object.component.scss'],\n    standalone: false\n})\nexport class ObjectComponent {\n  @ViewChild(\"wrappercontents\", {read: ViewContainerRef, static: true}) public wrapperContents!: ViewContainerRef;\n  _fieldName = 'Field Label';\n  _idName = 'fieldname';\n  @Input() set fieldName(name: string) {\n    this._fieldName = name;\n    this._idName = name.replace(/\\s/g, '').toLowerCase();\n  }\n  @Input() itemData: any;\n  @Input() parentage: string[] = [];\n  @Input() bcolor = '#33aaff'\n  @Input() labelColor = '#000000';\n  @Input() showAdd = false;\n  @Input() addedItems = [];\n  @Input() open = false;\n  @Output() itemAdded: EventEmitter<boolean> = new EventEmitter<boolean>();\n  @Output() itemSelected: EventEmitter<any> = new EventEmitter<any>();\n  @Output() itemRemoved: EventEmitter<any> = new EventEmitter<any>();\n\n  constructor() {\n  }\n  addClicked() {\n    this.itemAdded.emit(true);\n  }\n\n  itemClicked(item, index) {\n    this.itemSelected.emit(item);\n  }\n\n  toggleOpen(event, source) {\n    if (this.open && source === 'wrapper') {\n      return;\n    } else if (!this.open && source === 'header') {\n      return;\n    }\n    this.open = !this.open;\n    event.stopPropagation();\n  }\n\n  removeItemClicked(item, index) {\n    this.addedItems = this.addedItems.filter((addedItem, itemIndex) => {\n      return index !== itemIndex;\n    });\n    this.itemRemoved.emit(item);\n  }\n}\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {Subject} from \"rxjs\";\nimport {debounce, defer} from \"lodash\";\n\n@Component({\n    selector: 'lib-selector-input',\n    template: `\n    <div [ngClass]=\"fieldClass + (!_isValid ? 'invalid' : '')\" class=\"selector-input-container\">\n      <div class=\"label-container\">\n        <label [ngStyle]=\"{'color': labelColor}\">{{_fieldName}}</label>\n        @if (helpText) {\n          <div\n            class=\"form-field-info infoicon\"\n            matTooltip=\"{{helpText}}\"\n            matTooltipPosition=\"above\"\n            matTooltipClass=\"wide-tooltip\"\n          ></div>\n        }\n      </div>\n      @if (!hideSelect) {\n        <select\n          id=\"schema_{{parentage?parentage+'_':''}}{{_idName}}\"\n          class=\"jsonEntry\"\n          [ngClass]=\"{'error': error}\"\n          [(ngModel)]=\"fieldValue\"\n          (change)=\"selected()\"\n          >\n          @if (placeholder) {\n            <option [value]=\"undefined\">{{placeholder}}</option>\n          }\n          @if (!listIsObject) {\n            @for (name of _valueList; track name) {\n              <option [value]=\"name\">{{name}}</option>\n            }\n          }\n          @if (listIsObject) {\n            @for (data of _valueList; track data) {\n              <option [value]=\"data.value\">{{data.name}}</option>\n            }\n          }\n        </select>\n      }\n      @if (hideSelect) {\n        <select\n          class=\"placeholder-select\"\n          [ngClass]=\"{'error': error}\"\n          [(ngModel)]=\"fieldValue\"\n          >\n        </select>\n      }\n      @if (error) {\n        <div class=\"error\">{{error}}</div>\n      }\n    </div>\n    `,\n    styleUrls: ['selector-input.component.scss'],\n    standalone: false\n})\nexport class SelectorInputComponent {\n  _fieldName = 'Field Label';\n  _idName = 'fieldname';\n  _valueList: any[] = [];\n  listIsObject = false;\n  hideSelect = false;\n\n  @Input() set fieldName(name: string) {\n    this._fieldName = name;\n    this._idName = name.replace(/\\s/g, '').toLowerCase();\n  }\n  _fieldValue: string;\n  @Input() set fieldValue(val: string) {\n    this._fieldValue = val;\n  }\n  get fieldValue():string {\n    return this._fieldValue;\n  }\n\n  @Input() helpText;\n  @Input() placeholder = '';\n  @Input() parentage: string[] = [];\n  @Input() set valueList(list: any[]) {\n    this.listIsObject = list?.length > 0 && typeof list[0] !== 'string';\n    this._valueList = list;\n    let valToSet;\n    list.forEach(item => {\n      if(item.default) {\n        valToSet = item.value;\n      }\n    });\n    valToSet = valToSet || this.fieldValue;\n    this.reInitSelect();\n  };\n\n  @Input() labelColor = '#000000';\n  @Input() fieldClass = '';\n  @Input() error = '';\n  @Output() fieldValueChange = new EventEmitter<string>();\n  valueChange = new Subject<string> ();\n\n  _isValid = true;\n  public setIsValid (isValid) {\n    this._isValid = isValid;\n  }\n\n  selected() {\n    debounce(() => {\n      if (this.fieldValue === 'undefined') {\n        this.fieldValue = undefined;\n      }\n      this.fieldValueChange.emit(this.fieldValue);\n      this.valueChange.next(this.fieldValue);\n    }, 500)();\n  }\n\n  reInitSelect() {\n    this.hideSelect = true;\n    defer(() => {\n      this.hideSelect = false;\n    });\n  }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {Subject} from \"rxjs\";\nimport {defer, isEmpty} from \"lodash\";\n\n@Component({\n    selector: 'lib-checkbox-list-input',\n    template: `\n    <div [ngClass]=\"fieldClass + (!_isValid ? ' invalid' : '')\">\n      <label [ngStyle]=\"{'color': labelColor}\">{{_fieldName}}</label>\n      @for (item of items; track item) {\n        <div >\n          <input type=\"checkbox\"\n            class=\"jsonEntry checkbox\"\n            [ngClass]=\"{'error': error}\"\n            [(ngModel)]=\"item.checked\" (ngModelChange)=\"updateFieldVal()\"/>\n          <span class=\"boxlabel\">{{item.name}}</span>\n        </div>\n      }\n      @if (error) {\n        <div class=\"error\">{{error}}</div>\n      }\n    </div>\n    `,\n    styleUrls: ['./checkbox-list.component.scss'],\n    standalone: false\n})\nexport class CheckboxListInputComponent {\n  items: any[] = [];\n  _fieldName = 'Field Label';\n  _idName = 'fieldname';\n  @Input() set fieldName(name: string) {\n    this._fieldName = name;\n    this._idName = name.replace(/\\s/g, '').toLowerCase();\n  }\n  _fieldValue: string[] = [];\n  @Input() set fieldValue(vals) {\n    this._fieldValue = vals;\n    this.updateCheckedItems();\n  }\n  get fieldValue():string [] {\n    return this._fieldValue;\n  }\n  @Input() placeholder = '';\n  @Input() parentage: string[] = [];\n  @Input() set valueList(list: string[]) {\n    this.updateCheckboxItems(list);\n  }\n  @Input() labelColor = '#000000';\n  @Input() fieldClass = '';\n  @Input() error = '';\n  @Output() fieldValueChange = new EventEmitter<string[]>();\n  valueChange = new Subject<string[]> ();\n\n  updateCheckedItems() {\n    if (isEmpty(this._fieldValue)) {\n      return;\n    }\n    this.items?.forEach((item) => {\n      let checked = false;\n      this._fieldValue?.forEach((val) => {\n        if (item.name === val) {\n          checked = true;\n        }\n      });\n      item.checked = checked;\n    });\n  }\n\n  updateCheckboxItems(list: string[]) {\n    const items: any[] = [];\n    list.forEach(v => {\n      items.push ({name: v, checked: false});\n    });\n    this.items = items;\n  }\n\n  updateFieldVal() {\n    defer(() => {\n      this._fieldValue = [];\n      this.items.forEach(item => {\n        if(item.checked) this._fieldValue.push(item.name);\n      });\n      this.fieldValueChange.emit(this._fieldValue);\n      this.valueChange.next(this._fieldValue);\n    });\n  }\n\n  _isValid = true;\n  public setIsValid(isValid) {\n    this._isValid = isValid;\n  }\n}\n\n","import {\n  Component,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  Input,\n  Output,\n  ViewChild\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n  selector: 'lib-chips-input',\n  templateUrl: './chips-input.component.html',\n  styleUrls: ['./chips-input.component.scss'],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => ChipsInputComponent),\n      multi: true\n    }\n  ],\n  host: {\n    class: 'p-chips p-component p-input-wrapper',\n    '[class.p-focus]': 'focused && !disabled',\n    '[class.error]': 'invalid',\n    '[class.chips-input-disabled]': 'disabled',\n  },\n  standalone: false\n})\nexport class ChipsInputComponent implements ControlValueAccessor {\n  @Input() placeholder = '';\n  @Input() inputId?: string;\n  @Input() addOnBlur = true;\n  @Input() allowDuplicate = false;\n  @Input() separator = ',';\n  @Input() invalid = false;\n\n  @Output() onAdd = new EventEmitter<any>();\n  @Output() onRemove = new EventEmitter<any>();\n  @Output() onModelChange = new EventEmitter<string[]>();\n  @Output() onBlur = new EventEmitter<FocusEvent>();\n  @Output() keyup = new EventEmitter<KeyboardEvent>();\n\n  @ViewChild('chipInput', { static: false }) chipInput?: ElementRef<HTMLInputElement>;\n\n  value: string[] = [];\n  disabled = false;\n  focused = false;\n\n  private onChange: (value: string[]) => void = () => {};\n  private onTouched: () => void = () => {};\n\n  writeValue(val: any): void {\n    if (!val) {\n      this.value = [];\n      return;\n    }\n    if (Array.isArray(val)) {\n      this.value = [...val];\n      return;\n    }\n    // fallback: accept string -> split into tokens\n    this.value = this.splitIntoTokens(String(val));\n  }\n\n  registerOnChange(fn: any): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: any): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n  }\n\n  focusInput() {\n    if (this.disabled) return;\n    this.chipInput?.nativeElement?.focus();\n  }\n\n  onFocus() {\n    this.focused = true;\n  }\n\n  handleBlur(event?: FocusEvent) {\n    this.focused = false;\n    this.onTouched();\n    if (this.addOnBlur) {\n      this.commitFromInput();\n    }\n    this.onBlur.emit(event as any);\n  }\n\n  onPaste(event: ClipboardEvent) {\n    if (this.disabled) return;\n    const text = event.clipboardData?.getData('text') ?? '';\n    if (!text) return;\n    event.preventDefault();\n    this.addTokens(this.splitIntoTokens(text));\n    this.clearInput();\n  }\n\n  onKeydown(event: KeyboardEvent) {\n    if (this.disabled) return;\n\n    const input = this.chipInput?.nativeElement;\n    const current = input?.value ?? '';\n    const key = event.key?.toLowerCase();\n\n    if (key === 'backspace' && !current) {\n      if (this.value.length) {\n        this.removeAtIndex(this.value.length - 1, event);\n      }\n      return;\n    }\n\n    const isSeparatorKey =\n      key === 'enter' ||\n      key === ' ' ||\n      (this.separator === ',' && key === ',') ||\n      (this.separator === ';' && key === ';');\n\n    if (isSeparatorKey) {\n      event.preventDefault();\n      event.stopPropagation();\n      this.commitFromInput();\n    }\n  }\n\n  removeAtIndex(index: number, event?: Event) {\n    if (this.disabled) return;\n    event?.preventDefault?.();\n    event?.stopPropagation?.();\n\n    if (index < 0 || index >= this.value.length) return;\n    const removed = this.value[index];\n    this.value = this.value.filter((_, i) => i !== index);\n    this.propagateModel();\n    this.onRemove.emit({ value: removed, index });\n    this.focusInput();\n  }\n\n  private commitFromInput() {\n    const input = this.chipInput?.nativeElement;\n    const raw = input?.value ?? '';\n    const tokens = this.splitIntoTokens(raw);\n    if (tokens.length) {\n      this.addTokens(tokens);\n    }\n    this.clearInput();\n  }\n\n  private addTokens(tokens: string[]) {\n    const added: string[] = [];\n    for (const token of tokens) {\n      const trimmed = token.trim();\n      if (!trimmed) continue;\n      if (!this.allowDuplicate && this.value.includes(trimmed)) continue;\n      this.value = [...this.value, trimmed];\n      added.push(trimmed);\n    }\n    if (added.length) {\n      this.propagateModel();\n      // mimic PrimeNG-ish event shape\n      this.onAdd.emit({ value: added.length === 1 ? added[0] : added });\n    }\n  }\n\n  private propagateModel() {\n    const next = [...this.value];\n    this.onChange(next);\n    this.onModelChange.emit(next);\n  }\n\n  private clearInput() {\n    const input = this.chipInput?.nativeElement;\n    if (input) input.value = '';\n  }\n\n  private splitIntoTokens(text: string): string[] {\n    if (!text) return [];\n    // support whitespace + commas regardless of `separator` to match prior UX (e.g. \"80 120-125 443,8080\")\n    return text\n      .split(/[,\\s]+/g)\n      .map((t) => t.trim())\n      .filter(Boolean);\n  }\n}\n\n","<div\n  class=\"p-inputtext p-chips-multiple-container\"\n  [class.p-focus]=\"focused && !disabled\"\n  [class.error]=\"invalid\"\n  (click)=\"focusInput()\"\n  >\n  @for (chip of value; track chip; let i = $index) {\n    <div class=\"p-chips-token\" [class.p-chips-token-readonly]=\"disabled\">\n      <span class=\"p-chips-token-label\">{{ chip }}</span>\n      @if (!disabled) {\n        <span\n          class=\"p-chips-token-icon\"\n          role=\"button\"\n          tabindex=\"0\"\n          aria-label=\"Remove\"\n          (click)=\"removeAtIndex(i, $event)\"\n          (keydown.enter)=\"removeAtIndex(i, $event)\"\n          (keydown.space)=\"removeAtIndex(i, $event)\"\n          >\n          ×\n        </span>\n      }\n    </div>\n  }\n\n  @if (!disabled) {\n    <div class=\"p-chips-input-token\">\n      <input\n        #chipInput\n        type=\"text\"\n        [attr.id]=\"inputId || null\"\n        [disabled]=\"disabled\"\n        [placeholder]=\"placeholder\"\n        (keydown)=\"onKeydown($event)\"\n        (paste)=\"onPaste($event)\"\n        (focus)=\"onFocus()\"\n        (blur)=\"handleBlur($event)\"\n        (keyup)=\"keyup.emit($event)\"\n        />\n    </div>\n  }\n</div>\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {Subject} from \"rxjs\";\nimport {debounce, isEmpty} from \"lodash\";\n\n@Component({\n    selector: 'lib-text-list-input',\n    template: `\n    <div [ngClass]=\"fieldClass + (!_isValid ? ' invalid' : '')\">\n      <label for=\"schema_{{parentage?parentage+'_':''}}{{_idName}}\"  [ngStyle]=\"{'color': labelColor}\">{{_fieldName}}</label>\n      <lib-chips-input\n        [inputId]=\"'schema_' + (parentage ? parentage + '_' : '') + _idName\"\n        (keyup)=\"onKeyup($event)\"\n        [(ngModel)]=\"fieldValue\"\n        [allowDuplicate]=\"false\"\n        [placeholder]=\"placeholder\"\n        [addOnBlur]=\"true\"\n        [invalid]=\"!_isValid\"\n        [ngClass]=\"fieldClass + (!_isValid ? ' invalid' : '')\"\n        (onBlur)=\"emitEventsDebounced()\"\n        (onModelChange)=\"emitEvents()\"\n        separator=\",\"\n      ></lib-chips-input>\n      @if (error) {\n        <div class=\"error\">{{error}}</div>\n      }\n    </div>\n    `,\n    styleUrls: ['./text-list-input.component.scss'],\n    standalone: false\n})\nexport class TextListInputComponent {\n  _fieldName = 'Field Label';\n  _idName = 'fieldname';\n  @Input() set fieldName(name: string) {\n    this._fieldName = name;\n    this._idName = name.replace(/\\s/g, '').toLowerCase();\n  }\n\n  _fieldValue: any = '';\n  @Input('fieldValue')\n  set fieldValue(val) {\n    this._fieldValue = val;\n  }\n\n  get fieldValue() {\n    const val = isEmpty(this._fieldValue) ? undefined : this._fieldValue;\n    return val;\n  }\n\n  @Input() placeholder = '';\n  @Input() parentage: string[] = [];\n  @Input() labelColor = '#000000';\n  @Input() fieldClass = '';\n  @Input() error = '';\n  @Output() fieldValueChange = new EventEmitter<string>();\n  valueChange = new Subject<string> ();\n\n  onKeyup(event: any) {\n    const key = event.key?.toLowerCase();\n    if (key === \" \" || key === 'enter') {\n      event.preventDefault();\n      event.stopPropagation();\n      const element = event.target as HTMLElement;\n      element.blur();\n      element.focus();\n    }\n    this.emitEventsDebounced();\n  }\n\n  emitEventsDebounced = debounce(this.emitEvents.bind(this), 500);\n  emitEvents() {\n    if(this._fieldValue) {\n      this._fieldValue = this._fieldValue?.map(item => item.trim());\n    }\n    this.fieldValueChange.emit(this.fieldValue);\n    this.valueChange.next(this.fieldValue);\n  }\n\n  _isValid = true;\n  public setIsValid(isValid) {\n    this._isValid = isValid;\n  }\n\n}\n","import {Injectable} from \"@angular/core\";\nimport {includes, isEmpty, isNil, isNumber} from \"lodash\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class ValidationService {\n\n    validateIdentity(identity: any) {\n        const errors = {};\n        if (isEmpty(identity.name)) {\n            errors['name'] = true;\n        }\n        if (isEmpty(identity.authPolicyId)) {\n            errors['authPolicyId'] = true;\n        }\n        const isValid = isEmpty(errors);\n        return { isValid, errors };\n    }\n\n    getPortRanges(allowedPortRanges) {\n        if (!allowedPortRanges) {\n            return undefined;\n        }\n        const ranges = [];\n        allowedPortRanges.forEach((val: string) => {\n            const vals = val.split('-');\n            if (vals.length === 1) {\n                const port = parseInt(val);\n                ranges.push({high: port, low: port});\n            } else if (vals.length === 2) {\n                const port1 = parseInt(vals[0]);\n                const port2 = parseInt(vals[1]);\n                ranges.push({low: port1, high: port2});\n            } else {\n                // do nothing, invalid range\n            }\n        });\n        return ranges;\n    }\n\n    combinePortRanges(allowedPortRanges) {\n        const val = [];\n        if (!allowedPortRanges) {\n            return val;\n        }\n        allowedPortRanges.forEach((range: any) => {\n            if (range.low === range.high) {\n                val.push(range.low + '');\n            } else {\n                val.push(range.low + '-' + range.high);\n            }\n        });\n        return val;\n    }\n\n    parsePortRanges(portRanges) {\n        const parsedPortRanges = [];\n        if (!portRanges) {\n            return parsedPortRanges;\n        }\n        portRanges.forEach((val: string) => {\n            const vals = val.split('-');\n            if (vals.length === 1) {\n                const port = parseInt(val);\n                parsedPortRanges.push({\n                    low: port,\n                    high: port\n                });\n            } else if (vals.length === 2) {\n                const port1 = parseInt(vals[0]);\n                const port2 = parseInt(vals[1]);\n                parsedPortRanges.push({\n                    low: port1,\n                    high: port2\n                });\n            }\n        });\n        return parsedPortRanges;\n    }\n\n    validatePortRanges(portRanges) {\n        let invalid = false;\n        if (!portRanges) {\n            return invalid;\n        }\n        portRanges.forEach((range: any) => {\n            if (!this.isValidPort(range.low) || !this.isValidPort(range.high)) {\n                invalid = true;\n                return;\n            } else if (range.low > range.high) {\n                invalid = true;\n                return;\n            }\n        });\n        return invalid;\n    }\n\n    isValidPort(port) {\n        return !isNaN(port) && isNumber(port) && port >= 1 && port <= 65535;\n    }\n\n    isValidInterceptHost(address) {\n        return includes(address, '.');\n    }\n\n    isValidPEM(cert) {\n        const pemRegex = /^-----BEGIN CERTIFICATE-----([A-Za-z0-9+/=\\n\\r]+)-----END CERTIFICATE-----$/;\n        return pemRegex.test(cert?.trim().trimEnd());\n    }\n\n    isValidURI(uri) {\n        try {\n            new URL(uri);\n            return true;\n        } catch (e) {\n            return false;\n        }\n    }\n\n    isValidJSON(val) {\n        try {\n            const jsonString = JSON.stringify(val);\n\n            return typeof jsonString === 'string' && jsonString !== '';\n        } catch (e) {\n            return false;\n        }\n    }\n\n    redefineObject(obj) {\n        for (let prop in obj) {\n            if (Array.isArray(obj[prop]) && obj[prop].length==0) {\n                delete obj[prop];\n            } else {\n                if (typeof obj[prop] === \"string\" && obj[prop].trim().length==0) {\n                    delete obj[prop];\n                } else if (isNil(obj[prop])) {\n                    delete obj[prop];\n                } else {\n                    if (typeof obj[prop] === \"object\") {\n                        obj[prop] = this.redefineObject(obj[prop]);\n                        if (Object.keys(obj[prop]).length==0) {\n                            delete obj[prop];\n                        }\n                    }\n                }\n            }\n        }\n        return obj;\n    }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, DoCheck, EventEmitter, Input, OnInit, Output, ViewChild, ViewContainerRef} from '@angular/core';\nimport {Subject} from \"rxjs\";\nimport _, {debounce, isEmpty, isNumber, isNil, isNaN} from \"lodash\";\nimport {ValidationService} from \"../../../services/validation.service\";\n\n@Component({\n    selector: 'lib-protocol-address-port-input',\n    templateUrl: './protocol-address-port-input.component.html',\n    styleUrls: ['./protocol-address-port-input.component.scss'],\n    standalone: false\n})\nexport class ProtocolAddressPortInputComponent implements OnInit, DoCheck {\n  @Input() protocolList: any;\n  @Input() showProtocol = true;\n  @Input() showAddress = true;\n  @Input() showHostName = true;\n  @Input() showPort = true;\n  @Input() disableProtocol = false;\n  @Input() disableAddress = false;\n  @Input() disableHostName = false;\n  @Input() disablePort = false;\n  @Input() protocol: string;\n  @Input() address: string;\n  @Input() hostname: string;\n  @Input() port: number;\n  @Input() parentage: string[] = [];\n  @Input() labelColor = '#000000';\n  @Input() labelPrefix = '';\n  @Input() fieldClass = '';\n  @Input() error = '';\n  @Output() fieldValueChange: EventEmitter<any> = new EventEmitter<any>();\n  @Output() portChange: EventEmitter<number> = new EventEmitter<number>();\n  @Output() addressChange: EventEmitter<string> = new EventEmitter<string>();\n  @Output() hostnameChange: EventEmitter<string> = new EventEmitter<string>();\n  @Output() protocolChange: EventEmitter<string> = new EventEmitter<string>();\n  valueChange = new Subject<any> ();\n\n  protocolFieldName = 'Protocol';\n  addressFieldName = 'Address';\n  hostnameFieldName = 'Host Name';\n  portFieldName = 'Port';\n\n  checkAddressDebounced = debounce(this.checkAddress, 100, {maxWait: 100, leading: true});\n\n  errors = {};\n\n  props = [\n    {key: 'protocol', value: undefined},\n    {key: 'address', value: undefined},\n    {key: 'hostname', value: undefined},\n    {key: 'port', value: undefined}\n  ]\n\n  constructor(private validationService: ValidationService) {\n  }\n  ngOnInit() {\n\n  }\n\n  ngDoCheck() {\n    this.checkAddressDebounced();\n  }\n\n  _addressChanged = false;\n  _prevAddress;\n  checkAddress() {\n    this._addressChanged = !_.isEqual(this._prevAddress, this.address);\n    this.addressChange.emit(this.address);\n  }\n\n  update() {\n    this.portChange.emit(this.port);\n    this.addressChange.emit(this.address);\n    this.hostnameChange.emit(this.hostname);\n    this.protocolChange.emit(this.protocol);\n  }\n\n  get className() {\n    let className = 'addressFull'\n    if (!this.showProtocol && (this.showHostName || this.showAddress) && (this.showPort)) {\n      className = 'host-name-port';\n    } else if (!this.showProtocol && !this.showPort && (this.showHostName || this.showAddress)) {\n      className = 'address-only';\n    }\n    return className;\n  }\n\n  getProperties() {\n    const protocol = isEmpty(this.protocol) ? undefined : this.protocol;\n    const address = isEmpty(this.address) ? undefined : this.address;\n    const hostname = isEmpty(this.hostname) ? undefined : this.hostname;\n    const port = !isNumber(this.port) ? undefined : this.port;\n\n    this.props = [\n      {key: 'protocol', value: protocol},\n      {key: 'port', value: port}\n    ];\n    if (this.showAddress) {\n      this.props.push({key: 'address', value: address});\n    }\n    if (this.showHostName) {\n      this.props.push({key: 'hostname', value: hostname});\n    }\n    return this.props;\n  }\n\n  setValidationErrors(propertyPath = '', validationErrors: any[]) {\n    this.props.forEach((prop) => {\n      const hasValidationError: any = validationErrors?.some((error) => {\n        let pathToMach = error.instancePath;\n        if (!isEmpty(error?.params?.missingProperty)) {\n          pathToMach += '/' + error?.params?.missingProperty\n        }\n        return pathToMach === propertyPath + '/' + prop.key;\n      });\n      this.errors[prop.key] = hasValidationError;\n    });\n  }\n\n  isValid() {\n    this.errors = {};\n    if (!isEmpty(this.parentage)) {\n      return true;\n    }\n    if (this.showProtocol && !this.disableProtocol) {\n      if(isEmpty(this.protocol)) {\n        this.errors['protocol'] = true;\n      }\n    }\n    if (this.showAddress && !this.disableAddress) {\n      if(isEmpty(this.address)) {\n        this.errors['address'] = true;\n      }\n    }\n    if (this.showHostName && !this.disableHostName) {\n      if(isEmpty(this.hostname)) {\n        this.errors['hostname'] = true;\n      }\n    }\n    if (this.showPort && !this.disablePort) {\n      if(isNil(this.port) || isNaN(this.port)) {\n        this.errors['port'] = true;\n      }\n    }\n    return isEmpty(this.errors);\n  }\n\n  setProperties(data: any) {\n    this.protocol = data.protocol;\n    this.address = data.address;\n    this.port = data.port;\n    this.hostname = data.hostname;\n  }\n}\n","<div class=\"grid {{className}}\">\n  @if (showProtocol) {\n    <div [ngClass]=\"{disabled: disableProtocol, invalid: errors['protocol']}\">\n      <lib-selector-input [fieldName]=\"protocolFieldName\"\n        [(fieldValue)]=\"protocol\"\n        [labelColor]=\"labelColor\"\n        [placeholder]=\"undefined\"\n        [valueList]=\"['tcp', 'udp']\"\n        (fieldValueChange)=\"update()\"\n      ></lib-selector-input>\n    </div>\n  }\n  @if (showAddress) {\n    <div [ngClass]=\"{disabled: disableAddress, invalid: errors['address']}\">\n      <lib-string-input [fieldName]=\"addressFieldName\"\n        [(fieldValue)]=\"address\"\n        [labelColor]=\"labelColor\"\n        [placeholder]=\"'host.name'\"\n        (fieldValueChange)=\"update()\"\n      ></lib-string-input>\n    </div>\n  }\n  @if (showHostName) {\n    <div [ngClass]=\"{disabled: disableHostName, invalid: errors['hostname']}\">\n      <lib-string-input [fieldName]=\"hostnameFieldName\"\n        [(fieldValue)]=\"hostname\"\n        [labelColor]=\"labelColor\"\n        [placeholder]=\"'host.name'\"\n        (fieldValueChange)=\"update()\"\n      ></lib-string-input>\n    </div>\n  }\n  @if (showPort) {\n    <div [ngClass]=\"{disabled: disablePort, invalid: errors['port']}\">\n      <lib-number-input [fieldName]=\"portFieldName\"\n        [(fieldValue)]=\"port\"\n        [labelColor]=\"labelColor\"\n        [placeholder]=\"'0'\"\n        (fieldValueChange)=\"update()\"\n      ></lib-number-input>\n    </div>\n  }\n</div>\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {InjectionToken} from \"@angular/core\";\n\nexport const ZITI_URLS = new InjectionToken<string>('ZITI_URLS');\nexport const ZITI_NAVIGATOR = new InjectionToken<string>('ZITI_NAVIGATOR');\nexport const DEFAULT_APP_CONFIG = new InjectionToken<string>('DEFAULT_APP_CONFIG');\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, Inject, InjectionToken, Input} from '@angular/core';\nimport {NavigationEnd, Router} from \"@angular/router\";\nimport {ZITI_NAVIGATOR} from \"../../../ziti-console.constants\";\n\n@Component({\n    selector: 'lib-side-navbar',\n    templateUrl: './side-navbar.component.html',\n    styleUrls: ['./side-navbar.component.scss'],\n    standalone: false\n})\nexport class SideNavbarComponent {\n    @Input() version = '';\n    open = true;\n    isOpened = false;\n    url = '';\n\n    constructor(\n        private router: Router,\n        @Inject(ZITI_NAVIGATOR) public currentNav: any\n    ) {\n    }\n\n    ngOnInit(): void {\n        this.router.events.subscribe((event) => {\n            if (event instanceof NavigationEnd) {\n                this.url = event.url.split('?')[0];\n            }\n        });\n    }\n\n    toggleList(event: any) {\n        event.stopPropagation();\n        this.isOpened = !this.isOpened;\n    }\n}\n\n","<div class=\"sideNavbar\">\n  <div class=\"title\" data-i18n=\"AppName\">Ziti Console</div>\n  <div id=\"Version\" class=\"version\">{{version}}</div>\n  <div id=\"CustomLogo\"></div>\n  <div class=\"side-navigator-menu-container\">\n    @for (group of currentNav.groups; track group) {\n      <div class=\"side-navigator-menu-group\">\n        <span class=\"side-navigator-menu-group-label\">{{ group.label }}</span>\n        @for (item of group.menuItems; track item) {\n          <div>\n            @if (!item.hidden) {\n              <div class=\"side-navigator-menu-item {{item.className}}\" [routerLink]=\"item.route\"\n                [ngClass]=\"{ selected: item.selectedRoutes?.includes(url) }\">\n                <div class=\"side-navigator-menu-item-icon\">\n                  <div class=\"image\" [ngClass]=\"item.iconClass\"></div>\n                  @if (item.badgeCount) {\n                    <span class=\"counterBadge\">{{ item.badgeCount }}</span>\n                  }\n                </div>\n                <span class=\"side-navigator-menu-item-label\">{{ item.label }}\n                  <span class=\"side-navigator-menu-item-sublabel\">{{item.sublabel}}</span>\n                </span>\n              </div>\n            }\n          </div>\n        }\n      </div>\n    }\n  </div>\n</div>\n","import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\nimport {Subject} from \"rxjs\";\nimport {debounce} from \"lodash\";\n\n@Component({\n    selector: 'lib-password-input',\n    template: `\n      <div [ngClass]=\"fieldClass\">\n        <label for=\"schema_{{parentage?parentage+'_':''}}{{_idName}}\"  [ngStyle]=\"{'color': labelColor}\">{{_fieldName}}</label>\n        <input id=\"schema_{{parentage?parentage+'_':''}}{{_idName}}\"\n          type=\"password\" class=\"jsonEntry\"\n          [required]=\"required\"\n          [autocomplete]=\"autocomplete\"\n          [ngClass]=\"{'error': error}\"\n          [placeholder]=\"placeholder\" [(ngModel)]=\"fieldValue\" (paste)=\"onKeyup()\" (keyup)=\"onKeyup()\" (change)=\"emitEvents()\"/>\n        @if (error) {\n          <div class=\"error\">{{error}}</div>\n        }\n      </div>\n      `,\n    styles: ['input.error {border-color:red;}', 'div.error {color:red}'],\n    standalone: false\n})\nexport class PasswordInputComponent {\n    _fieldName = 'Field Label';\n    _idName = 'fieldname';\n    @Input() set fieldName(name: string) {\n        this._fieldName = name;\n        this._idName = name.replace(/\\s/g, '').toLowerCase();\n    }\n    @Input() fieldValue = '';\n    @Input() placeholder = '';\n    @Input() parentage: string[] = [];\n    @Input() labelColor = '#000000';\n    @Input() fieldClass = '';\n    @Input() error = '';\n    @Input() autocomplete = '';\n    @Input() required = false;\n    @Output() fieldValueChange = new EventEmitter<string>();\n    valueChange = new Subject<string> ();\n\n    onKeyup() {\n        this.emitEventsDebounced();\n    }\n\n    emitEventsDebounced = debounce(this.emitEvents.bind(this), 500);\n    emitEvents() {\n        this.fieldValueChange.emit(this.fieldValue);\n        this.valueChange.next(this.fieldValue);\n    }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nexport class GrowlerModel {\n    public title: string;\n    public subtitle: string;\n    public level: string;\n    public content: string;\n\n    constructor(level = '', title = '', subtitle = '', content = '') {\n        this.level = level;\n        this.title = title;\n        this.subtitle = subtitle;\n        this.content = content;\n    }\n}\n","import {Injectable} from '@angular/core';\nimport {NGXLogger, NgxLoggerLevel} from 'ngx-logger';\n\n// base for the json log\nconst logJsonBase = {\n    userId: '',\n    authenticated: false,\n    orgId: '',\n    azureSubscriptionId: '',\n    networkId: '',\n    route: '',\n    message: '',\n    data: '',\n};\n\n@Injectable({providedIn: 'root'})\nexport class LoggerService {\n    // the logging level for the client side. Keeping a reference as it is requried when updating the config\n    private clientLevel = NgxLoggerLevel.DEBUG;\n    // the json to log\n    private logJson = {...logJsonBase};\n\n    constructor(public logger: NGXLogger) {\n    }\n\n    // function for setting the user information\n    public setUser(userId: string, authenticated: boolean) {\n        this.logJson.userId = userId;\n        this.logJson.authenticated = authenticated;\n    }\n\n    // function for setting the org id\n    public setOrg(orgId: string) {\n        this.logJson.orgId = orgId;\n    }\n\n    // function for setting the azureSubscription id\n    public setAzureSubscriptionId(azureSubscriptionId: string) {\n        this.logJson.azureSubscriptionId = azureSubscriptionId;\n    }\n\n    // function for setting the network id\n    public setNetworkId(networkId: string) {\n        this.logJson.networkId = networkId;\n    }\n\n    // function for setting the route\n    public setRoute(route: string) {\n        this.logJson.route = route;\n    }\n\n    public setServerLoggingUrl(url: string) {\n        this.logger.updateConfig({level: this.clientLevel, serverLoggingUrl: url});\n    }\n\n    // function for setting the client level for logging\n    setClientLevel(level: string) {\n        switch (level.toUpperCase()) {\n            case 'DEBUG': {\n                this.clientLevel = NgxLoggerLevel.DEBUG;\n                break;\n            }\n\n            case 'ERROR': {\n                this.clientLevel = NgxLoggerLevel.ERROR;\n                break;\n            }\n\n            case 'INFO': {\n                this.clientLevel = NgxLoggerLevel.INFO;\n                break;\n            }\n\n            case 'OFF': {\n                this.clientLevel = NgxLoggerLevel.OFF;\n                break;\n            }\n\n            case 'WARN': {\n                this.clientLevel = NgxLoggerLevel.WARN;\n                break;\n            }\n\n            case 'LOG': {\n                this.clientLevel = NgxLoggerLevel.LOG;\n                break;\n            }\n\n            case 'TRACE': {\n                this.clientLevel = NgxLoggerLevel.TRACE;\n                break;\n            }\n        }\n\n        this.logger.updateConfig({level: this.clientLevel});\n    }\n\n    // function for setting the server level for logging\n    public setServerLevel(level: string) {\n        switch (level.toUpperCase()) {\n            case 'DEBUG': {\n                this.logger.updateConfig({level: this.clientLevel, serverLogLevel: NgxLoggerLevel.DEBUG});\n                break;\n            }\n\n            case 'ERROR': {\n                this.logger.updateConfig({level: this.clientLevel, serverLogLevel: NgxLoggerLevel.ERROR});\n                break;\n            }\n\n            case 'INFO': {\n                this.logger.updateConfig({level: this.clientLevel, serverLogLevel: NgxLoggerLevel.INFO});\n                break;\n            }\n\n            case 'OFF': {\n                this.logger.updateConfig({level: this.clientLevel, serverLogLevel: NgxLoggerLevel.OFF});\n                break;\n            }\n\n            case 'WARN': {\n                this.logger.updateConfig({level: this.clientLevel, serverLogLevel: NgxLoggerLevel.WARN});\n                break;\n            }\n\n            case 'LOG': {\n                this.logger.updateConfig({level: this.clientLevel, serverLogLevel: NgxLoggerLevel.LOG});\n                break;\n            }\n\n            case 'TRACE': {\n                this.logger.updateConfig({level: this.clientLevel, serverLogLevel: NgxLoggerLevel.TRACE});\n                break;\n            }\n        }\n    }\n\n    // wrapper function for ngx-logger debug\n    public debug(message: string, data?: any) {\n        // creating a copy of the json log\n        const json = {...this.logJson};\n\n        this.setMessageAndData(json, message, data);\n        this.logger.debug(message, json);\n    }\n\n    // wrapper function for ngx-logger error\n    public error(message: string, data?: any) {\n        // creating a copy of the json log\n        const json = {...this.logJson};\n\n        this.setMessageAndData(json, message, data);\n        this.logger.error(message, json);\n    }\n\n    // wrapper function for ngx-logger warn\n    public warn(message: string, data?: any) {\n        // creating a copy of the json log\n        const json = {...this.logJson};\n\n        this.setMessageAndData(json, message, data);\n        this.logger.warn(message, json);\n    }\n\n    // wrapper function for ngx-logger debug\n    public info(message: string, data?: any) {\n        // creating a copy of the json log\n        const json = {...this.logJson};\n\n        this.setMessageAndData(json, message, data);\n        this.logger.info(message, json);\n    }\n\n    // wrapper function for ngx-logger debug\n    public log(message: string, data?: any) {\n        // creating a copy of the json log\n        const json = {...this.logJson};\n\n        this.setMessageAndData(json, message, data);\n        this.logger.info(message, json);\n    }\n\n    // wrapper function for ngx-logger debug\n    public trace(message: string, data?: any) {\n        // creating a copy of the json log\n        const json = {...this.logJson};\n\n        this.setMessageAndData(json, message, data);\n        this.logger.trace(message, json);\n    }\n\n    private resetLogJson() {\n        this.logJson = logJsonBase;\n    }\n\n    // function for setting the message and data. also takes in an object representing the json that will be logged\n    private setMessageAndData(json: any, message: string, data?: any) {\n        json.message = message;\n        if (data) {\n            json.data = data;\n        }\n    }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Injectable} from '@angular/core';\nimport {Subject} from 'rxjs';\nimport {GrowlerModel} from \"./growler.model\";\nimport {LoggerService} from \"./logger.service\";\n\nconst errorString = 'error';\n\nconst sessionStorageString = 'growlerErrors';\n\n@Injectable({providedIn: 'root'})\nexport class GrowlerService {\n\n    constructor(private logger: LoggerService) {}\n\n    updateGrowlerEmitter = false;\n    private data = new Subject<GrowlerModel>();\n    data$ = this.data.asObservable();\n\n    private updateGrowlerSource = new Subject<boolean>();\n    updateGrowler = this.updateGrowlerSource.asObservable();\n\n    private sessionGrowlerObject = {\n        growlerMessages: [],\n    };\n    private loginGrowlerPaths = ['/signup', '/app-login', '/app-invitation', '/page-not-found', '/callback'];\n\n    show(data: GrowlerModel) {\n        // if the messaging message is an error message\n        if (data.level !== null && data.level !== undefined && data.level.toLowerCase() === errorString) {\n            // if the user is on the login page, use a special location in session storage to hold onto any messaging errors\n            if (this.loginGrowlerPaths.indexOf(window.location.pathname) === -1) {\n                // otherwise, using the normal location to store the messaging errors\n                const growlerErrorsString = sessionStorage.getItem(sessionStorageString);\n\n                let growlerErrors;\n\n                if (growlerErrorsString === undefined || growlerErrorsString === null || growlerErrorsString === '') {\n                    growlerErrors = this.sessionGrowlerObject;\n                } else {\n                    growlerErrors = JSON.parse(growlerErrorsString);\n                }\n                const growlerMessage = {\n                    level: data.level,\n                    title: data.title,\n                    subtitle: data.subtitle,\n                    content: data.content,\n                    timestamp: Date.now(),\n                };\n                growlerErrors.growlerMessages.push(growlerMessage);\n                sessionStorage.setItem(sessionStorageString, JSON.stringify(growlerErrors));\n            }\n        }\n        this.data.next(data);\n        this.logger.info(`Growler Msg: ${data.level} ${data.title} ${data.subtitle} ${data.content} `);\n        this.updateGrowlerSource.next(!this.updateGrowlerEmitter);\n    }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Injectable} from '@angular/core';\nimport {isEmpty, defer} from \"lodash\";\nimport { HttpBackend, HttpClient } from \"@angular/common/http\";\nimport {BehaviorSubject, firstValueFrom, map, tap} from \"rxjs\";\nimport {catchError} from \"rxjs/operators\";\nimport {GrowlerService} from \"../features/messaging/growler.service\";\nimport {GrowlerModel} from \"../features/messaging/growler.model\";\n\nconst DEFAULTS = {\n    \"session\": {},\n    \"edgeControllers\": [],\n    \"editable\": true,\n    \"update\": false,\n    \"location\": \"../ziti\",\n    \"protocol\": \"http\",\n    \"host\": \"localhost\",\n    \"port\": 1408,\n    \"portTLS\": 8443,\n    \"rejectUnauthorized\": false,\n    \"mail\": {\n        \"host\": \"\",\n        \"port\": 25,\n        \"secure\": false,\n        \"auth\": {\n            \"user\": \"\",\n            \"pass\": \"\"\n        }\n    },\n    \"from\": \"\",\n    \"to\": \"\",\n}\n\n@Injectable({\n    providedIn: 'root'\n})\nexport abstract class SettingsServiceClass {\n\n    name = \"settings\";\n    settings: any = {};\n    versionData: any = {};\n    settingsChange = new BehaviorSubject<any>({})\n    rejectUnauthorized = false;\n    port = DEFAULTS.port;\n    portTLS = DEFAULTS.portTLS;\n    apiVersions: any[] = [];\n    capabilities: string[] = [];\n    edgeOidcPath: string | null = null;\n    protocol = DEFAULTS.protocol;\n    host = DEFAULTS.host;\n    httpClient: HttpClient;\n    zitiSemver = '';\n    allowControllerAdd = false;\n\n    public supportedFeatures: any = {\n        organization: false,\n        tags: true,\n        customFields: false,\n        mailer: false,\n        recipes: false\n    }\n\n    constructor(protected httpBackend: HttpBackend, protected growlerService: GrowlerService) {\n        this.httpClient = new HttpClient(httpBackend);\n    }\n\n    public abstract init();\n    public abstract controllerSave(name: string, url: string);\n    public abstract initApiVersions(url);\n    public abstract loadSettings();\n    public abstract hasSession();\n\n    // True when the selected controller advertises native OIDC authentication\n    public oidcAvailable(): boolean {\n        return (this.capabilities || []).includes('OIDC_AUTH') && !isEmpty(this.edgeOidcPath);\n    }\n\n    public setOidcCapabilities(versionData: any) {\n        this.capabilities = versionData?.capabilities || [];\n        this.edgeOidcPath = versionData?.apiVersions?.['edge-oidc']?.v1?.path || null;\n    }\n\n    public clearOidcCapabilities() {\n        this.capabilities = [];\n        this.edgeOidcPath = null;\n    }\n\n    // HA Controller methods\n    public abstract isHAEnabled(): boolean;\n    public abstract getHAControllers(): any[];\n    public abstract getActiveSessions(): Map<string, string>;\n    public abstract getJwtToken(): string | null;\n    public abstract hasValidJwtToken(): boolean;\n    public abstract setJwtToken(token: string): void;\n\n    public get() {\n        const tmp = localStorage.getItem('ziti.settings');\n        if (tmp) {\n            this.settings = JSON.parse(tmp);\n        } else {\n            this.settings = {...DEFAULTS};\n            localStorage.setItem('ziti.settings', JSON.stringify(this.settings));\n        }\n        this.settingsChange.next(this.settings)\n    }\n\n    public set(data: any) {\n        this.settings = data;\n        localStorage.setItem('ziti.settings', JSON.stringify(data));\n        this.settingsChange.next(this.settings);\n    }\n\n    public version() {\n        this.versionData = localStorage.getItem('ziti.version');\n        this.settings = {...this.settings, version: this.versionData};\n        this.settingsChange.next(this.settings)\n    }\n\n    public getHttpOptions() {\n        const options: any = {\n            headers: {\n                accept: '*',\n            },\n            params: {},\n            responseType: 'text' as const,\n        };\n        return options;\n    }\n\n    public addContoller(name: string, url: string) {\n        const trimmedName = name.trim();\n        const trimmedUrl = url.trim();\n        if (trimmedName.length == 0 || trimmedUrl.length == 0) {\n            let growlerData = new GrowlerModel(\n              'error',\n              'Error',\n              'Name and URL required',\n            );\n            this.growlerService.show(growlerData);\n            return Promise.reject({ error: 'Name and URL required' });\n        } else {\n            return this.controllerSave(trimmedName, trimmedUrl);\n        }\n    }\n\n    // HA Controller management methods\n    public abstract addHAController(url: string, name: string): void;\n    public abstract removeHAController(url: string): void;\n    public abstract setControllerSession(url: string, sessionToken: string): void;\n    public abstract getControllerSession(url: string): string | null;\n    public abstract clearControllerSessions(): void;\n    public abstract clearJwtToken(): void;\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Injectable, Inject, InjectionToken} from '@angular/core';\nimport {firstValueFrom, map, tap} from \"rxjs\";\nimport {catchError} from \"rxjs/operators\";\nimport {isEmpty, defer} from \"lodash\";\nimport { HttpBackend, HttpClient } from \"@angular/common/http\";\nimport {SettingsServiceClass} from \"./settings-service.class\";\nimport {GrowlerService} from \"../features/messaging/growler.service\";\nimport {GrowlerModel} from \"../features/messaging/growler.model\";\nimport moment from \"moment/moment\";\n\nexport const SETTINGS_SERVICE = new InjectionToken<SettingsServiceClass>('SETTINGS_SERVICE');\n\nconst DEFAULTS = {\n    \"session\": {},\n    \"jwtToken\": null,\n    \"edgeControllers\": [],\n    \"haCluster\": {\n        \"enabled\": false,\n        \"controllers\": []\n    },\n    \"controllerSessions\": {},\n    \"editable\": true,\n    \"update\": false,\n    \"location\": \"../ziti\",\n    \"protocol\": \"http\",\n    \"host\": \"localhost\",\n    \"port\": 1408,\n    \"portTLS\": 8443,\n    \"rejectUnauthorized\": false,\n    \"mail\": {\n        \"host\": \"\",\n        \"port\": 25,\n        \"secure\": false,\n        \"auth\": {\n            \"user\": \"\",\n            \"pass\": \"\"\n        }\n    },\n    \"from\": \"\",\n    \"to\": \"\",\n}\n\nconst DEFAULT_API_VERSIONS: any = {\n    \"edge\": {\n      \"v1\": {\n        \"apiBaseUrls\": [\n          `${window.origin}/edge/client/v1`\n        ],\n        \"path\": \"/edge/client/v1\"\n      }\n    },\n    \"edge-client\": {\n      \"v1\": {\n        \"apiBaseUrls\": [\n          `${window.origin}/edge/client/v1`\n        ],\n        \"path\": \"/edge/client/v1\"\n      }\n    },\n    \"edge-management\": {\n      \"v1\": {\n        \"apiBaseUrls\": [\n          `${window.origin}/edge/management/v1`\n        ],\n        \"path\": \"/edge/management/v1\"\n      }\n    }\n  };\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class SettingsService extends SettingsServiceClass {\n\n    override allowControllerAdd = true;\n\n    constructor(override httpBackend: HttpBackend, override growlerService: GrowlerService) {\n        super(httpBackend, growlerService);\n    }\n\n    init() {\n        this.get();\n        this.version();\n\n        if (this.settings.port && !isNaN(this.settings.port)) this.port = this.settings.port;\n        if (this.settings.portTLS && !isNaN(this.settings.portTLS)) this.portTLS = this.settings.portTLS;\n        if (this.settings.rejectUnauthorized && !isNaN(this.settings.rejectUnauthorized)) this.rejectUnauthorized = this.settings.rejectUnauthorized;\n\n        if (this.hasSession() && this.settings.selectedEdgeController) {\n            this.initApiVersions(this.settings.selectedEdgeController);\n        }\n\n        return Promise.resolve();\n    }\n\n    override loadSettings() {\n        //this is a no-op for the default settings service\n    }\n\n    override hasSession() {\n        const hasSessionId = !isEmpty(this.settings?.session?.id);\n        return hasSessionId;\n    }\n\n    override controllerSave(name: string, url: string) {\n        url = url.split('#').join('').split('?').join('');\n        if (url.endsWith('/')) url = url.substr(0, url.length - 1);\n        if (!url.startsWith('https://') && !url.startsWith('http://')) url = 'https://' + url;\n        const callUrl = url + \"/edge/management/v1/version?rejectUnauthorized=\" + this.rejectUnauthorized;\n        firstValueFrom(this.httpClient.get(callUrl).pipe(catchError((err: any) => {\n            throw \"Edge Controller not Online: \" + err?.message;\n        }))).then((body: any) => {\n            try {\n                if (body.error) {\n                  let growlerData = new GrowlerModel(\n                    'error',\n                    'Error',\n                    'Invalid Edge Controller: ' + body.error,\n                  );\n                  this.growlerService.show(growlerData);\n                } else {\n                    if (body?.data?.apiVersions?.edge?.v1 != null) {\n                        this.apiVersions = body.data.apiVersions;\n                        this.setOidcCapabilities(body.data);\n                        let found = false;\n                        if (this.settings.edgeControllers?.length > 0) {\n                            for (let i = 0; i < this.settings.edgeControllers.length; i++) {\n                                if (this.settings.edgeControllers[i].url == url) {\n                                    found = true;\n                                    this.settings.edgeControllers[i].name = name;\n                                    this.settings.edgeControllers[i].url = url;\n                                    break;\n                                }\n                            }\n                        }\n                        if (!found) {\n                            let isDefault = false;\n                            if (!this.settings.edgeControllers) this.settings.edgeControllers = [];\n                            if (this.settings.edgeControllers?.length === 0) isDefault = true;\n                            this.settings.edgeControllers.push({\n                                name: name,\n                                url: url,\n                                default: isDefault\n                            });\n                        }\n                        this.settings.selectedEdgeController = url;\n                        this.set(this.settings);\n\n                    } else {\n                      let growlerData = new GrowlerModel(\n                        'error',\n                        'Error',\n                        'Invalid Edge Controller: ' + JSON.stringify(body),\n                      );\n                      this.growlerService.show(growlerData);\n                    }\n                }\n            } catch (e) {\n                let growlerData = new GrowlerModel(\n                  'error',\n                  'Error',\n                  'Invalid Edge Controller: ' + e,\n                );\n                this.growlerService.show(growlerData);\n            }\n        }).catch(err => {\n            let growlerData = new GrowlerModel(\n              'error',\n              'Error',\n              'Invalid Edge Controller: ' + err,\n            );\n            this.growlerService.show(growlerData);\n        });\n    }\n\n    public initApiVersions(url: string) {\n        url = url.split('#').join('').split('?').join('');\n        if (url.endsWith('/')) url = url.substr(0, url.length - 1);\n        if (!url.startsWith('https://') && !url.startsWith('http://')) url = 'https://' + url;\n        const callUrl = url + \"/edge/management/v1/version?rejectUnauthorized=false\";\n        return firstValueFrom(this.httpClient.get(callUrl)\n            .pipe(\n                tap((body: any) => {\n                    try {\n                        if (body.error) {\n                            let growlerData = new GrowlerModel(\n                              'error',\n                              'Error',\n                              'Invalid Edge Controller: ' + body.error,\n                            );\n                            this.growlerService.show(growlerData);\n                        } else {\n                            this.apiVersions = body.data.apiVersions;\n                            this.setOidcCapabilities(body.data);\n                            this.zitiSemver = body.data?.version?.replace(\"v\", \"\");\n                            const versionDisplay = `Controller: ${body.data?.version}`;\n                            localStorage.setItem('ziti.controller.version', this.zitiSemver);\n                            localStorage.setItem('ziti.version', versionDisplay);\n                            this.version();\n                        }\n                    } catch (e) {\n                        let growlerData = new GrowlerModel(\n                          'error',\n                          'Error',\n                          'Invalid Edge Controller: ' + body,\n                        );\n                        this.growlerService.show(growlerData);\n                    }\n                }),\n                catchError((err: any) => {\n                    this.apiVersions = DEFAULT_API_VERSIONS;\n                    this.clearOidcCapabilities();\n                    const growlerData = new GrowlerModel(\n                        'error',\n                        'Error',\n                        `Edge Controller`,\n                        `Failed to connect to Edge Controller: ${err?.message}`,\n                    );\n                    const res: any = {data: this.apiVersions};\n                    return Promise.resolve(res);\n                }),\n                map((body: any) => {\n                    return body?.data?.apiVersions\n                })));\n    }\n\n    /**\n     * Add an HA controller to the cluster\n     */\n    addHAController(url: string, name: string): void {\n        const haCluster = this.settings.haCluster || { enabled: false, controllers: [] };\n        const exists = haCluster.controllers.find((c: any) => c.url === url);\n\n        if (!exists) {\n            haCluster.controllers.push({\n                url,\n                name,\n                isOnline: true,\n                lastHealthCheck: null\n            });\n            haCluster.enabled = haCluster.controllers.length > 1;\n\n            this.settings.haCluster = haCluster;\n            this.set(this.settings);\n        }\n    }\n\n    /**\n     * Remove an HA controller from the cluster\n     */\n    removeHAController(url: string): void {\n        const haCluster = this.settings.haCluster || { enabled: false, controllers: [] };\n        haCluster.controllers = haCluster.controllers.filter((c: any) => c.url !== url);\n        haCluster.enabled = haCluster.controllers.length > 1;\n\n        this.settings.haCluster = haCluster;\n\n        // Also remove the session if exists\n        if (this.settings.controllerSessions && this.settings.controllerSessions[url]) {\n            delete this.settings.controllerSessions[url];\n        }\n\n        this.set(this.settings);\n    }\n\n    /**\n     * Get all active sessions for HA controllers\n     */\n    getActiveSessions(): Map<string, string> {\n        const sessions = new Map<string, string>();\n        const controllerSessions = this.settings.controllerSessions || {};\n\n        Object.keys(controllerSessions).forEach(url => {\n            if (controllerSessions[url]) {\n                sessions.set(url, controllerSessions[url]);\n            }\n        });\n\n        return sessions;\n    }\n\n    /**\n     * Set session token for an HA controller\n     */\n    setControllerSession(url: string, sessionToken: string): void {\n        if (!this.settings.controllerSessions) {\n            this.settings.controllerSessions = {};\n        }\n\n        this.settings.controllerSessions[url] = sessionToken;\n        this.set(this.settings);\n    }\n\n    /**\n     * Get session token for a specific controller\n     */\n    getControllerSession(url: string): string | null {\n        const sessions = this.settings.controllerSessions || {};\n        return sessions[url] || null;\n    }\n\n    /**\n     * Clear all HA controller sessions\n     */\n    clearControllerSessions(): void {\n        this.settings.controllerSessions = {};\n        this.set(this.settings);\n    }\n\n    /**\n     * Check if HA is enabled\n     */\n    isHAEnabled(): boolean {\n        const haCluster = this.settings.haCluster || { enabled: false, controllers: [] };\n        return haCluster.enabled && haCluster.controllers.length > 1;\n    }\n\n    /**\n     * Get all HA controllers\n     */\n    getHAControllers(): any[] {\n        const haCluster = this.settings.haCluster || { enabled: false, controllers: [] };\n        return haCluster.controllers || [];\n    }\n\n    /**\n     * Set JWT token for authentication\n     */\n    setJwtToken(token: string): void {\n        this.settings.jwtToken = token;\n        this.set(this.settings);\n    }\n\n    /**\n     * Get JWT token\n     */\n    getJwtToken(): string | null {\n        return this.settings.jwtToken || null;\n    }\n\n    /**\n     * Clear JWT token\n     */\n    clearJwtToken(): void {\n        this.settings.jwtToken = null;\n        this.set(this.settings);\n    }\n\n    /**\n     * Check if JWT token exists and is not expired\n     */\n    hasValidJwtToken(): boolean {\n        const token = this.settings.jwtToken;\n        if (!token) {\n            return false;\n        }\n\n        try {\n            // Decode JWT to check expiration (without verification)\n            const parts = token.split('.');\n            if (parts.length !== 3) {\n                return false;\n            }\n\n            const payload = JSON.parse(atob(parts[1]));\n            const exp = payload.exp;\n\n            if (!exp) {\n                return true; // No expiration claim, assume valid\n            }\n\n            const isValid = exp * 1000 > Date.now();\n            // Check if token is expired (exp is in seconds, Date.now() is in milliseconds)\n            return isValid;\n        } catch (e) {\n            return false;\n        }\n    }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { Injectable, Inject, InjectionToken, Injector, inject } from '@angular/core';\nimport { ManagementPermissionsService } from './management-permissions.service';\nimport { Router } from \"@angular/router\";\nimport {LoggerService} from \"../features/messaging/logger.service\";\nimport {GrowlerService} from \"../features/messaging/growler.service\";\nimport {SETTINGS_SERVICE, SettingsService} from \"./settings.service\";\nimport { HttpClient } from \"@angular/common/http\";\nimport {FilterObj} from \"../features/data-table/data-table-filter.service\";\nimport { LoginServiceClass } from './login-service.class';\n\nimport {cloneDeep, isEmpty, sortedUniq, isString} from \"lodash\";\nimport {SettingsServiceClass} from \"./settings-service.class\";\n\nexport const ZITI_DATA_SERVICE = new InjectionToken<ZitiDataService>('ZITI_DATA_SERVICE');\n\n@Injectable({\n  providedIn: 'root'\n})\nexport abstract class ZitiDataService {\n\n  static NODE_DATA_SERVICE_TYPE = 'node';\n  static CONTROLLER_DATA_SERVICE_TYPE = 'controller';\n\n  dataServiceType = '';\n\n  public get DEFAULT_PAGING() {\n    return cloneDeep({\n      filter: \"\",\n      noSearch: true,\n      order: \"asc\",\n      page: 1,\n      searchOn: \"name\",\n      sort: \"name\",\n      total: 100\n    })\n  }\n\n  constructor(protected logger: LoggerService,\n              protected growler: GrowlerService,\n              protected settingsService: SettingsServiceClass,\n              protected httpClient: HttpClient,\n              protected router: Router\n  ) {}\n\n  private readonly injector = inject(Injector);\n  /** Resolved lazily to break the circular dependency: ManagementPermissionsService → ZITI_DATA_SERVICE → ManagementPermissionsService. */\n  private get managementPermissions(): ManagementPermissionsService {\n      return this.injector.get(ManagementPermissionsService);\n  }\n\n  /** Empty list response returned when the user lacks read permission for the requested resource. */\n  private static readonly EMPTY_READ_RESULT = { data: [], meta: { pagination: { totalCount: 0, offset: 0, limit: 0 } } };\n\n  abstract post(type, model, chained?, contentType?): Promise<any>;\n  abstract put(type, model, id, chained?): Promise<any>;\n  abstract patch(type, model, id, chained?): Promise<any>;\n  abstract doGet(type: string, paging: any, filters: FilterObj[], url?, useClient?): Promise<any>;\n  abstract doGetSubdata(entityType: string, id: any, dataType: string, paging?: any, contentType?, filters?): Promise<any>;\n\n  get(type: string, paging: any, filters: FilterObj[], url?, useClient?): Promise<any> {\n      if (!this.managementPermissions.canRead(type)) {\n          return Promise.resolve(ZitiDataService.EMPTY_READ_RESULT);\n      }\n      return this.doGet(type, paging, filters, url, useClient);\n  }\n\n  getSubdata(entityType: string, id: any, dataType: string, paging?: any, contentType?, filters?): Promise<any> {\n      const resourceToCheck = dataType || entityType;\n      if (!this.managementPermissions.canRead(resourceToCheck)) {\n          return Promise.resolve({ data: [] });\n      }\n      return this.doGetSubdata(entityType, id, dataType, paging, contentType, filters);\n  }\n  abstract saveSubdata(entityType: string, id: any, dataType: string, params: any): Promise<any>;\n  abstract deleteSubdata(entityType: string, id: any, dataType: string, params: any): Promise<any>;\n  abstract delete(type: string, id: string): Promise<any>;\n  abstract call(url: string, prefix?: string): Promise<any>;\n  abstract callHAControllers(url: string, prefix?: string): Promise<any>;\n  abstract resetEnrollment(id: string, date: string): Promise<any>;\n  abstract deleteEnrollment(enrollmentId: string): Promise<any>\n  abstract reissueEnrollment(id: string, date: string): Promise<any>;\n  abstract resetMFA(id: string): Promise<any>;\n  abstract resetPassword(oldPass, newPass, confirmPass): Promise<any>;\n  abstract schema(data: any): Promise<any>;\n\n  getRoleFilter(roleAttributes, semantic = 'AnyOf') {\n    let hasAll = false;\n    roleAttributes.forEach((attr) => {\n      if (attr === 'all') {\n        hasAll = true;\n      }\n    });\n    let filters = [];\n    if (!hasAll) {\n      filters = [\n        {\n          columnId: \"roleAttributes\",\n          filterName: \"Attributes\",\n          label: \"\",\n          type: \"ATTRIBUTE\",\n          value: roleAttributes,\n          semantic\n        }\n      ];\n    }\n    return filters;\n  }\n\n  getErrorMessage(resp) {\n    let errorMessage;\n\n    if (resp?.error?.error?.cause?.message) {\n      errorMessage = resp?.error?.error?.cause?.message;\n    } else if (resp?.error?.error?.cause?.reason) {\n      errorMessage = resp?.error?.error?.cause?.reason;\n    } else if (resp?.error?.message) {\n      errorMessage = resp?.error?.message;\n    } else if (resp?.error?.error?.message) {\n      errorMessage = resp?.error?.error?.message;\n    } else if (isString(resp?.error)) {\n      errorMessage = resp?.error;\n    } else {\n      errorMessage = 'An unknown error occurred';\n    }\n    return errorMessage;\n  }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Inject, Injectable} from '@angular/core';\nimport {BehaviorSubject} from 'rxjs';\nimport {debounceTime, distinctUntilChanged, map} from 'rxjs/operators';\nimport {isEmpty} from 'lodash';\nimport {SETTINGS_SERVICE} from './settings.service';\nimport {SettingsServiceClass} from './settings-service.class';\nimport {ZITI_DATA_SERVICE, ZitiDataService} from './ziti-data.service';\n\nexport const SAVE_DENIED_BY_PERMISSION_TOOLTIP = 'You do not have permission to save changes.';\n\n\n/** Maps ZAC entityType strings to controller permission entity keys. */\nexport const API_RESOURCE_TO_ENTITY_PERMISSION: Record<string, string> = {\n    identities: 'identity',\n    services: 'service',\n    'edge-routers': 'router',\n    'transit-routers': 'router',\n    'edge-router-policies': 'edge-router-policy',\n    'service-policies': 'service-policy',\n    'service-edge-router-policies': 'service-edge-router-policy',\n    terminators: 'terminator',\n    'posture-checks': 'posture-check',\n    'external-jwt-signers': 'external-jwt-signer',\n    'auth-policies': 'auth-policy',\n    configs: 'config',\n    'config-types': 'config-type',\n    cas: 'ca',\n    'api-sessions': 'ops',\n    sessions: 'ops',\n    enrollments: 'enrollment',\n};\n\n/** Session + controller URL — permissions only depend on these, not on version() metadata updates. */\ninterface SessionFingerprint {\n    sessionId: string;\n    edgeController: string;\n}\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class ManagementPermissionsService {\n    readonly saveDeniedTooltip = SAVE_DENIED_BY_PERMISSION_TOOLTIP;\n\n    private readonly permissionSet = new Set<string>();\n    private identityIsAdmin = false;\n    /** Legacy controller, failed refresh, or empty permissions — keep prior UX (no gating). */\n    private unrestricted = true;\n\n    private readonly versionSubject = new BehaviorSubject<number>(0);\n\n    readonly stateVersion$ = this.versionSubject.asObservable();\n\n    /** Coalesce overlapping current-identity HTTP calls (debounce + rapid settings churn). */\n    private identityLoadPromise: Promise<void> | null = null;\n\n    constructor(\n        @Inject(SETTINGS_SERVICE) private readonly settings: SettingsServiceClass,\n        @Inject(ZITI_DATA_SERVICE) private readonly zitiData: ZitiDataService,\n    ) {\n        this.settings.settingsChange\n            .pipe(\n                map((): SessionFingerprint => ({\n                    sessionId: this.settings.settings?.session?.id ?? '',\n                    edgeController: this.settings.settings?.selectedEdgeController ?? '',\n                })),\n                distinctUntilChanged(\n                    (a, b) => a.sessionId === b.sessionId && a.edgeController === b.edgeController,\n                ),\n                debounceTime(200),\n            )\n            .subscribe(() => {\n                if (!this.settings.hasSession() || isEmpty(this.settings.settings?.selectedEdgeController)) {\n                    this.clear();\n                    return;\n                }\n                void this.loadCurrentIdentity();\n            });\n    }\n\n    private bumpVersion(): void {\n        this.versionSubject.next(this.versionSubject.value + 1);\n    }\n\n    clear(): void {\n        this.permissionSet.clear();\n        this.identityIsAdmin = false;\n        this.unrestricted = true;\n        this.bumpVersion();\n    }\n\n    async refresh(): Promise<void> {\n        await this.loadCurrentIdentity();\n    }\n\n    private async loadCurrentIdentity(): Promise<void> {\n        if (this.identityLoadPromise) {\n            return this.identityLoadPromise;\n        }\n        this.identityLoadPromise = this.fetchCurrentIdentity().finally(() => {\n            this.identityLoadPromise = null;\n        });\n        return this.identityLoadPromise;\n    }\n\n    private async fetchCurrentIdentity(): Promise<void> {\n        try {\n            const result: any = await this.zitiData.call('current-identity');\n            const data = result?.data;\n            if (!data) {\n                this.applyLegacyMode();\n                this.bumpVersion();\n                return;\n            }\n            const rawPerms = Array.isArray(data.permissions) ? data.permissions : [];\n            this.identityIsAdmin = !!data.isAdmin;\n            if (rawPerms.length === 0 && !this.identityIsAdmin) {\n                this.applyLegacyMode();\n                this.identityIsAdmin = false;\n                this.bumpVersion();\n                return;\n            }\n            this.unrestricted = false;\n            this.permissionSet.clear();\n            rawPerms.forEach((p: string) => {\n                if (typeof p === 'string' && p.length > 0) {\n                    this.permissionSet.add(p);\n                }\n            });\n        } catch {\n            this.applyLegacyMode();\n        }\n        this.bumpVersion();\n    }\n\n    private applyLegacyMode(): void {\n        this.unrestricted = true;\n        this.permissionSet.clear();\n        this.identityIsAdmin = false;\n    }\n\n    isUnrestricted(): boolean {\n        return this.unrestricted;\n    }\n\n    private isAdmin(): boolean {\n        if (this.permissionSet.has('admin_readonly')) {\n            return false;\n        }\n        return this.identityIsAdmin || this.permissionSet.has('admin');\n    }\n\n    isAdminReadonly(): boolean {\n        return this.permissionSet.has('admin_readonly');\n    }\n\n    /** True once fetchCurrentIdentity() (or clear()) has run at least once — version > 0. */\n    get permissionsLoaded(): boolean {\n        return this.versionSubject.value > 0;\n    }\n\n    private resolveEntityKey(apiResource: string): string | null {\n        return API_RESOURCE_TO_ENTITY_PERMISSION[apiResource] ?? null;\n    }\n\n    private hasEntityGrant(entityKey: string): boolean {\n        return this.permissionSet.has(entityKey);\n    }\n\n    private hasActionGrant(entityKey: string, action: 'create' | 'read' | 'update' | 'delete'): boolean {\n        return this.permissionSet.has(`${entityKey}.${action}`);\n    }\n\n    canRead(apiResource: string): boolean {\n        if (this.unrestricted) return true;\n        const entityKey = this.resolveEntityKey(apiResource);\n        if (!entityKey) return true;\n        if (this.isAdmin() || this.isAdminReadonly()) return true;\n        return this.hasEntityGrant(entityKey) || this.hasActionGrant(entityKey, 'read');\n    }\n\n    canCreate(apiResource: string): boolean {\n        if (this.unrestricted) return true;\n        const entityKey = this.resolveEntityKey(apiResource);\n        if (!entityKey) return true;\n        if (this.isAdmin()) return true;\n        return this.hasEntityGrant(entityKey) || this.hasActionGrant(entityKey, 'create');\n    }\n\n    canUpdate(apiResource: string): boolean {\n        if (this.unrestricted) return true;\n        const entityKey = this.resolveEntityKey(apiResource);\n        if (!entityKey) return true;\n        if (this.isAdmin()) return true;\n        return this.hasEntityGrant(entityKey) || this.hasActionGrant(entityKey, 'update');\n    }\n\n    canDelete(apiResource: string): boolean {\n        if (this.unrestricted) return true;\n        const entityKey = this.resolveEntityKey(apiResource);\n        if (!entityKey) return true;\n        if (this.isAdmin()) return true;\n        return this.hasEntityGrant(entityKey) || this.hasActionGrant(entityKey, 'delete');\n    }\n\n    /** Strict read-only form UI: no write permission for this resource (covers admin_readonly and missing entity grant). */\n    useStrictReadonlyFormUi(apiResource: string, isEdit: boolean): boolean {\n        if (this.unrestricted || this.isAdmin()) return false;\n        return this.isSaveDisabled(apiResource, isEdit);\n    }\n\n    isSaveDisabled(apiResource: string, isEdit: boolean): boolean {\n        if (this.unrestricted) {\n            return false;\n        }\n        return isEdit ? !this.canUpdate(apiResource) : !this.canCreate(apiResource);\n    }\n\n    isMenuActionAllowed(apiResource: string, action: string): boolean {\n        if (this.unrestricted) {\n            return true;\n        }\n        switch (action) {\n            case 'delete':\n                return this.canDelete(apiResource);\n            case 'update':\n                return this.canUpdate(apiResource);\n            case 'reset-enrollment':\n            case 'reissue-enrollment':\n            case 'reset-mfa':\n            case 'override':\n                return this.canUpdate(apiResource);\n            case 'download-enrollment':\n            case 'qr-code':\n            case 'identity-service-path':\n                return this.canRead(apiResource);\n            default:\n                return this.canRead(apiResource);\n        }\n    }\n\n    isTableHeaderActionAllowed(apiResource: string, action: string): boolean {\n        if (this.unrestricted || this.isAdmin()) return true;\n        switch (action) {\n            case 'download-all':\n            case 'download-selected':\n                return this.canRead(apiResource);\n            default:\n                return true;\n        }\n    }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, Inject} from '@angular/core';\nimport {DialogRef} from \"@angular/cdk/dialog\";\nimport {MAT_DIALOG_DATA, MatDialogRef} from \"@angular/material/dialog\";\n\nimport {isEmpty, isNil} from \"lodash\";\n\n@Component({\n    selector: 'lib-confirm',\n    templateUrl: './confirm.component.html',\n    styleUrls: ['./confirm.component.scss'],\n    standalone: false\n})\nexport class ConfirmComponent {\n\n  dataObj = {\n    appendId: '',\n    title: '',\n    subtitle: '',\n    message: '',\n    confirmLabel: '',\n    confirmLabelAlt: undefined,\n    cancelLabel: '',\n    bulletList: [],\n    submessage: '',\n    showCancelButton: false,\n    showCancelLink: false,\n    showSecondaryConfirm: false,\n    secondaryConfirmLabel: '',\n    secondaryConfirmed: false,\n    secondaryActionLabel: undefined,\n    secondaryInfoLabel: undefined,\n    secondaryAction: undefined,\n    imageUrl: 'assets/svgs/Confirm_Trash.svg'\n  }\n\n  constructor(private dialogRef: MatDialogRef<ConfirmComponent>, @Inject(MAT_DIALOG_DATA) public data: any) {\n    this.dataObj = data;\n    if (isNil(this.dataObj?.cancelLabel) || isEmpty(this.dataObj?.cancelLabel)) {\n      this.dataObj.cancelLabel = 'Oops, no get me out of here';\n    }\n  }\n\n  confirm() {\n    this.dialogRef.close({confirmed: true, secondaryConfirmed: this.dataObj.secondaryConfirmed});\n  }\n\n  secondaryAction() {\n    if (!this.dataObj.secondaryAction) {\n      return;\n    }\n    this.dataObj.secondaryAction();\n  }\n\n  cancel() {\n    this.dialogRef.close({confirmed: false, secondaryConfirmed: false});\n  }\n\n  toggleSecondary(event) {\n    this.dataObj.secondaryConfirmed = !this.dataObj.secondaryConfirmed;\n  }\n}\n","<div class=\"confirm-modal-container\" id=\"ConfirmModal_{{dataObj.appendId || 'Default'}}\">\n  <div class=\"close icon-close\" (click)=\"cancel()\"></div>\n  <div class=\"confirm-model-body\">\n    <div class=\"confirm-modal-content\">\n      <div class=\"confirm-title-container\">\n        <span class=\"confirm-title\">{{dataObj.title}}</span>\n        <span class=\"confirm-subtitle\">{{dataObj.subtitle}}</span>\n      </div>\n      <div class=\"confirm-modal-main\">\n        <div class=\"confirm-modal-icon\" style=\"background-image: url({{dataObj.imageUrl}})\"></div>\n        <div>\n          <div class=\"confirm-message-content\">\n            <span [innerHTML]=\"dataObj.message\"></span>\n          </div>\n          <div class=\"confirm-message-bullet-list\">\n            <ul>\n              @for (item of dataObj.bulletList; track item) {\n                <li class=\"confirm-item-name\">{{item}}</li>\n              }\n            </ul>\n          </div>\n          @if (dataObj.submessage && dataObj.submessage.length > 0) {\n            <div class=\"confirm-message-sub-content\">\n              <span [innerHTML]=\"dataObj.submessage\"></span>\n            </div>\n          }\n        </div>\n      </div>\n    </div>\n  </div>\n  @if (dataObj.showSecondaryConfirm) {\n    <div class=\"secondary-confirm-container\">\n      <div class=\"cSelect\" [ngClass]=\"{'selected': dataObj.secondaryConfirmed}\" (click)=\"toggleSecondary($event)\"></div>\n      <div class=\"secondary-confirm-label\">{{dataObj.secondaryConfirmLabel}}</div>\n      @if (dataObj.secondaryInfoLabel) {\n        <div\n          class=\"form-field-info infoicon\"\n          matTooltip=\"{{dataObj.secondaryInfoLabel}}\"\n          matTooltipPosition=\"above\"\n        ></div>\n      }\n    </div>\n  }\n  <div class=\"confirm-buttons-container\">\n    @if (dataObj.showCancelLink) {\n      <div class=\"linkButton cancel\" (click)=\"cancel()\">{{dataObj.cancelLabel}}</div>\n    }\n    @if (dataObj.secondaryActionLabel && dataObj.secondaryConfirmed) {\n      <button class=\"button save secondary-button\" (click)=\"secondaryAction()\">{{dataObj.secondaryActionLabel}}</button>\n    }\n    @if (dataObj.showCancelButton) {\n      <button class=\"button save cancel\" (click)=\"cancel()\">{{dataObj.cancelLabel}}</button>\n    }\n    <button class=\"button save confirm\" (click)=\"confirm()\">{{dataObj.confirmLabelAlt && dataObj.secondaryConfirmed ? dataObj.confirmLabelAlt : dataObj.confirmLabel}}</button>\n  </div>\n</div>\n","import {Injectable} from '@angular/core';\nimport {BehaviorSubject} from \"rxjs\";\nimport {forEach, isEmpty} from \"lodash\";\nimport { HttpParams } from \"@angular/common/http\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {Location} from \"@angular/common\";\n\nexport type FilterObj = {\n    filterName: string;\n    columnId: string;\n    value: any;\n    label: string;\n    type?: string;\n    hidden?: boolean;\n    verb?: string\n}\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class DataTableFilterService {\n\n    filters: FilterObj[] = [];\n    currentPage = 1;\n    filtersChanged = new BehaviorSubject<FilterObj[]>(this.filters);\n    public filtering = new BehaviorSubject<boolean>(false);\n\n    pageChanged = new BehaviorSubject<any>(this.currentPage);\n\n    currentQueryParams = [];\n\n    constructor(private location: Location, private router: Router, private activatedRoute: ActivatedRoute) {\n    }\n\n    updateFilter(filterObj: FilterObj) {\n        if(isEmpty(filterObj.value) && (isNaN(filterObj.value) || filterObj.value === '')) this.removeFilter(filterObj);\n        else {\n            let isFound = false;\n            for (let idx = 0; idx < this.filters.length; idx++) {\n                if (this.filters[idx].columnId === filterObj.columnId) {\n                    this.filters[idx] = filterObj;\n                    isFound = true;\n                    break;\n                }\n            }\n            if (!isFound) {\n                this.filters.push(filterObj);\n            }\n        }\n        this.updateUrlParameters();\n        this.filtersChanged.next(this.filters);\n    }\n\n    removeFilter(filterObj: FilterObj) {\n        for (let idx = 0; idx < this.filters.length; idx++) {\n            if (this.filters[idx].columnId === filterObj.columnId) {\n                this.filters.splice(idx, 1);\n                break;\n            }\n        }\n        this.updateUrlParameters([filterObj]);\n        this.filtersChanged.next(this.filters);\n    }\n\n    getFilterString(key: string) {\n        let value = '';\n        for (let idx = 0; idx < this.filters.length; idx++) {\n            if (this.filters[idx].columnId === key) {\n                value = this.filters[idx].value;\n                break;\n            }\n        }\n        return value;\n    }\n\n    changePage(page: any) {\n        this.currentPage = page;\n        this.pageChanged.next(page);\n    }\n\n    clearFilters() {\n        this.filters = [];\n        this.updateUrlParameters();\n        this.filtersChanged.next(this.filters);\n    }\n\n    storeFilters() {\n        localStorage.setItem('search_filters', JSON.stringify(this.filters));\n    }\n\n    getStoredFilters() {\n        const storageItem = localStorage.getItem('search_filters');\n        const filters = storageItem ? JSON.parse(storageItem) : [];\n        return filters;\n    }\n\n    updateUrlParameters(filtersToRemove: any[] = []) {\n        const urlFiltersMap = this.getUrlFiltersMap();\n        let params: HttpParams = new HttpParams();\n        this.filters.forEach(filter => {\n            urlFiltersMap[filter.columnId] = filter;\n        });\n        const newFilters = [];\n        forEach(urlFiltersMap, (value, key) => {\n            const filterRemoved = filtersToRemove.some((removed) => {\n                return removed.columnId === key;\n            })\n            if (!filterRemoved) {\n                params = params.append(key, value.value);\n                newFilters.push(value);\n            }\n        });\n        this.filters = newFilters;\n        const path = this.router.url.split(\"?\")[0];\n        this.location.replaceState(path, params.toString());\n        this.storeFilters();\n    }\n\n    getUrlFiltersMap(): any {\n        const paramString = window.location.href.split(\"?\")[1];\n        const params: HttpParams = new HttpParams({ fromString: paramString });\n        const storedFilters = this.getStoredFilters();\n        const appliedFiltersMap = {};\n\n        params.keys().forEach((key) => {\n            const storedFilter = storedFilters.find((filter) => {\n                return filter.columnId === key;\n            });\n            if (storedFilter) {\n                appliedFiltersMap[key] = storedFilter;\n            } else {\n                let val: any = params.get(key);\n                let type = 'TEXTINPUT'\n                let label = val;\n                if (val?.split(',')?.length > 1) {\n                    val = val?.split(',');\n                    label = val[0];\n                    type = 'ATTRIBUTE'\n                }\n                appliedFiltersMap[key] = {\n                    columnId: key,\n                    value: val,\n                    label: decodeURIComponent(label),\n                    filterName: key,\n                    type: type\n                };\n            }\n        });\n        return appliedFiltersMap;\n    }\n\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {AfterViewInit, Component, ElementRef, Input, OnDestroy, OnInit, ViewChild} from '@angular/core';\nimport _ from 'lodash';\nimport {DataTableFilterService} from \"../../data-table-filter.service\";\nimport {Subscription} from \"rxjs\";\n\n@Component({\n    selector: 'app-table-column-filter',\n    templateUrl: './table-column-filter.component.html',\n    styleUrls: ['./table-column-filter.component.scss'],\n    standalone: false\n})\nexport class TableColumnFilterComponent implements OnInit, AfterViewInit, OnDestroy {\n    @Input() type = 'TEXTINPUT';\n    @Input() filterString = '';\n    @Input() filterName = '';\n    @Input() columnDef;\n    @Input() openStatusMenu;\n    @Input() dateFilter: any = '24h';\n\n    subscription = new Subscription();\n    setFilterDebounced = _.debounce(this.setFilter, 500);\n\n    @ViewChild('filterInput') filterInput: ElementRef;\n\n    constructor(public filterService: DataTableFilterService) {\n    }\n\n    ngOnInit(): void {\n        this.subscription.add(\n            this.filterService.filtersChanged.subscribe((filters) => {\n                let tmp = '';\n                for (let idx = 0; idx < filters.length; idx++) {\n                    if (filters[idx].columnId === this.columnDef?.colId) {\n                        tmp = filters[idx].value;\n                        break;\n                    }\n                }\n                this.filterString = tmp;\n            }));\n    }\n\n    setFilter(): void {\n        const filterObj = {\n            filterName: this.filterName,\n            columnId: this.columnDef?.colId,\n            value: this.filterString,\n            label: this.filterString,\n            type: this.type,\n        };\n        this.filterService.updateFilter(filterObj)\n    }\n\n    ngAfterViewInit() {\n        this.filterInput?.nativeElement?.focus();\n    }\n\n    statusClicked(event) {\n        if (event && this.openStatusMenu) {\n            event.statusFilter = true;\n            this.openStatusMenu(event);\n        }\n    }\n\n    ngOnDestroy(): void {\n        if(this.subscription) this.subscription.unsubscribe();\n    }\n\n    get availableRoleAttributes() {\n        return this.columnDef?.headerComponentParams?.roleAttributes;\n    }\n}\n","<div class=\"header-filter-container\">\n  @if (type === 'TEXTINPUT' || type === 'COMBO') {\n    <div class=\"text-input-filter\">\n      <input\n        #filterInput\n        (keyup)=\"setFilterDebounced()\"\n        [(ngModel)]=\"filterString\"\n        class=\"search\"\n        id=\"SearchFilter\"\n        placeholder=\"Type to Filter\"\n        type=\"text\"\n        />\n    </div>\n  }\n  @if (type === 'SELECT') {\n    <div></div>\n  }\n</div>\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {AfterViewInit, Component, ElementRef, OnInit, ViewChild} from '@angular/core';\nimport {IHeaderAngularComp} from 'ag-grid-angular';\nimport {IHeaderParams} from 'ag-grid-community';\nimport _ from 'lodash';\nimport {Subscription} from \"rxjs\";\nimport {DataTableFilterService} from \"../../data-table-filter.service\";\n\n@Component({\n    selector: 'app-table-column-default',\n    templateUrl: './table-column-default.component.html',\n    styleUrls: ['./table-column-default.component.scss'],\n    standalone: false\n})\nexport class TableColumnDefaultComponent implements IHeaderAngularComp, AfterViewInit, OnInit {\n  item: {\n    selected: boolean;\n  };\n  headerParams: any = {\n    api: {},\n  };\n  headerName;\n  enableSorting;\n  sortDir;\n  sortCol;\n  columnObj;\n  columnDef: any = {\n    sortDir: undefined,\n    colId: undefined,\n    pinColumn: undefined,\n    sortColumn: undefined,\n  };\n  filterType = 'TEXTINPUT';\n  filterOptions = [];\n  columnFilters: any = {};\n  filtering = false;\n  pinned;\n  showFilter = false;\n  comboActive = false;\n  showSecondaryFilter = false;\n  _showColumnMenu;\n\n  onlineStatusFilter;\n  showBubble = false;\n  showLoader = false;\n  private subscription = new Subscription();\n  @ViewChild('menuButton') menuButton: ElementRef;\n\n  constructor(private filterService: DataTableFilterService) {\n    if (!this) {\n      return;\n    }\n    this.item = {\n      selected: false,\n    };\n  }\n\n  _statusClass = 'v7Offline';\n\n  get statusClass(): string {\n    if (!this.showBubble) {\n      return '';\n    }\n    const status = _.get(\n      this.columnObj,\n      'gridApi.columnFilters.hasApiSession',\n      _.get(this.columnObj, 'gridApi.columnFilters.online')\n    );\n    switch (status) {\n      case 'all':\n        this._statusClass = 'v7OnlineOffline';\n        break;\n      case 'false':\n        this._statusClass = 'v7Offline';\n        break;\n      case 'true':\n        this._statusClass = 'v7Online';\n        break;\n      case 'provisioning':\n        this._statusClass = '';\n        this.showLoader = true;\n        break;\n      case 'error':\n        this._statusClass = 'v7Error';\n        break;\n      default:\n        this._statusClass = 'v7OnlineOffline';\n        break;\n    }\n    return this._statusClass;\n  }\n\n  get filterApplied(): boolean {\n    const columnId = _.get(this.columnDef, 'colId');\n    const filterVal = _.get(this.headerParams, `api.columnFilters.${columnId}`);\n    return !_.isEmpty(filterVal) || this.showFilter || this.filtering;\n  }\n\n  ngOnInit() {\n\n  }\n\n  ngOnDestroy(): void {\n    this.subscription.unsubscribe()\n  }\n\n  agInit(headerParams: any = {}): void {\n    if (!headerParams) {\n      return;\n    }\n    this.headerParams = headerParams;\n    this.enableSorting = headerParams.enableSorting;\n    this.headerName = headerParams.displayName;\n    this.columnObj = headerParams.column;\n    this.filterType = headerParams.filterType || 'TEXTINPUT';\n    this.columnFilters = headerParams.columnFilters;\n    this.columnDef = this.columnObj.colDef;\n    this.pinned = this.columnObj.pinned === 'left';\n    this.sortDir = this.columnDef.sortDir || 'none';\n    this.onlineStatusFilter = _.has(this.columnFilters, 'hasApiSession') ? 'hasApiSession' : 'online';\n    this.showBubble =\n      this.columnDef.colId === 'name' &&\n      (_.has(this.columnFilters, 'hasApiSession') || _.has(this.columnFilters, 'online'));\n    this._showColumnMenu = headerParams.showColumnMenu;\n    this.updateFilterOptions();\n    headerParams.api.addEventListener('sortChanged', (event) => {\n      const colId = _.get(event, 'columnDef.colId', '');\n      if (colId !== this.columnDef.colId) {\n        this.sortDir = undefined;\n      } else {\n        this.sortDir = _.get(event, 'sortDir');\n      }\n    });\n    headerParams.api.addEventListener('columnEverythingChanged', (event) => {\n      _.forEach(event.api?.columnModel?.columnDefs, colDef => {\n        if (this.columnDef.colId === colDef.colId && colDef.headerComponentParams?.filterOptions) {\n          this.updateFilterOptions();\n        }\n      });\n    });\n  }\n\n  ngAfterViewInit() {\n    if (this.showBubble) {\n      // this.updateStatusClass();\n    }\n  }\n\n  pin(): void {\n    this.columnDef.pinColumn(this.columnObj, this.pinned ? false : 'left');\n    this.pinned = !this.pinned;\n  }\n\n  hide(): void {\n    this.headerParams.api.zitiHideColumn(this.columnObj, false);\n  }\n\n  sort(event): void {\n    if (!this.columnDef.sortable) {\n      return;\n    }\n    const targetId = _.get(event, 'target.id');\n    if (\n      _.includes(\n        [`HeaderStatus_${this.columnDef.colId}`, 'SearchFilter', `HeaderFilterIcon_${this.columnDef.colId}`],\n        targetId\n      )\n    ) {\n      return;\n    }\n    if (_.isEmpty(this.sortDir)) {\n      this.sortDir = 'asc';\n    } else if (this.sortDir === 'asc') {\n      this.sortDir = 'desc';\n    } else {\n      this.sortDir = 'asc';\n    }\n    _.set(this.headerParams, 'api.sortDir', this.sortDir);\n    _.set(this.headerParams, 'api.sortDir', this.columnDef.colId);\n    if (this.columnDef.sortColumn) {\n      this.columnDef.sortColumn(this.columnDef.colId, this.sortDir, this.headerParams.api);\n      this.headerParams.api.dispatchEvent({\n        type: 'sortChanged',\n        columnDef: this.columnDef,\n        sortDir: this.sortDir,\n      });\n    }\n  }\n\n  toggleFilter(event) {\n    this.showFilter = !this.showFilter;\n    if (this.filterType === 'SELECT' || this.filterType === 'COMBO' || this.filterType === 'DATETIME'|| this.filterType === 'ATTRIBUTE') {\n      if (this.showFilter) {\n        this.updateFilterOptions();\n        _.invoke(this.headerParams, 'api.openHeaderFilter', event, this.filterOptions, this.filterType, this.columnDef?.colId, this.headerName, this.columnDef?.headerComponentParams);\n      } else {\n        _.invoke(this.headerParams, 'api.closeHeaderFilter', event);\n      }\n    } else if (this.filterType === 'CUSTOM') {\n      if (this.showFilter) {\n        this.updateFilterOptions();\n        _.invoke(this.headerParams, 'column.colDef.headerComponentParams.openHeaderFilter', event, this.filterOptions);\n      } else {\n        _.invoke(this.headerParams, 'column.colDef.headerComponentParams.closeHeaderFilter', event);\n      }\n    }\n  }\n\n  toggleSecondaryFilter(event) {\n    this.showSecondaryFilter = !this.showSecondaryFilter;\n    if (this.showSecondaryFilter) {\n      const options = [\n        {\n          label: 'Any',\n          columnId: this.onlineStatusFilter,\n          filterName: 'Status',\n          value: undefined,\n          bubbleClass: 'v7OnlineOffline',\n        },\n        {\n          label: 'Online',\n          columnId: this.onlineStatusFilter,\n          filterName: 'Status',\n          value: 'true',\n          bubbleClass: 'v7Online',\n        },\n        {\n          label: 'Offline',\n          columnId: this.onlineStatusFilter,\n          filterName: 'Status',\n          value: 'false',\n          bubbleClass: 'v7Offline',\n        },\n      ];\n      _.invoke(this.headerParams, 'api.openHeaderFilter', event, options);\n    } else {\n      _.invoke(this.headerParams, 'api.closeHeaderFilter', event);\n    }\n  }\n\n  hideFilter(event) {\n    const targetId = _.get(event, 'target.id');\n    if (\n      _.includes(\n        [`HeaderFilterButton_${this.columnDef.colId}`, `HeaderFilterIcon_${this.columnDef.colId}`],\n        targetId\n      )\n    ) {\n      return;\n    } else if (targetId === this.columnDef?.colId && this.filterType === 'COMBO') {\n      return;\n    }\n    _.invoke(this.headerParams, 'api.closeHeaderFilter', event);\n\n    this.comboActive = false;\n    this.showFilter = false;\n    this.showSecondaryFilter = false;\n  }\n\n  refresh(params: IHeaderParams): boolean {\n    return true;\n  }\n\n  openGridMenu(): void {\n    if (!this._showColumnMenu) {\n      return;\n    }\n    this._showColumnMenu(this.menuButton.nativeElement);\n  }\n\n  updateFilterOptions() {\n    let options = [];\n    if (this.headerParams.getFilterOptions) {\n      options = this.headerParams.getFilterOptions();\n    } else {\n      options = this.headerParams.filterOptions;\n    }\n    this.filterOptions = _.map(options, (option) => {\n      option.columnId = this.columnDef.colId;\n      option.filterName = this.headerName;\n      option.type = this.filterType;\n      return option;\n    });\n  }\n}\n","<div\n  (click)=\"sort($event)\"\n  [ngClass]=\"{ 'nf-can-sort': enableSorting }\"\n  class=\"ag-cell-label-container ag-header-cell-sorted-none\"\n  id=\"TableHeaderContainer_{{ columnDef.colId }}\"\n  >\n  @if (false) {\n    <span\n      #menuButton\n      (click)=\"openGridMenu()\"\n      class=\"ag-header-icon ag-header-cell-menu-button\"\n      id=\"HeaderMenu_{{ columnDef.colId }}\"\n      ref=\"eMenu\"\n      >\n      <span class=\"ag-icon ag-icon-menu\" unselectable=\"on\"></span>\n    </span>\n  }\n  <span\n    (click)=\"pin()\"\n    class=\"ag-header-icon ag-header-col-pin-button\"\n    id=\"HeaderPin_{{ columnDef.colId }}\"\n    title=\"{{ pinned ? 'Unpin Column' : 'Pin Column' }}\"\n    >\n    <span class=\"ag-icon ag-icon-pin\"></span>\n  </span>\n  <span\n    (click)=\"hide()\"\n    class=\"ag-header-icon ag-header-col-hide-button\"\n    id=\"HeaderHide_{{ columnDef.colId }}\"\n    title=\"Hide Column\"\n    >\n    <span class=\"ag-icon ag-icon-eye-slash\"></span>\n  </span>\n  <div class=\"ag-header-cell-label\" ref=\"eLabel\" unselectable=\"on\">\n    @if (!headerParams.filterType) {\n      <span\n        [ngClass]=\"{ 'ag-filter-applied': filterApplied }\"\n        class=\"ag-header-icon ag-header-col-filter-button\"\n        id=\"HeaderFilterSpacer_{{ columnDef.colId }}\"\n        >\n        <span class=\"ag-icon ag-icon-filter\" id=\"HeaderFilterSpace_{{ columnDef.colId }}\" style=\"opacity: 0\"></span>\n      </span>\n    }\n    @if (headerParams.filterType) {\n      <span\n        (click)=\"toggleFilter($event)\"\n        [ngClass]=\"{ 'ag-filter-applied': filterApplied }\"\n        class=\"ag-header-icon ag-header-col-filter-button\"\n        id=\"HeaderFilterButton_{{ columnDef.colId }}\"\n        >\n        <span class=\"ag-icon ag-icon-filter\" id=\"HeaderFilterIcon_{{ columnDef.colId }}\"></span>\n      </span>\n    }\n    <div\n      (clickOutside)=\"hideFilter($event)\"\n      [ngClass]=\"{ 'show-input-filter': showFilter }\"\n      class=\"header-text-container text-input-filter\"\n      >\n      @if (showBubble) {\n        <span\n          (click)=\"toggleSecondaryFilter($event)\"\n          [ngClass]=\"statusClass\"\n          class=\"bubble\"\n          id=\"HeaderStatus_{{ columnDef.colId }}\"\n          >\n          @if (showLoader) {\n            <svg class=\"circular\" viewBox=\"25 25 50 50\">\n              <circle\n                class=\"path\"\n                cx=\"50\"\n                cy=\"50\"\n                fill=\"none\"\n                r=\"20\"\n                stroke-miterlimit=\"10\"\n                stroke-width=\"3\"\n              ></circle>\n            </svg>\n          }\n        </span>\n      }\n      @if (((showFilter || comboActive) && !(filterType === 'COMBO' && !comboActive)) && filterType !== 'SELECT' && filterType !== 'CUSTOM') {\n        <app-table-column-filter\n          [columnDef]=\"columnDef\"\n          [filterName]=\"headerName\"\n          [filterString]=\"''\"\n          [openStatusMenu]=\"toggleSecondaryFilter.bind(this)\"\n          [type]=\"filterType\"\n        ></app-table-column-filter>\n      }\n      @if (((!showFilter && !comboActive) || (filterType === 'COMBO' && !comboActive)) || filterType === 'SELECT' || filterType === 'CUSTOM') {\n        <span\n          [title]=\"headerName\"\n          class=\"ag-header-cell-text\"\n          id=\"HeaderName_{{ columnDef.colId }}\"\n          unselectable=\"on\"\n          >{{ headerName }}</span\n          >\n        }\n      </div>\n      @if (enableSorting && !showFilter) {\n        <span\n          [ngClass]=\"{ 'ag-hidden': sortDir !== 'desc' }\"\n          class=\"ag-header-icon ag-header-label-icon ag-sort-ascending-icon\"\n          id=\"HeaderSortAsc_{{ columnDef.colId }}\"\n          >\n          <span class=\"ag-icon ag-icon-asc\" unselectable=\"on\"></span>\n        </span>\n      }\n      @if (enableSorting && !showFilter) {\n        <span\n          [ngClass]=\"{ 'ag-hidden': sortDir !== 'asc' }\"\n          class=\"ag-header-icon ag-header-label-icon ag-sort-descending-icon\"\n          id=\"HeaderSortDesc_{{ columnDef.colId }}\"\n          >\n          <span class=\"ag-icon ag-icon-desc\" unselectable=\"on\"></span>\n        </span>\n      }\n    </div>\n  </div>\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, Inject, inject, OnInit} from '@angular/core';\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../services/ziti-data.service\";\nimport {DataTableFilterService, FilterObj} from \"../features/data-table/data-table-filter.service\";\nimport {ValidatorCallback} from \"../features/list-page-features/list-page-form/list-page-form.component\";\nimport {DialogRef} from \"@angular/cdk/dialog\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {ConfirmComponent} from \"../features/confirm/confirm.component\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../services/settings.service\";\n\nimport {isEmpty, cloneDeep} from \"lodash\";\nimport {CsvDownloadService} from \"../services/csv-download.service\";\nimport {SettingsServiceClass} from \"../services/settings-service.class\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../features/extendable/extensions-noop.service\";\nimport moment from \"moment/moment\";\nimport {NavigationEnd, Router} from \"@angular/router\";\nimport {\n    TableColumnDefaultComponent\n} from \"../features/data-table/column-headers/table-column-default/table-column-default.component\";\nimport {GrowlerModel} from \"../features/messaging/growler.model\";\nimport {ManagementPermissionsService} from \"../services/management-permissions.service\";\n\nexport abstract class ListPageServiceClass {\n\n    abstract initTableColumns(): any[];\n    abstract getData(filters?: FilterObj[], sort?: any, page?: any): Promise<any[]>;\n    abstract openUpdate(entity?: any);\n    abstract resourceType: string;\n\n    CSV_COLUMNS = [\n        {label: 'Name', path: 'name'},\n        {label: 'ID', path: 'id'},\n        {label: 'Created At', path: 'createdAt'}\n    ];\n\n    basePath: string = '';\n\n    headerComponentParams = {\n        filterType: 'TEXTINPUT',\n        enableSorting: true\n    };\n\n    ID_COLUMN_DEF = {\n        colId: 'id',\n        field: 'id',\n        headerName: 'ID',\n        headerComponent: TableColumnDefaultComponent,\n        headerComponentParams: this.headerComponentParams,\n        cellRendererParams: { pathRoot: this.basePath, showIdentityIcons: true },\n        onCellClicked: (data: { data: { id: string; }; }) => {\n            if (this.hasSelectedText()) {\n                return;\n            }\n            this.openEditForm(data?.data?.id);\n        },\n        resizable: true,\n        cellClass: 'nf-cell-vert-align tCol',\n        sortable: true,\n        filter: true,\n        hide: true,\n    };\n\n    DEFAULT_PAGING: any = {\n        filter: \"\",\n        noSearch: false,\n        order: \"asc\",\n        page: 1,\n        searchOn: \"name\",\n        sort: \"name\",\n        total: 50\n    }\n    totalCount = 0;\n    dataService: ZitiDataService;\n    protected readonly managementPermissions = inject(ManagementPermissionsService);\n    refreshData: (sort?: {sortBy: string, ordering: string}) => void | undefined;\n\n    selectedEntityId: String;\n    menuItems: any = [];\n    tableHeaderActions: any = [];\n    /** Original menus/header actions before permission filtering (for singleton page services). */\n    private menuItemsBaseline: any[] | null = null;\n    private tableHeaderActionsBaseline: any[] | null = null;\n    private menuTemplateSnapshot: any[] | null = null;\n    private tableHeaderActionsSnapshot: any[] | null = null;\n    currentSettings: any = {};\n    dialogRef: any;\n    sideModalOpen = false;\n    currentSort = {\n        sortBy: 'name',\n        ordering: 'asc'\n    };\n\n    nameColumnRenderer = (row: { data: { id: any; name: any; }; }) => {\n        return `<div class=\"col cell-name-renderer\" data-id=\"${row?.data?.id}\">\n                    <strong>${row?.data?.name}</strong>\n                </div>`\n    }\n\n    rolesRenderer = (row: { column: { colId: any; }; data: { [x: string]: any[]; }; }) => {\n        const colId = row.column.colId;\n        let roles = '';\n        if (row?.data?.[colId + 'Display']) {\n            row?.data?.[colId + 'Display'].forEach((attr: { name: string | string[]; }) => {\n                const className = attr?.name?.indexOf('@') === 0 ? 'attag' : 'hashtag';\n                roles += `<div>\n                            <div class=\"${className}\">${attr.name}</div>\n                            <div class=\"tag-name\">${attr.name}</div>\n                          </div>`;\n            });\n        } else {\n            row?.data?.[colId]?.forEach((attr: string | string[]) => {\n                const className = attr.indexOf('@') === 0 ? 'attag' : 'hashtag';\n                roles += `<div>\n                            <div class=\"${className}\">${attr}</div>\n                            <div class=\"tag-name\">${attr}</div>\n                          </div>`;\n            });\n        }\n        return roles;\n    }\n\n    createdAtFormatter = (row: { data: { createdAt: moment.MomentInput; }; }) => {\n        return moment(row?.data?.createdAt).local().format('M/D/YYYY HH:mm A');\n    }\n\n    constructor(\n        @Inject(SETTINGS_SERVICE) protected settings: SettingsServiceClass,\n        protected filterService: DataTableFilterService,\n        protected csvDownloadService: CsvDownloadService,\n        @Inject(SHAREDZ_EXTENSION) protected extensionService: ExtensionService,\n        protected router?: Router\n    ) {\n        this.dataService = inject(ZITI_DATA_SERVICE);\n        this.settings.settingsChange.subscribe((settings) => {\n            if (!isEmpty(this.settings?.settings?.session?.id) || this.dataService.dataServiceType === ZitiDataService.NODE_DATA_SERVICE_TYPE) {\n                if ((this.currentSettings?.session?.id !== settings?.session?.id || this.dataService.dataServiceType === ZitiDataService.NODE_DATA_SERVICE_TYPE) && this.refreshData) {\n                    this.refreshData();\n                }\n            }\n            this.currentSettings = settings;\n        });\n        router.events.subscribe((event: any) => {\n            if (event instanceof NavigationEnd) {\n                const snapshot = this.router.routerState.snapshot.root;\n                const routeConfig = snapshot.firstChild?.routeConfig;\n                if (!routeConfig?.path) {\n                  return;\n                }\n                const pathSegments = routeConfig.path.split('/');\n                this.basePath = pathSegments[0];\n              }\n        });\n    }\n\n    /**\n     * Root-provided page services survive route changes; restore baseline menus before each table init\n     * so permission filtering does not stack on already-filtered items.\n     */\n    resetMenusForInit(): void {\n        if (!this.menuItemsBaseline) {\n            this.menuItemsBaseline = cloneDeep(this.menuItems);\n            this.tableHeaderActionsBaseline = cloneDeep(this.tableHeaderActions);\n        }\n        this.menuItems = cloneDeep(this.menuItemsBaseline);\n        this.tableHeaderActions = cloneDeep(this.tableHeaderActionsBaseline);\n    }\n\n    initMenuActions() {\n        if (this.extensionService.listActions) {\n            this.menuItems = this.menuItems.map((item: { action: any; }) => {\n                this.extensionService.listActions.forEach((extItem) => {\n                    if (item.action === extItem.action) {\n                        item = extItem;\n                    }\n                });\n                return item;\n            });\n            let filteredActions = this.extensionService.listActions.filter((extItem) => {\n                return !this.menuItems.some((item: { action: any; }) => {\n                    return item.action === extItem.action;\n                });\n            });\n            this.menuItems = [...this.menuItems, ...filteredActions];\n        }\n    }\n\n    addListItemExtensionActions(row: { actionList: any[]; }) {\n        if (this.extensionService.listActions) {\n            const keys = this.extensionService.listActions.map((action) => {\n                return action.action;\n            });\n            row.actionList = [...row.actionList, ...keys];\n        }\n    }\n\n    downloadItems(selectedItems: any[]) {\n        this.csvDownloadService.download(\n            this.resourceType,\n            selectedItems,\n            this.CSV_COLUMNS,\n            false,\n            false,\n            undefined,\n            false\n        );\n    }\n\n    downloadAllItems(): Promise<any> {\n        const paging = cloneDeep(this.DEFAULT_PAGING);\n        paging.total = -1;\n        return this.getTableData(this.resourceType, paging, undefined, undefined)\n            .then((results: any) => {\n                return this.downloadItems(results?.data);\n            });\n    }\n\n    getTableData(resourceType: string, paging: any, filters?: FilterObj[], sort?: any): Promise<any> {\n        if (!paging) {\n            paging = {...this.DEFAULT_PAGING};\n        }\n        if(sort) {\n            paging.sort = sort.sortBy;\n            paging.order = sort.ordering;\n        }\n        for (let idx = 0; idx < filters?.length; idx++) {\n            paging.noSearch = false;\n            paging.searchOn = filters[idx].columnId;\n            paging.filter = filters[idx].value;\n            paging.rawFilter = true;\n        }\n        this.filterService.filtering.next(true);\n        return this.dataService.get(resourceType, paging, filters).finally(() => {\n            this.filterService.filtering.next(false);\n        });\n    }\n\n    checkForAssociatedEntities(items: any[], type: string, associatedType: string) {\n        const itemsWithAssociations = [];\n        const promises = [];\n        items.forEach((config: { id: any; }) => {\n            const prom = this.dataService.getSubdata(type, config.id, associatedType).then((result: any) => {\n                const services = result.data || [];\n                if (services.length > 0) {\n                    itemsWithAssociations.push(config);\n                }\n            });\n            promises.push(prom);\n        });\n        return Promise.all(promises).then(() => {\n            return itemsWithAssociations;\n        });\n    }\n\n    removeItems(ids: string[]) {\n        const promises = [];\n        ids.forEach((id) => {\n            const prom = this.dataService.delete(this.resourceType, id);\n            promises.push(prom);\n        });\n        return Promise.all(promises).catch((response) => {\n            const message = this.dataService.getErrorMessage(response);\n            throw message;\n        });\n    }\n\n    sort(sortBy: any, ordering= 'asc') {\n        this.currentSort = {sortBy, ordering};\n        if(this.refreshData) this.refreshData({sortBy, ordering});\n    }\n\n    hasSelectedText() {\n        let text = '';\n        if (window.getSelection) {\n            text = window.getSelection().toString();\n        }\n        return text?.length > 0;\n    }\n\n    getNetworkJwt() {\n        return this.dataService.get('network-jwts', {}, []);\n    }\n\n    public openEditForm(itemId = '', basePath?: undefined) {\n        const isCreate = isEmpty(itemId);\n        if (isCreate && !this.managementPermissions.canCreate(this.resourceType)) {\n            return;\n        }\n        if (!isCreate && !this.managementPermissions.canRead(this.resourceType)) {\n            return;\n        }\n        if (isCreate) {\n            itemId = 'create';\n        }\n        const finalBasePath: string = basePath ?? this.basePath ?? '';\n        this.router?.navigateByUrl(`${finalBasePath}/${itemId}`);\n    }\n\n    remToPx(remValue: number) {\n        const rootFontSize: any = parseFloat(window.getComputedStyle(document.documentElement).fontSize);\n        return remValue * rootFontSize;\n    };\n\n    capturePermissionSnapshots(): void {\n        this.menuTemplateSnapshot = cloneDeep(this.menuItems);\n        this.tableHeaderActionsSnapshot = cloneDeep(this.tableHeaderActions);\n    }\n\n    rebuildMenusAndHeaders(perm: ManagementPermissionsService): void {\n        if (!this.menuTemplateSnapshot || !this.tableHeaderActionsSnapshot) {\n            return;\n        }\n        this.menuItems = cloneDeep(this.menuTemplateSnapshot).filter((item: { action?: string }) =>\n            perm.isMenuActionAllowed(this.resourceType, item.action),\n        );\n        this.tableHeaderActions = cloneDeep(this.tableHeaderActionsSnapshot).filter((item: { action?: string }) =>\n            perm.isTableHeaderActionAllowed(this.resourceType, item.action),\n        );\n    }\n}\n","import {EventEmitter, Injectable} from \"@angular/core\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class ConsoleEventsService {\n\n    refreshData: EventEmitter<any> = new EventEmitter<any>();\n    openSideModal: EventEmitter<any> =  new EventEmitter<any>();\n    closeSideModal: EventEmitter<any> =  new EventEmitter<any>();\n\n    constructor() {}\n\n    enableZACEvents() {\n\n    }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {DataTableFilterService} from \"../features/data-table/data-table-filter.service\";\nimport {ListPageServiceClass} from \"./list-page-service.class\";\nimport {inject, Injectable} from \"@angular/core\";\nimport {ManagementPermissionsService} from \"../services/management-permissions.service\";\nimport {Subscription} from \"rxjs\";\nimport {skip} from \"rxjs/operators\";\nimport {ConsoleEventsService} from \"../services/console-events.service\";\nimport {ConfirmComponent} from \"../features/confirm/confirm.component\";\nimport {MatDialog} from \"@angular/material/dialog\";\n\nimport {defer, isEmpty} from \"lodash\";\nimport {ActivatedRoute} from \"@angular/router\";\nimport {ExtensionService} from \"../features/extendable/extensions-noop.service\";\nimport {GrowlerService} from \"../features/messaging/growler.service\";\nimport {GrowlerModel} from \"../features/messaging/growler.model\";\n\n@Injectable()\nexport abstract class ListPageComponent {\n    abstract title;\n    abstract tabs: { url: string, label: string }[] ;\n    abstract headerActionClicked(action: string): void;\n    abstract tableAction(event: {action: string, item: any}): void;\n    abstract isLoading: boolean;\n    abstract closeModal(event?: any): void;\n\n    startCount = '-';\n    endCount = '-';\n    totalCount = '-';\n    itemsSelected = false;\n    selectedItems: any[] = [];\n    columnDefs: any = [];\n    rowData = [];\n    reservedNames = [];\n    filterApplied = false;\n    dialogRef: any;\n    modalOpen = false;\n    gridObj: any = {};\n\n    subscription: Subscription = new Subscription();\n\n    private growlerSvc = inject(GrowlerService);\n    protected readonly managementPermissions = inject(ManagementPermissionsService);\n\n    get headerBlockCreate(): boolean {\n        return !this.managementPermissions.canCreate(this.svc.resourceType);\n    }\n\n    get headerBlockDelete(): boolean {\n        return !this.managementPermissions.canDelete(this.svc.resourceType);\n    }\n\n    get headerBlockRead(): boolean {\n        return !this.managementPermissions.canRead(this.svc.resourceType);\n    }\n\n    constructor(\n        protected filterService: DataTableFilterService,\n        public svc: ListPageServiceClass,\n        protected consoleEvents: ConsoleEventsService,\n        protected dialogForm: MatDialog,\n        protected extensionService?: ExtensionService\n    ) {}\n\n    ngOnInit() {\n        this.filterService.currentPage = 1;\n        this.svc.sideModalOpen = false;\n        this.svc.refreshData = this.refreshData.bind(this);\n        this.svc.resetMenusForInit();\n        this.svc.initMenuActions();\n        this.columnDefs = this.svc.initTableColumns();\n        this.svc.capturePermissionSnapshots();\n        this.subscription.add(\n            this.managementPermissions.stateVersion$.subscribe(() => {\n                this.svc.rebuildMenusAndHeaders(this.managementPermissions);\n                this.syncBulkDownloadHeaderAction();\n                if (this.headerBlockRead) {\n                    this.rowData = [];\n                    this.isLoading = false;\n                }\n            }),\n        );\n        this.filterService.clearFilters();\n        this.extensionService?.extendOnInit();\n        this.subscription.add(\n            this.filterService.filtersChanged.subscribe(filters => {\n                this.filterApplied = filters && filters.length > 0;\n                this.refreshData();\n            })\n        );\n        this.subscription.add(\n            this.filterService.pageChanged.pipe(skip(1)).subscribe(page => {\n                this.refreshData();\n            })\n        );\n        this.subscription.add(\n            this.consoleEvents.closeSideModal.subscribe((event: any) => {\n                this.closeModal();\n            })\n        );\n        this.subscription.add(\n            this.consoleEvents.refreshData.subscribe((event: any) => {\n                this.refreshData();\n            })\n        );\n        this.consoleEvents.enableZACEvents();\n    }\n\n    ngOnDestroy() {\n        this.subscription.unsubscribe();\n    }\n\n    itemToggled(item: any): void {\n        this.updateSelectedItems(item);\n        this.syncBulkDownloadHeaderAction();\n    }\n\n    protected syncBulkDownloadHeaderAction(): void {\n        const hasSelection = this.selectedItems.length > 0;\n        const index = this.svc.tableHeaderActions.findIndex((a) => a.action === 'download-selected');\n        const allow = this.managementPermissions.canRead(this.svc.resourceType);\n        if (hasSelection && allow && index === -1) {\n            this.svc.tableHeaderActions.push({ name: 'Download Selected', action: 'download-selected' });\n        }\n        if ((!hasSelection || !allow) && index !== -1) {\n            this.svc.tableHeaderActions.splice(index, 1);\n        }\n    }\n\n    updateSelectedItems(toggledItem?: any) {\n        let itemSelected = false;\n        this.selectedItems = [];\n\n        this.rowData.forEach((item) => {\n            const reserved = this.reservedNames?.includes(item.name);\n            if (reserved) {\n                item.selected = false;\n            } else if (toggledItem?.id && toggledItem?.id === item?.id) {\n                item.selected = toggledItem.selected;\n            }\n            if (item.selected) {\n                itemSelected = true;\n                this.selectedItems.push(item);\n            }\n        });\n        this.itemsSelected = itemSelected;\n    }\n\n    refreshData(sort?: { sortBy: string, ordering: string }, hardRefresh = false): void {\n        if (this.headerBlockRead) {\n            this.isLoading = false;\n            return;\n        }\n        this.isLoading = true;\n        sort = sort ? sort : this.svc.currentSort;\n        this.svc.getData(this.filterService.filters, sort, this.filterService.currentPage)\n            .then((data: any) => {\n                this.rowData = [];\n                if (hardRefresh) {\n                    defer(() => {\n                        this.rowData = data.data;\n                    });\n                } else {\n                    this.rowData = data.data;\n                }\n\n                this.totalCount = data.meta.pagination.totalCount;\n                this.startCount = (data.meta.pagination.offset + 1);\n                if (this.startCount + data.meta.pagination.limit > this.totalCount) {\n                    this.endCount = this.totalCount;\n                } else {\n                    this.endCount = data.meta.pagination.offset + data.meta.pagination.limit;\n                }\n                this.updateSelectedItems();\n                this.syncBulkDownloadHeaderAction();\n                this.refreshCells();\n            }).finally(() => {\n                this.isLoading = false;\n            });\n    }\n\n    protected downloadAllItems() {\n        this.isLoading = true;\n        this.svc.downloadAllItems().then(() => {\n            const growlerData = new GrowlerModel(\n                'success',\n                'Success',\n                `Download Finished`,\n                `The requested items have been downloaded`,\n            );\n            this.growlerSvc.show(growlerData);\n        }).catch(() => {\n            const growlerData = new GrowlerModel(\n                'error',\n                'Error',\n                `Download Failed`,\n                `Failed to retrieve items for download`,\n            );\n            this.growlerSvc.show(growlerData);\n        }).finally(() => {\n            this.isLoading = false;\n        })\n    }\n\n    protected openBulkDelete(selectedItems: any[], entityTypeLabel = 'item(s)', ) {\n        if (!this.managementPermissions.canDelete(this.svc.resourceType)) {\n            return;\n        }\n        const selectedIds = selectedItems.map((row) => {\n            return row.id;\n        });\n        const selectedNames = selectedItems.map((item) => {\n            return item.name;\n        });\n        const countLabel = selectedItems.length > 1 ? selectedItems.length : '';\n        const data = {\n            appendId: 'DeleteServices',\n            title: 'Delete',\n            message: `Are you sure you would like to delete the following ${countLabel} ${entityTypeLabel}?`,\n            bulletList: selectedNames,\n            confirmLabel: 'Yes',\n            cancelLabel: 'Oops, no get me out of here',\n            imageUrl: 'assets/svgs/Confirm_Trash.svg',\n            showCancelLink: true\n        };\n        this.dialogRef = this.dialogForm.open(ConfirmComponent, {\n            data: data,\n            autoFocus: false,\n        });\n        this.dialogRef.afterClosed().subscribe((result) => {\n            if (result?.confirmed) {\n                this.svc.removeItems(selectedIds).then(() => {\n                    this.refreshData(this.svc.currentSort);\n                }).catch((errorMessage) => {\n                    const growlerData = new GrowlerModel(\n                        'error',\n                        'Error',\n                        `Delete Failed`,\n                        `Failed to delete item(s): ${errorMessage}`,\n                    );\n                    this.growlerSvc.show(growlerData);\n                });\n            }\n        });\n    }\n\n    handleExtensionActions(event) {\n        let extensionFound = false;\n        if (this.extensionService?.listActions?.length > 0) {\n            this.extensionService?.listActions?.forEach((extAction) => {\n                if (extAction?.action === event?.action) {\n                    extAction.callback(event.item);\n                    extensionFound = true;\n                }\n            });\n        }\n        return extensionFound;\n    }\n\n    gridReady(event) {\n        this.gridObj = event;\n    }\n\n    refreshCells() {\n        defer(() => {\n            var params = {\n                force: true,\n            };\n            this.gridObj?.api?.refreshCells(params);\n        });\n    }\n}\n","export class Service {\n    name = '';\n    encryptionRequired = true;\n    terminatorStrategy = '';\n    roleAttributes: any[] = [];\n    tags: any = {};\n    configs: any[] = [];\n    maxIdleTimeMillis = 0;\n};","import { Component } from '@angular/core';\nimport {ICellRendererAngularComp} from \"ag-grid-angular\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {ICellRendererParams} from \"ag-grid-community\";\nimport {Router} from \"@angular/router\";\n\nimport {isEmpty, isFunction, get} from 'lodash';\n\n@Component({\n    selector: 'lib-table-cell-name',\n    templateUrl: './table-cell-name.component.html',\n    styleUrls: ['./table-cell-name.component.scss'],\n    standalone: false\n})\nexport class TableCellNameComponent  implements ICellRendererAngularComp {\n\n  cellParams: any;\n  item: any;\n  value: any;\n  dialogRef: any;\n\n  constructor(public dialogForm: MatDialog, private router: Router) {\n  }\n\n  agInit(params: ICellRendererParams): void {\n    this.cellParams = params?.colDef?.cellRendererParams || {};\n    this.item = params.data;\n    this.value = params.value;\n  }\n\n  refresh(params: ICellRendererParams<any>): boolean {\n    this.cellParams = params?.colDef?.cellRendererParams || {};\n    this.item = params.data;\n    this.value = params.value;\n    return true;\n  }\n\n  get namePrefix(): { iconClass?: string; tooltip?: string } | null {\n    const fn = this.cellParams?.getNamePrefix;\n    if (typeof fn !== 'function') {\n      return null;\n    }\n    const result = fn(this.item);\n    if (!result?.show) {\n      return null;\n    }\n    return result;\n  }\n\n  linkClicked(event) {\n    event.stopPropagation();\n    event.preventDefault();\n    if (isFunction(this.cellParams?.cellNamePreCheck)) {\n      this.cellParams?.cellNamePreCheck(this.item).then((result) => {\n        if (!result?.confirmed) {\n          return;\n        }\n        this.router.navigateByUrl(`${this.cellParams.pathRoot}/${get(this.item, this.cellParams.itemProp, this.item.id)}`);\n      })\n      return;\n    }\n    this.router.navigateByUrl(`${this.cellParams.pathRoot}/${get(this.item, this.cellParams.itemProp, this.item.id)}`);\n  }\n\n  get cellText() {\n    let val = this.value;\n    if (isEmpty(val)) {\n      val = this.item.name;\n    }\n    return val;\n  }\n}\n","<span class=\"cell-name-container\">\n    <a href=\"./{{cellParams.pathRoot}}/{{item.id}}\" class=\"cell-name-link\" (click)=\"linkClicked($event)\">\n        <div class=\"col cell-name-renderer\" data-id=\"{{item.id}}\">\n            @if (cellParams.showIdentityIcons && item.edgeRouterConnectionStatus) {\n                <div class=\"cell-status-container\">\n                    <span class=\"circle {{item.edgeRouterConnectionStatus}}\" title=\"Edge Router Connection Status\"></span>\n                </div>\n            }\n            @if (cellParams.showIdentityIcons && !item.edgeRouterConnectionStatus) {\n                <div class=\"cell-status-container\">\n                    <span class=\"circle {{item.hasApiSession}}\" title=\"Api Session\"></span>\n                    <span class=\"circle {{item.hasEdgeRouterConnection}}\" title=\"Edge Router Connected\"></span>\n                </div>\n            }\n            @if (cellParams.showRouterIcons) {\n                <div class=\"cell-status-container\">\n                    <span class=\"circle {{item.isVerified}}\" title=\"{{item.isVerified ? 'Verified' : 'Unverified'}}\"></span>\n                    <span class=\"circle {{item.isOnline}}\" title=\"{{item.isOnline ? 'Online' : 'Offline'}}\"></span>\n                </div>\n            }\n            @if (namePrefix) {\n                <div class=\"cell-name-prefix-wrap\" [matTooltip]=\"namePrefix.tooltip\" [matTooltipShowDelay]=\"0\">\n                    <span class=\"cell-name-prefix-icon\" [ngClass]=\"namePrefix.iconClass\"></span>\n                </div>\n            }\n            <strong>{{cellText}}</strong>\n        </div>\n    </a>\n</span>\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {ValidationService} from \"../../../services/validation.service\";\n\n@Component({\n    selector: 'lib-port-ranges',\n    templateUrl: './port-ranges.component.html',\n    styleUrls: ['./port-ranges.component.scss'],\n    standalone: false\n})\nexport class PortRangesComponent {\n\n  @Input() fieldValue: string[] = [];\n  @Output() fieldValueChanged: EventEmitter<any> = new EventEmitter<any>();\n  errors: any = {};\n  invalid: boolean = false;\n\n  constructor(private validationService: ValidationService) {}\n\n  getProperties() {\n    if (!this.fieldValue) {\n      return [];\n    }\n    const ranges = this.validationService.getPortRanges(this.fieldValue);\n    return [{key: 'portRanges', value: ranges}];\n  }\n\n  setProperties(ranges) {\n    if (!ranges) {\n      this.fieldValue = [];\n      return;\n    }\n    this.fieldValue = this.validationService.combinePortRanges(ranges);\n  }\n\n  onKeyup(event: any) {\n    const key = event.key?.toLowerCase();\n    if (key === \" \" || key === 'enter') {\n      event.preventDefault();\n      event.stopPropagation();\n      const element = event.target as HTMLElement;\n      element.blur();\n      element.focus();\n    }\n  }\n\n  validateConfig() {\n    if (!this.fieldValue || this.fieldValue.length === 0) {\n      this.invalid = false;\n      return;\n    }\n    let invalid = false;\n    this.fieldValue.forEach((val: string) => {\n      const vals = val.split('-');\n      if (vals.length === 1) {\n        const port = parseInt(val);\n        if (!this.validationService.isValidPort(port)) {\n          invalid = true;\n          return;\n        }\n      } else if (vals.length === 2) {\n        const port1 = parseInt(vals[0]);\n        const port2 = parseInt(vals[1]);\n        if (!this.validationService.isValidPort(port1) || !this.validationService.isValidPort(port2)) {\n          invalid = true;\n          return;\n        } else if (port1 > port2) {\n          invalid = true;\n          return;\n        }\n      } else {\n        invalid = true;\n      }\n    });\n    this.invalid = invalid;\n  }\n\n  public setIsValid(isValid) {\n    this.invalid = !isValid;\n  }\n}\n","<label>PORT RANGES</label>\n<lib-chips-input\n  (onAdd)=\"validateConfig()\"\n  (onRemove)=\"validateConfig()\"\n  (keyup)=\"onKeyup($event)\"\n  [(ngModel)]=\"fieldValue\"\n  [allowDuplicate]=\"false\"\n  [invalid]=\"invalid\"\n  [placeholder]=\"'80 120-125 443 8080'\"\n  [addOnBlur]=\"true\"\n  separator=\",\">\n</lib-chips-input>","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Injectable} from \"@angular/core\";\nimport {ValidationService} from \"../../../services/validation.service\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class ForwardingConfigService {\n\n    constructor(private validationService: ValidationService) {}\n\n    getProperties(protocol, address, port, forwardProtocol, forwardAddress, forwardPort, allowedProtocols, allowedAddresses, allowedPortRanges) {\n        const props = [\n            {key: 'protocol', value: forwardProtocol ? undefined : protocol},\n            {key: 'address', value: forwardAddress ? undefined : address},\n            {key: 'port', value: forwardPort ? undefined : port},\n            {key: 'forwardProtocol', value: forwardProtocol ? forwardProtocol : undefined},\n            {key: 'forwardAddress', value: forwardAddress ? forwardAddress : undefined},\n            {key: 'forwardPort', value: forwardPort ? forwardPort : undefined},\n            {key: 'allowedAddresses', value: allowedAddresses},\n            {key: 'allowedPortRanges', value: this.validationService.getPortRanges(allowedPortRanges)},\n            {key: 'allowedProtocols', value: allowedProtocols},\n        ];\n        return props;\n    }\n\n    validate(allowedPortRanges) {\n        const errors: any = {};\n        errors.allowedPortRanges = this.validationService.validatePortRanges(allowedPortRanges);\n    }\n}","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, EventEmitter, Input, Output, ViewChild, ViewContainerRef} from '@angular/core';\nimport {ForwardingConfigService} from \"./forwarding-config.service\";\nimport {ValidationService} from \"../../../services/validation.service\";\nimport {isEmpty, isNil, unset} from \"lodash\";\nimport {ProtocolAddressPortInputComponent} from \"../protocol-address-port/protocol-address-port-input.component\";\n\n@Component({\n    selector: 'lib-forwarding-config',\n    templateUrl: './forwarding-config.component.html',\n    styleUrls: ['./forwarding-config.component.scss'],\n    standalone: false\n})\nexport class ForwardingConfigComponent {\n\n  @Input() protocol: string = 'tcp';\n  @Input() address: string = undefined;\n  @Input() port: number = undefined;\n  @Input() forwardProtocol = false;\n  @Input() forwardAddress = false;\n  @Input() forwardPort = false;\n  @Input() allowedAddresses: any = undefined;\n  @Input() allowedPortRanges: any = undefined;\n  @Input() allowedProtocols: any = undefined;\n  @Output() protocolChange: EventEmitter<string> = new EventEmitter<string>();\n  @Output() addressChange: EventEmitter<string> = new EventEmitter<string>();\n  @Output() portChange: EventEmitter<number> = new EventEmitter<number>();\n  @Output() forwardProtocolChange: EventEmitter<any> = new EventEmitter<any>();\n  @Output() forwardAddressChange: EventEmitter<any> = new EventEmitter<any>();\n  @Output() forwardPortChange: EventEmitter<any> = new EventEmitter<any>();\n  @Output() allowedAddressesChange: EventEmitter<any> = new EventEmitter<any>();\n  @Output() allowedPortRangesChange: EventEmitter<any> = new EventEmitter<any>();\n  @Output() allowedProtocolsChange: EventEmitter<any> = new EventEmitter<any>();\n\n  errors = {};\n\n  @ViewChild(\"papComponent\") papComponent:ProtocolAddressPortInputComponent;\n  constructor(private svc: ForwardingConfigService, private validationService: ValidationService) {}\n\n  forwardProtocolToggled(event) {\n    if (!this.forwardProtocol) {\n      this.allowedProtocols = undefined;\n    } else {\n      this.protocol = undefined;\n    }\n  }\n\n  forwardAddressToggled(event) {\n    if (!this.forwardAddress) {\n      this.allowedAddresses = undefined;\n    } else {\n      this.address = undefined;\n    }\n  }\n\n  forwardPortToggled(event) {\n    if (!this.forwardPort) {\n      this.allowedPortRanges = undefined;\n    } else {\n      this.port = undefined;\n    }\n  }\n\n  setProperties(data: any) {\n    this.forwardPort = data.forwardPort;\n    this.forwardProtocol = data.forwardProtocol;\n    this.forwardAddress = data.forwardAddress;\n    this.protocol = data.protocol ? data.protocol : 'tcp';\n    this.address = data.address;\n    this.port = data.port;\n    this.allowedProtocols = data.allowedProtocols;\n    this.allowedAddresses = data.allowedAddresses;\n    this.setAllowedPortRanges(data.allowedPortRanges);\n    this.svc.validate(this.allowedPortRanges);\n  }\n\n  props = [\n    { key: 'allowedAddresses', value: undefined },\n    { key: 'allowedPortRanges', value: undefined },\n    { key: 'forwardPort', value: undefined },\n    { key: 'forwardProtocol', value: undefined },\n    { key: 'forwardAddress', value: undefined },\n    { key: 'allowedProtocols', value: undefined },\n  ];\n\n  getProperties() {\n    return this.svc.getProperties(this.protocol, this.address, this.port, this.forwardProtocol, this.forwardAddress, this.forwardPort, this.allowedProtocols, this.allowedAddresses, this.allowedPortRanges);\n  }\n\n  validateAllowedAddresses() {\n    unset(this.errors, 'allowedAddresses');\n    if (isNil(this.allowedAddresses) || isEmpty(this.allowedAddresses)) {\n      this.errors['allowedAddresses'] = true;\n    }\n    return this.errors['allowedAddresses'];\n  }\n\n  validatePortRanges() {\n    unset(this.errors, 'allowedPortRanges');\n    const parsedRanges = this.validationService.parsePortRanges(this.allowedPortRanges);\n    if (isNil(this.allowedPortRanges) || isEmpty(this.allowedPortRanges) || this.validationService.validatePortRanges(parsedRanges)) {\n      this.errors['allowedPortRanges'] = true;\n    }\n    return this.errors['allowedPortRanges'];\n  }\n\n  setAllowedPortRanges(ranges) {\n    if (!ranges || isEmpty(ranges)) {\n      this.allowedPortRanges = undefined;\n      return;\n    }\n    this.allowedPortRanges = this.validationService.combinePortRanges(ranges);\n  }\n\n  isValid() {\n    this.errors = {};\n    const papIsValid = this.papComponent.isValid();\n    if (this.forwardPort) {\n      this.validatePortRanges();\n    }\n    if (this.forwardAddress) {\n      this.validateAllowedAddresses();\n    }\n    return isEmpty(this.errors) && papIsValid;\n  }\n\n  setValidationErrors(propertyPath = '', validationErrors: any[]) {\n    this.props.forEach((prop) => {\n      const hasValidationError: any = validationErrors?.some((error) => {\n        let pathToMach = error.instancePath;\n        if (!isEmpty(error?.params?.missingProperty)) {\n          pathToMach += '/' + error?.params?.missingProperty\n        }\n        return pathToMach === propertyPath + '/' + prop.key;\n      });\n      this.errors[prop.key] = hasValidationError;\n    });\n    this.papComponent.setValidationErrors(propertyPath, validationErrors);\n  }\n}\n","<div class=\"forwarding-config-container\">\n  <lib-protocol-address-port-input\n    [showProtocol]=\"true\"\n    [showAddress]=\"true\"\n    [showHostName]=\"false\"\n    [showPort]=\"true\"\n    [disableProtocol]=\"forwardProtocol\"\n    [disableAddress]=\"forwardAddress\"\n    [disablePort]=\"forwardPort\"\n    [(protocol)]=\"protocol\"\n    [(address)]=\"address\"\n    [(port)]=\"port\"\n    #papComponent\n  ></lib-protocol-address-port-input>\n  <div class=\"forwarding-config-toggles\">\n    <lib-boolean-toggle-input\n      [fieldName]=\"'FORWARD PROTOCOL'\"\n      [(fieldValue)]=\"forwardProtocol\"\n      (fieldValueChange)=\"forwardProtocolToggled($event)\"\n      >\n    </lib-boolean-toggle-input>\n    <lib-boolean-toggle-input\n      [fieldName]=\"'FORWARD ADDRESS'\"\n      [(fieldValue)]=\"forwardAddress\"\n      (fieldValueChange)=\"forwardAddressToggled($event)\"\n      >\n    </lib-boolean-toggle-input>\n    <lib-boolean-toggle-input\n      [fieldName]=\"'FORWARD PORT'\"\n      [(fieldValue)]=\"forwardPort\"\n      (fieldValueChange)=\"forwardPortToggled($event)\"\n      >\n    </lib-boolean-toggle-input>\n  </div>\n  <div class=\"forwarding-config-allowed-inputs\">\n    @if (forwardProtocol) {\n      <lib-checkbox-list-input\n        [ngClass]=\"{invalid: errors['allowedProtocols']}\"\n        [fieldName]=\"'ALLOWED PROTOCOLS'\"\n        [valueList]=\"['tcp', 'udp']\"\n        [(fieldValue)]=\"allowedProtocols\"\n        >\n      </lib-checkbox-list-input>\n    }\n    @if (forwardAddress) {\n      <lib-text-list-input\n        [ngClass]=\"{invalid: errors['allowedAddresses']}\"\n        [fieldName]=\"'ALLOWED ADDRESSES'\"\n        [placeholder]=\"'10.10.0.0/24 domain.com'\"\n        [(fieldValue)]=\"allowedAddresses\"\n        [labelColor]=\"'#000000'\"\n        >\n      </lib-text-list-input>\n    }\n    @if (forwardPort) {\n      <lib-text-list-input\n        [ngClass]=\"{invalid: errors['allowedPortRanges']}\"\n        [fieldName]=\"'ALLOWED PORT RANGES'\"\n        [placeholder]=\"'80 120-125 443 8080'\"\n        [(fieldValue)]=\"allowedPortRanges\"\n        [labelColor]=\"'#000000'\"\n        [fieldClass]=\"errors['allowedPortRanges'] ? 'error' : ''\"\n        (fieldValueChange)=\"validatePortRanges()\"\n        >\n      </lib-text-list-input>\n    }\n  </div>\n</div>\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {ComponentRef, Injectable, ViewContainerRef} from '@angular/core';\nimport {ObjectComponent} from \"../features/dynamic-widgets/object/object.component\";\nimport {NumberInputComponent} from \"../features/dynamic-widgets/number/number-input.component\";\nimport {BooleanToggleInputComponent} from \"../features/dynamic-widgets/boolean/boolean-toggle-input.component\";\nimport {StringInputComponent} from \"../features/dynamic-widgets/string/string-input.component\";\nimport {SelectorInputComponent} from \"../features/dynamic-widgets/selector/selector-input.component\";\nimport _, {isNumber} from \"lodash\";\nimport {TextListInputComponent} from \"../features/dynamic-widgets/text-list/text-list-input.component\";\nimport {CheckboxListInputComponent} from \"../features/dynamic-widgets/checkbox-list/checkbox-list-input.component\";\nimport {\n    ProtocolAddressPortInputComponent\n} from \"../features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component\";\nimport {PortRangesComponent} from \"../features/dynamic-widgets/port-ranges/port-ranges.component\";\nimport {ForwardingConfigComponent} from \"../features/dynamic-widgets/forwarding-config/forwarding-config.component\";\nimport {Subscription} from \"rxjs\";\nimport {GrowlerModel} from \"../features/messaging/growler.model\";\nimport {GrowlerService} from \"../features/messaging/growler.service\";\n\nexport type ProtocolAddressPort = {\n    protocol: any;\n    address: any;\n    hostname: any;\n    port: any;\n}\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class SchemaService {\n    data = {};\n    formId = null;\n    value = {};\n    codeView = null;\n    timeoutId = null;\n    suggesting = null;\n    suggestId: any = null;\n    suggestingField = \"\";\n    propertyExcludes = [];\n    reservedProperties = [];\n    reservedPropertiesMap: any = {\n        protocolAddressPort: undefined,\n        forwardProtocalAddressPort: undefined,\n        allowedAddresses: undefined,\n        forwardAddress: undefined\n    };\n    requiredProperties: any[] = ['allowedAddresses', 'allowedProtocols', 'allowedPorts'];\n    subscriptions: Subscription = new Subscription();\n    private items: any[] = [];\n    private bColorArray: string[] = [];\n    private lColorArray: string[] = [];\n\n    constructor(private growlerService: GrowlerService) {\n    }\n\n    /** DOM helpers (replacing jQuery): id prefix and element access */\n    private _prefix(p: any): string {\n        return (p != null) ? p + '_' : '';\n    }\n\n    private _id(p: any, key: string, suffix = ''): string {\n        return this._prefix(p) + 'schema_' + key + suffix;\n    }\n\n    private _q(id: string): HTMLElement | null {\n        return document.getElementById(id);\n    }\n\n    private _qAll(selector: string): Element[] {\n        return Array.from(document.querySelectorAll(selector));\n    }\n\n    getType(property: any) {\n        if (property.type == \"boolean\") return property.type;\n        else {\n            if (property.enum != null) return \"string\";\n            else {\n                if (property.type) return property.type;\n                else {\n                    if (property.allOf && property.allOf.length > 0) {\n                        return property.allOf[0].type;\n                    } else {\n                        return \"string\";\n                    }\n                }\n            }\n        }\n    }\n\n    renderSchema(schema, dynamicForm, lColorArray, bColorArray, formData) {\n        if (schema.properties) {\n            this.items = this.render(schema, dynamicForm, lColorArray, bColorArray);\n            for (let obj of this.items) {\n                const cRef = obj.component;\n                if (cRef?.instance.valueChange) {\n                    const pName: string[]  = cRef.instance.parentage;\n                    let parentKey;\n                    if(pName) parentKey = pName.join('.');\n                    if (parentKey && !formData[parentKey]) formData[parentKey] = {};\n                }\n            }\n        }\n        return this.items;\n    }\n\n    render(schema: any, view: ViewContainerRef, lColorArray: string[], bColorArray: string[]) {\n        this.items = [];\n        this.bColorArray = bColorArray;\n        this.lColorArray = lColorArray;\n        if (schema.properties) {\n            const nestLevel = 0;\n            this.addFields(schema, view, nestLevel, []);\n        }\n        const itemsToAdd = [];\n        if (this.reservedPropertiesMap.protocolAddressPort) {\n            itemsToAdd.push(this.reservedPropertiesMap.protocolAddressPort);\n        }\n        if (this.reservedPropertiesMap.allowedAddresses && this.reservedPropertiesMap.forwardAddress) {\n            itemsToAdd.push(this.reservedPropertiesMap.forwardAddress);\n            itemsToAdd.push(this.reservedPropertiesMap.allowedAddresses);\n        }\n        this.items = [...itemsToAdd, ...this.items];\n        return this.items;\n    }\n\n    validate(schema: any, formData: any): any {\n        let errors = {};\n        errors = {...errors, ...this.validateFields(schema, formData)};\n        return errors\n    }\n\n    validateFields(schema, formData: any, parentage?: string): any {\n        let errors = {};\n        for (let key in schema.properties) {\n            errors = {...errors, ...this.validateField(key, schema, formData, schema.properties[key], parentage)};\n        }\n        return errors;\n    }\n\n    validateField(key, schema, formData, property, parentage): any {\n        let errors = {}\n        var type = this.getType(property);\n\n        if (type == \"object\") {\n            let newParentage = key;\n            if (parentage) newParentage = `${parentage}.${key}`;\n            if (property.properties) {\n                errors = {...errors, ...this.validateFields(property, formData, newParentage)};\n            }\n        } else {\n            var theValue: string = _.get(formData, key)\n            if (schema.required && schema.required.includes(key) && theValue.length == 0) {\n                this.addError(errors, key, `${key} required`);\n\n            } else if (type == \"integer\") {\n                if (schema.required && schema.required.includes(key)) {\n                    var min = null;\n                    var max = null;\n                    if (property.minimum) min = Number(property.minimum);\n                    if (property.maximum) max = Number(property.maximum);\n                    if (isNaN(parseInt(theValue))) {\n                        this.addError(errors, key, `invalid number`);\n                    } else {\n                        var val = Number(theValue);\n                        if (min != null && val < min) {\n                            this.addError(errors, key, `minimum value ${min} expected`);\n                        }\n                        if (max != null && val > max) {\n                            this.addError(errors, key, `maximum value ${max} expected`);\n                        }\n                    }\n                }\n            }\n        }\n        return errors;\n    }\n\n    setValue(schema: any, key: string, type: string, value: any, parentage: string[]) {\n        if (value == null) {\n            if (type == \"array\") {\n                value = [];\n            } else if (type == \"integer\") {\n                value = 0;\n            } else if (type == \"boolean\") {\n                value = false;\n            } else {\n                value = \"\";\n            }\n        } else if (type == \"boolean\") {\n            const id = this._id(parentage, key);\n            const el = this._q(id);\n            if (value) {\n                el?.classList.add(\"on\");\n                this._qAll('.' + this._id(parentage, key) + \"_area\").forEach((area) => ((area as HTMLElement).style.display = ''));\n                const keyLower = key.split(\"forward\").join(\"\").toLowerCase();\n                const disabledEl = this._q(this._prefix(parentage) + \"schema_\" + keyLower);\n                if (disabledEl) {\n                    (disabledEl as HTMLInputElement).disabled = true;\n                    if (disabledEl.tagName === 'INPUT') (disabledEl as HTMLInputElement).value = '';\n                }\n            } else {\n                el?.classList.remove(\"on\");\n            }\n        } else {\n            if (type == \"array\") {\n                const selectedEl = this._q(this._id(parentage, key, '_selected'));\n                if (selectedEl) selectedEl.innerHTML = '';\n                const keyEl = this._q(this._id(parentage, key));\n                if (keyEl?.classList.contains(\"checkboxList\")) {\n                    const total = parseInt(String(keyEl.dataset['total'] ?? 0), 10);\n                    for (let i = 0; i < total; i++) {\n                        this._q(this._id(parentage, key) + '_' + i)?.classList.remove(\"checked\");\n                    }\n                }\n                for (let i = 0; i < value.length; i++) {\n                    if (typeof value[i] == \"object\") {\n                        let values = [];\n                        for (let prop in value[i]) {\n                            values.push(prop + \": \" + value[i][prop]);\n                        }\n                        let types = [];\n                        const obj = this._q(this._id(parentage, key, '_Button'));\n                        const objId = obj?.dataset['id'];\n                        const vals = (obj?.dataset['values'] ?? '').split(',');\n                        for (let j = 0; j < vals.length; j++) {\n                            const inputEl = objId ? this._q(objId + \"_\" + vals[j]) : null;\n                            types.push(inputEl?.getAttribute('type') == \"number\" ? \"number\" : \"string\");\n                        }\n                        const element = document.createElement('div');\n                        element.className = 'tag obj';\n                        element.dataset['types'] = types.toString();\n                        element.textContent = values.toString();\n                        element.addEventListener('click', schema.removeMe.bind(schema));\n                        this._q(this._id(parentage, key, '_selected'))?.appendChild(element);\n                    } else {\n                        if (keyEl?.classList.contains(\"checkboxList\")) {\n                            const total = parseInt(String(keyEl.dataset['total'] ?? 0), 10);\n                            for (let ii = 0; ii < total; ii++) {\n                                const itemEl = this._q(this._id(parentage, key) + '_' + ii);\n                                if (itemEl?.dataset['value'] == value[i]) itemEl.classList.add(\"checked\");\n                            }\n                        } else {\n                            const element = document.createElement('div');\n                            element.className = 'tag';\n                            element.textContent = value[i];\n                            element.addEventListener('click', schema.removeMe.bind(schema));\n                            this._q(this._id(parentage, key, '_selected'))?.appendChild(element);\n                        }\n                    }\n                }\n            } else {\n                const inputEl = this._q(this._id(parentage, key));\n                if (inputEl && 'value' in inputEl) (inputEl as HTMLInputElement).value = value;\n            }\n        }\n        return value;\n    }\n\n    getValue(key: string, property: any, json: any, parentage: string[]) {\n        if (this.getType(property) == \"array\") {\n            json[key] = [];\n            const keyEl = this._q(this._id(parentage, key));\n            if (keyEl?.classList.contains(\"checkboxList\")) {\n                const total = parseInt(String(keyEl.dataset['total'] ?? 0), 10);\n                for (let i = 0; i < total; i++) {\n                    const item = this._q(this._id(parentage, key) + '_' + i);\n                    if (item?.classList.contains(\"checked\")) json[key].push(item.dataset['value']);\n                }\n            } else {\n                const selectedEl = this._q(this._id(parentage, key, '_selected'));\n                if (selectedEl) {\n                    Array.from(selectedEl.children).forEach((e) => {\n                        const el = e as HTMLElement;\n                        if (el.classList.contains(\"obj\")) {\n                            const items = el.innerHTML.split(',');\n                            const types = (el.dataset['types'] ?? '').split(',');\n                            const obj: any = {};\n                            for (let i = 0; i < items.length; i++) {\n                                const info = items[i].split(':');\n                                const prop: any = info.shift();\n                                const value: any = info.join(':').trim();\n                                const type = types[i];\n                                if (type == \"number\" && !isNaN(value as any)) {\n                                    obj[prop] = Number(value);\n                                } else {\n                                    obj[prop] = value;\n                                }\n                            }\n                            json[key].push(obj);\n                        } else {\n                            json[key].push(el.innerHTML);\n                        }\n                    });\n                }\n            }\n        } else if (this.getType(property) == \"boolean\") {\n            json[key] = this._q(this._id(parentage, key))?.classList.contains(\"on\") ?? false;\n        } else if (this.getType(property) == \"integer\") {\n            const inputEl = this._q(this._id(parentage, key)) as HTMLInputElement | null;\n            let numValue: any = inputEl?.value;\n            if (numValue != null && numValue.trim().length > 0) {\n                numValue = numValue.trim();\n                if (numValue == \"\" || isNaN(numValue as any)) {\n                    numValue = 0;\n                    if (key.toLowerCase().indexOf(\"timeout\") >= 0) numValue = 5000;\n                } else {\n                    numValue = Number(numValue);\n                }\n                json[key] = numValue;\n            } else {\n                delete json[key];\n            }\n        } else {\n            const inputEl = this._q(this._id(parentage, key)) as HTMLInputElement | null;\n            json[key] = inputEl?.value;\n        }\n        return json;\n    }\n\n    getListValue(id: string) {\n        const listItems: any[] = [];\n        const container = this._q(id + \"_selected\");\n        if (!container) return listItems;\n        Array.from(container.children).forEach((e) => {\n            const el = e as HTMLElement;\n            if (el.classList.contains(\"obj\")) {\n                const items = el.innerHTML.split(',');\n                const obj: any = {};\n                for (let i = 0; i < items.length; i++) {\n                    const info = items[i].split(':');\n                    const prop = info.shift();\n                    const value: any = info.join(':').trim();\n                    if (!isNaN(value)) {\n                        obj[prop as string] = Number(value);\n                    } else {\n                        obj[prop as string] = value;\n                    }\n                }\n                listItems.push(obj);\n            } else {\n                listItems.push(el.innerHTML);\n            }\n        });\n        return listItems;\n    }\n\n    validateProperty(schema: any, key: string, property: any, parentage: string[]) {\n        const type = this.getType(property);\n        if (type == \"object\") {\n            for (let subKey in property.properties) {\n                this.validateProperty(subKey, property.properties[subKey], key, []);\n            }\n        } else {\n            const elem = this._q(this._id(parentage, key));\n            let theValue: any = '';\n            if (elem && 'value' in elem) theValue = (elem as HTMLInputElement).value;\n            if (type == \"integer\") {\n                if (schema.required && schema.required.includes(key)) {\n                    let min: number | null = null;\n                    let max: number | null = null;\n                    if (property.minimum) min = Number(property.minimum);\n                    if (property.maximum) max = Number(property.maximum);\n                    if (isNaN(parseInt(theValue))) elem?.classList.add(\"errors\");\n                    else {\n                        const val = Number(theValue);\n                        if (min != null && val < min) elem?.classList.add(\"errors\");\n                        if (max != null && val > max) elem?.classList.add(\"errors\");\n                    }\n                }\n            } else if (type == \"array\") {\n                if (schema.data.required && schema.data.required.includes(key)) {\n                    const keyEl = this._q(this._id(parentage, key));\n                    if (keyEl?.classList.contains(\"checkboxList\")) {\n                        const total = parseInt(String(keyEl.dataset['total'] ?? 0), 10);\n                        let hasSelection = false;\n                        for (let i = 0; i < total; i++) {\n                            const item = this._q(this._id(parentage, key) + '_' + i);\n                            if (item?.classList.contains(\"checked\")) {\n                                hasSelection = true;\n                                break;\n                            }\n                        }\n                        if (!hasSelection) keyEl.classList.add(\"errors\");\n                    } else {\n                        const selectedEl = this._q(this._id(parentage, key, '_selected'));\n                        if (selectedEl?.children.length == 0) elem?.classList.add(\"errors\");\n                    }\n                }\n            } else {\n                if (schema.data.required && schema.data.required.includes(key) && theValue.length == 0) elem?.classList.add(\"errors\");\n            }\n        }\n    }\n\n    private buildNestedContainer(view: ViewContainerRef, nestLevel: number, key: string, parentage: string[], property: any, parent?: any, parentType?: any) {\n        let componentRef = view.createComponent(ObjectComponent);\n        componentRef.setInput('fieldName', this.getLabel(key));\n        if (parentage && !_.isEmpty(parentage)) componentRef.setInput('parentage', parentage);\n        componentRef.setInput('bcolor', this.bColorArray[nestLevel % this.bColorArray.length]);\n        const embeddedView = componentRef.instance.wrapperContents;\n        componentRef.setInput('labelColor', this.lColorArray[nestLevel % this.lColorArray.length]);\n        componentRef.setInput('showAdd', parentType === 'array');\n        componentRef.setInput('open', key === 'terminators');\n        const newParent = [...parentage, key];\n        this.addFields(property, embeddedView, ++nestLevel, newParent, parent);\n        return componentRef;\n    }\n\n    private buildBooleanField(view: ViewContainerRef, nestLevel: number, key: string, parentage: string[]) {\n        let componentRef = view.createComponent(BooleanToggleInputComponent);\n        componentRef.setInput('fieldName', this.getLabel(key));\n        if (parentage && !_.isEmpty(parentage)) componentRef.setInput('parentage', parentage);\n        componentRef.setInput('fieldValue', false);\n        componentRef.setInput('labelColor', this.lColorArray[nestLevel]);\n        componentRef.instance.fieldValueChange.subscribe((event) => {\n            this.checkBoxChanged(event, key, componentRef);\n        });\n        return componentRef;\n    }\n\n    private buildTextField(view: ViewContainerRef, nestLevel: number, key: string, parentage: string[]) {\n        let componentRef = view.createComponent(StringInputComponent);\n        componentRef.setInput('fieldName', this.getLabel(key));\n        if (parentage && !_.isEmpty(parentage)) componentRef.setInput('parentage', parentage);\n        componentRef.setInput('fieldValue', '');\n        componentRef.setInput('placeholder', `enter a value for ${key}`);\n        componentRef.setInput('labelColor', this.lColorArray[nestLevel]);\n        return componentRef;\n    }\n\n    private buildNumericField(view: ViewContainerRef, nestLevel: number, key: string, property: any, parentage: string[]) {\n        let placeholder = \"enter a numeric value\";\n        if (property.minimum != null && property.maximum != null) placeholder = \"numeric value between \" + property.minimum + \"-\" + property.maximum;\n        else {\n            if (property.minimum != null) placeholder = \"number great than \" + property.minimum;\n            if (property.maximum != null) placeholder = \"number less than \" + property.maximum;\n        }\n        let componentRef = view.createComponent(NumberInputComponent);\n        componentRef.setInput('fieldName', this.getLabel(key));\n        if (parentage && !_.isEmpty(parentage)) componentRef.setInput('parentage', parentage);\n        componentRef.setInput('fieldValue', undefined);\n        componentRef.setInput('placeholder', placeholder);\n        componentRef.setInput('labelColor', this.lColorArray[nestLevel]);\n        return componentRef;\n    }\n\n    private buildSelectField(view: ViewContainerRef, nestLevel: number, key: string, list: string[], parentage: string[]) {\n        const val = list?.length > 0 ? list[0] : '';\n        let componentRef = view.createComponent(SelectorInputComponent);\n        componentRef.setInput('fieldName', this.getLabel(key));\n        componentRef.setInput('placeholder', `select ${key}`);\n        if (parentage && !_.isEmpty(parentage)) componentRef.setInput('parentage', parentage);\n        componentRef.setInput('valueList', list);\n        componentRef.setInput('labelColor', this.lColorArray[nestLevel]);\n        return componentRef;\n    }\n\n    private buildCheckBoxListField(view: ViewContainerRef, nestLevel: number, key: string, list: string[], parentage: string[]) {\n        let componentRef = view.createComponent(CheckboxListInputComponent);\n        componentRef.setInput('fieldName', this.getLabel(key));\n        if (parentage && !_.isEmpty(parentage)) componentRef.setInput('parentage', parentage);\n        componentRef.setInput('fieldValue', []);\n        componentRef.setInput('valueList', list);\n        componentRef.setInput('placeholder', `select a value`);\n        componentRef.setInput('labelColor', this.lColorArray[nestLevel]);\n        return componentRef;\n    }\n\n    checkBoxChanged(event, key, componentRef) {\n        this.items.forEach((ref: any) => {\n            if (key === 'forwardAddress' && ref.key === 'allowedAddresses') {\n                ref.component.location.nativeElement.hidden = !event;\n            }\n            if (key === 'forwardPort' && ref.key === 'allowedPortRanges') {\n                ref.component.location.nativeElement.hidden = !event;\n            }\n            if (key === 'forwardProtocol' && ref.key === 'allowedProtocols') {\n                ref.component.location.nativeElement.hidden = !event;\n            }\n        });\n    }\n\n    private buildTextListField(view: ViewContainerRef, nestLevel: number, key: string, parentage: string[]) {\n        let componentRef = view.createComponent(TextListInputComponent);\n        componentRef.setInput('fieldName', this.getLabel(key));\n        if (parentage && !_.isEmpty(parentage)) componentRef.setInput('parentage', parentage);\n        componentRef.setInput('fieldValue', []);\n        componentRef.setInput('placeholder', `enter values separated with a comma`);\n        componentRef.setInput('labelColor', this.lColorArray[nestLevel]);\n        return componentRef;\n    }\n\n    private buildPortRanges(view: ViewContainerRef, nestLevel: number, parentage: string[], properties: ProtocolAddressPort) {\n        let componentRef = view.createComponent(PortRangesComponent);\n        return {\n            key: 'portRanges',\n            component: componentRef\n        };\n    }\n\n    private buildForwardingConfig(view: ViewContainerRef, nestLevel: number, parentage: string[], properties: ProtocolAddressPort) {\n        let componentRef = view.createComponent(ForwardingConfigComponent);\n        return {\n            key: 'forwardingconfig',\n            component: componentRef,\n            required: true\n        };\n    }\n\n    private buildProtocolAddressPort(view: ViewContainerRef, nestLevel: number, parentage: string[], properties: ProtocolAddressPort) {\n        let labelPrefix = undefined;\n        let protocolList = undefined;\n        let showProtocol = false;\n        let showAddress = false;\n        let showHostName = false;\n        let showPort = false;\n        if (properties.protocol) {\n            showProtocol = true;\n            protocolList = properties.protocol?.enum?.map(p => p.toUpperCase());\n            if (properties.protocol?.key?.startsWith('forward')) labelPrefix = 'Forward ';\n        }\n        if (properties.address) {\n            showAddress = true;\n            if (properties.address?.key?.startsWith('forward')) labelPrefix = 'Forward ';\n        }\n        if (properties.hostname) {\n            showHostName = true;\n            if (properties.hostname?.key?.startsWith('forward')) labelPrefix = 'Forward ';\n        }\n        if (properties.port) {\n            showPort = true;\n            if (properties.port?.key?.startsWith('forward')) labelPrefix = 'Forward ';\n        }\n        let componentRef = view.createComponent(ProtocolAddressPortInputComponent);\n        if (parentage && !_.isEmpty(parentage)) componentRef.setInput('parentage', parentage);\n        componentRef.setInput('showProtocol', showProtocol);\n        componentRef.setInput('showAddress', showAddress);\n        componentRef.setInput('showHostName', showHostName);\n        componentRef.setInput('showPort', showPort);\n        componentRef.setInput('protocol', '');\n        componentRef.setInput('address', '');\n        componentRef.setInput('hostname', '');\n        componentRef.setInput('port', '');\n        componentRef.setInput('protocolList', protocolList);\n        if (labelPrefix) componentRef.setInput('labelPrefix', labelPrefix);\n        componentRef.setInput('labelColor', this.lColorArray[nestLevel]);\n        return {\n            key: 'pap',\n            component: componentRef\n        }\n    }\n\n    private getLabel(key: string) {\n        return key.replace(/([A-Z])/g, (m, p) => ' ' + p).toUpperCase();\n    }\n\n    private addFields(schema: any, view: ViewContainerRef, nestLevel: number, parentage: string[], parent?: any) {\n        const {specialFields, excludedProperties} = this.addSpecialFields(schema, view, nestLevel, parentage);\n        if (specialFields.length > 0) {\n            if (parentage.length > 0) {\n                if (parent?.items) {\n                    parent.items = [...parent.items, ...specialFields];\n                } else if (parent) {\n                    parent.items = [...specialFields];\n                }\n            } else {\n                this.items = [...this.items, ...specialFields];\n            }\n        }\n        for (let key in schema.properties) {\n            if (excludedProperties.includes(key) || this.propertyExcludes.includes(key)) {\n                continue;\n            }\n            let item: any = {};\n            const component = this.addField(view, nestLevel, key, schema.properties[key], parentage, item);\n            item.key = key;\n            item.component = component;\n            item.type = schema.properties[key]?.type;\n            this.addSubscribers(item);\n            if (this.reservedProperties.includes(key)) {\n                this.reservedPropertiesMap[key] = item;\n            } if (parentage.length > 0) {\n                if (parent?.items) {\n                    parent.items.push(item);\n                } else if (parent) {\n                    parent.items = [item];\n                }\n            } else {\n                this.items.push(item);\n            }\n        }\n    }\n\n    addSubscribers(item) {\n        if (item.type !== 'array') {\n            return;\n        }\n        this.subscriptions.add(\n            item?.component?.instance?.itemAdded?.subscribe((event) => {\n                if (!this.itemDataValid(item)) {\n                    const growlerData = new GrowlerModel(\n                        'error',\n                        'Error',\n                        `Error Validating Config`,\n                        'The entered configuration is invalid. Please update missing/invalid fields and try again.',\n                    );\n                    this.growlerService.show(growlerData);\n                    return\n                }\n                const itemData = this.addItemData(item);\n                if (!item.addedItems || item.addedItems.length <= 0) {\n                    item.addedItems = [];\n                }\n                item.addedItems.push(itemData);\n                item.component.instance.addedItems = item.addedItems;\n            })\n        );\n        this.subscriptions.add(\n            item?.component?.instance?.itemRemoved?.subscribe(() => {\n                item.addedItems = item.component?.instance?.addedItems;\n            })\n        );\n    }\n\n    itemDataValid(item: any) {\n        let isValid = true;\n        item.items.forEach((subItem) => {\n            if (subItem.type === 'array') {\n                subItem.addedItems.forEach((addedItem) => {\n                    if (addedItem?.component?.instance?.isValid) {\n                        if (!addedItem?.component?.instance?.isValid()) {\n                            isValid = false;\n                        }\n                    }\n                });\n            } else {\n                if (subItem?.component?.instance?.isValid) {\n                    if (!subItem?.component?.instance?.isValid()) {\n                        isValid = false;\n                    }\n                }\n            }\n        });\n        return isValid;\n    }\n\n    addItemData(item) {\n        let itemData = {};\n        item.items.forEach((subItem) => {\n            let isValid = true;\n            if (subItem.type === 'array') {\n                if (subItem.addedItems) {\n                    itemData[subItem.key] = subItem.addedItems;\n                } else {\n                    itemData[subItem.key] = [];\n                }\n            } else {\n                if (subItem?.component?.instance?.getProperties) {\n                    const props = subItem?.component?.instance?.getProperties();\n                    props.forEach((prop) => {\n                        itemData[prop.key] = prop.value;\n                    });\n                    subItem?.component?.instance?.setProperties({});\n                } else if (subItem?.component?.instance?.fieldValue) {\n                    itemData[subItem.key] = subItem.component.instance.fieldValue;\n                    subItem.component.instance.fieldValue = undefined;\n                } else if (subItem.items) {\n                    itemData[subItem.key] = this.addItemData(subItem);\n                }\n            }\n        });\n        return itemData;\n    }\n\n    private addFieldToParentItem(itemToAdd, parentage) {\n        let parentItem;\n        let items = this.items;\n        parentage.forEach((parent: any) => {\n            items.forEach((item: any) => {\n                if (item.key === parent) {\n                    parentItem = item;\n                    if (item.items) {\n                        items = item.items;\n                    }\n                }\n            })\n        });\n        parentItem.items = itemToAdd;\n    }\n\n    private addSpecialFields(schema: any, view: ViewContainerRef, nestLevel: number, parentage: string[]) {\n        const specialFields = [];\n        let address = undefined;\n        let hostname = undefined;\n        let port = undefined;\n        let protocol = undefined;\n        let forwardProtocol = undefined;\n        let forwardPort = undefined;\n        let forwardAddress = undefined;\n        let portRanges = undefined;\n        let excludedProperties = [];\n        for (let key in schema.properties) {\n            let exclude = true;\n            if (key === \"port\") port = schema.properties[key];\n            else if (key === \"address\") address = schema.properties[key];\n            else if (key === \"hostname\") hostname = schema.properties[key];\n            else if (key === \"protocol\") protocol = schema.properties[key];\n            else if (key === \"forwardProtocol\") forwardProtocol = schema.properties[key];\n            else if (key === \"forwardPort\") forwardPort = schema.properties[key];\n            else if (key === \"forwardAddress\") forwardAddress = schema.properties[key];\n            else if (key === \"portRanges\") portRanges = schema.properties[key];\n            else exclude = false;\n\n            if (exclude) {\n                excludedProperties.push(key);\n            }\n        }\n        if ((protocol || address || hostname || port) && !(forwardProtocol && forwardAddress && forwardPort)) {\n            const properties: ProtocolAddressPort = {protocol, address, hostname, port};\n            specialFields.push(this.buildProtocolAddressPort(view, nestLevel, parentage, properties));\n        }\n        if (forwardProtocol && forwardAddress && forwardPort) {\n            const properties: ProtocolAddressPort = {\n                protocol: forwardProtocol,\n                address: forwardAddress,\n                hostname: undefined,\n                port: forwardPort\n            };\n            specialFields.push(this.buildForwardingConfig(view, nestLevel, parentage, properties));\n            excludedProperties = [...excludedProperties, ...['allowedAddresses', 'allowedPortRanges', 'allowedProtocols']];\n        }\n        if (portRanges) {\n            specialFields.push(this.buildPortRanges(view, nestLevel, parentage, portRanges));\n        }\n        return {specialFields, excludedProperties};\n    }\n\n    private addField(view: ViewContainerRef, nestLevel: number, key: string, property: any, parentage: string[], parent?: any) {\n        const type = this.getType(property);\n        let componentRef: ComponentRef<any> | null = null;\n        if (type == \"object\") {\n            if (property.properties) {\n                componentRef = this.buildNestedContainer(view, nestLevel, key, parentage, property, parent, type);\n            }\n        } else if (type == \"integer\") {\n            componentRef = this.buildNumericField(view, nestLevel, key, property, parentage);\n        } else if (type == \"array\") {\n            let items: any = {};\n            if (property.allOf && property.allOf.length >= 2) items = property.allOf[1];\n            if (property.items) items = property.items;\n            if (items.items) items = items.items;\n\n            if (items.type && items.type == \"object\" && items.properties != null) {\n                const subItems = [];\n                for (var subKey in items.properties) {\n                    subItems.push({\n                        key: subKey,\n                        value: items.properties[subKey]\n                    });\n                }\n                componentRef = this.buildNestedContainer(view, nestLevel, key, parentage, items, parent, type);\n            } else if (Array.isArray(items.enum)) {\n                componentRef = this.buildCheckBoxListField(view, nestLevel, key, items.enum, parentage);\n            } else {\n\n                componentRef = this.buildTextListField(view, nestLevel, key, parentage);\n            }\n        } else if (type == \"boolean\") {\n            componentRef = this.buildBooleanField(view, nestLevel, key, parentage);\n        } else if (property.enum && property.enum.length > 0) {\n            componentRef = this.buildSelectField(view, nestLevel, key, property.enum, parentage);\n\n        } else if (type == \"string\") {\n            componentRef = this.buildTextField(view, nestLevel, key, parentage);\n        }\n        return componentRef;\n    }\n\n    private addError(errors: any, key: string, msg: string) {\n        if (errors[key]) errors[key] = `${errors[key]}; ${msg}`;\n        else errors[key] = msg;\n        return errors;\n    }\n}\n","import {Injectable} from '@angular/core';\nimport {GrowlerService} from '../features/messaging/growler.service';\nimport {GrowlerModel} from \"../features/messaging/growler.model\";\nimport {AngularCsv} from 'angular-csv-ext/dist/Angular-csv';\nimport {saveAs} from 'file-saver';\nimport {isEmpty, isBoolean, get} from 'lodash';\n\nconst defaultOptions = {\n    fieldSeparator: ',',\n    quoteStrings: '\"',\n    decimalseparator: '.',\n    showLabels: true,\n    showTitle: false,\n    useBom: true,\n};\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class CsvDownloadService {\n    constructor(\n        private growler: GrowlerService\n    ) {\n    }\n\n    public download(\n        filename: string,\n        items: any[],\n        columns: any[],\n        translateStatus?: boolean,\n        isEndpoint?: boolean,\n        options?: any,\n        toUpperCase = true\n    ) {\n        const useOptions = options != null ? options : defaultOptions;\n\n        const data = [];\n\n        if (items.length > 0) {\n            // Construct the header rows\n            const header = {};\n\n            for (const column of columns) {\n                const key = column.path ? column.path : column;\n                const headerText = column.label ? column.label : (toUpperCase ? column.toUpperCase() : column);\n                header[key] = headerText;\n            }\n            data.push(header);\n\n            // Construct each row based on the columns defined\n            for (const item of items) {\n                const row = {};\n\n                for (const column of columns) {\n                    const path = column.path ? column.path : column;\n                    let columnValue = get(item, path);\n                    if (isBoolean(columnValue)) {\n                        columnValue = '' + columnValue;\n                    }\n                    if (isEmpty(columnValue)) {\n                        row[path] = '';\n                    } else {\n                        if (Array.isArray(columnValue)) {\n                            row[path] = columnValue.join(',');\n                        } else {\n                            row[path] = columnValue;\n                        }\n                    }\n                }\n                data.push(row);\n            }\n\n            const csv = new AngularCsv(data, filename, useOptions);\n        } else {\n            this.growler.show(\n                new GrowlerModel(\n                    'warning',\n                    'No Data',\n                    'Dataset is Empty',\n                    'The system must have data in order to generate an export file.'\n                )\n            );\n        }\n    }\n\n    downloadAll(data, filename, useOptions?, type?) {\n        let fileType = 'csv';\n        switch (type) {\n            case 'text/csv':\n                fileType = 'csv';\n                break;\n            case 'application/json':\n                fileType = 'json';\n                break;\n            case 'application/x-yaml':\n                fileType = 'yml';\n                break;\n        }\n        if (useOptions && useOptions.isEndpoint) {\n            data = data.replace('hasApiSession', 'online');\n        }\n        const newBlob = new Blob([decodeURIComponent(encodeURI(data))], {\n            type: `${type};charset=utf-8;`,\n        });\n        saveAs(newBlob, `${filename}.${fileType}`);\n    }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Inject, Injectable} from '@angular/core';\nimport {DataTableFilterService, FilterObj} from \"../../features/data-table/data-table-filter.service\";\nimport _, {isEmpty, unset} from \"lodash\";\nimport moment from \"moment\";\nimport {ListPageServiceClass} from \"../../shared/list-page-service.class\";\nimport {\n    TableColumnDefaultComponent\n} from \"../../features/data-table/column-headers/table-column-default/table-column-default.component\";\nimport {CallbackResults} from \"../../features/list-page-features/list-page-form/list-page-form.component\";\nimport {SchemaService} from \"../../services/schema.service\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../services/settings.service\";\nimport {CsvDownloadService} from \"../../services/csv-download.service\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../features/extendable/extensions-noop.service\";\nimport {Service} from \"../../models/service\";\nimport {TableCellNameComponent} from \"../../features/data-table/cells/table-cell-name/table-cell-name.component\";\nimport {Router} from \"@angular/router\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class ConfigurationsPageService extends ListPageServiceClass {\n\n    private paging = this.DEFAULT_PAGING;\n\n    resourceType = 'configs';\n    selectedConfig: any = {};\n    modalType = '';\n\n    override menuItems = [\n        {name: 'Edit', action: 'update'},\n        {name: 'Delete', action: 'delete'},\n    ]\n\n    constructor(\n        private schemaSvc: SchemaService,\n        @Inject(SETTINGS_SERVICE) settings: SettingsService,\n        filterService: DataTableFilterService,\n        csvDownloadService: CsvDownloadService,\n        @Inject(SHAREDZ_EXTENSION) extService: ExtensionService,\n        protected override router: Router\n    ) {\n        super(settings, filterService, csvDownloadService, extService, router);\n        this.getConfigTypes();\n    }\n\n    initTableColumns(): any {\n\n        const typeRenderer = (row) => {\n            return row?.data?.configType?.name;\n        };\n\n        const createdAtHeaderComponentParams = {\n            filterType: 'DATETIME',\n        };\n        return [\n            {\n                colId: 'name',\n                field: 'name',\n                headerName: 'Name',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: this.headerComponentParams,\n                cellRenderer: TableCellNameComponent,\n                cellRendererParams: { pathRoot: this.basePath },\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.openEditForm(data?.data?.id);\n                },\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: true,\n                filter: true,\n                sortColumn: this.sort.bind(this)\n            },\n            {\n                colId: 'type',\n                field: 'type',\n                headerName: 'Type',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: this.typeHeaderComponentParams,\n                cellRenderer: typeRenderer,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: true,\n                filter: true,\n                sortColumn: this.sort.bind(this),\n            },\n            {\n                colId: 'createdAt',\n                field: 'createdAt',\n                headerName: 'Created At',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: createdAtHeaderComponentParams,\n                valueFormatter: this.createdAtFormatter,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n            },\n            this.ID_COLUMN_DEF\n        ];\n    }\n\n    _typeHeaderComponentParams = {\n        filterType: 'SELECT',\n        enableSorting: true,\n        filterOptions: [\n            { label: 'ALL', value: '' },\n        ],\n        getFilterOptions: () => {\n            return this.typeHeaderComponentParams.filterOptions;\n        }\n    };\n\n    get typeHeaderComponentParams() {\n        return this._typeHeaderComponentParams;\n    }\n\n    set typeHeaderComponentParams(params) {\n        this._typeHeaderComponentParams = params;\n    }\n\n    getConfigTypes() {\n        const sort = {\n            ordering: 'asc',\n            sortBy: 'name'\n        };\n        return super.getTableData('config-types', this.DEFAULT_PAGING, [], sort)\n            .then((results: any) => {\n                this.typeHeaderComponentParams.filterOptions = [{ label: 'ALL', value: '' }];\n                results.data.forEach((configType: any) => {\n                    this.typeHeaderComponentParams.filterOptions.push({\n                        label: configType.name,\n                        value: configType.id\n                    });\n                });\n                return this.typeHeaderComponentParams;\n            });\n    }\n\n    getData(filters?: FilterObj[], sort?: any) {\n        // we can customize filters or sorting here before moving on...\n        return super.getTableData('configs', this.paging, filters, sort)\n            .then((results: any) => {\n                return this.processData(results);\n            });\n    }\n\n    validate = (formData:any, schema: any): Promise<CallbackResults> => {\n        let errors = {};\n        if(schema) {\n            for (var key in schema.properties) {\n                var property = schema.properties[key];\n                errors = {...errors, ...this.validateProperty(key, property, formData, schema)};\n            }\n            return Promise.resolve({passed: _.isEmpty(errors), errors});\n        } else {\n            throw new Error('no schema definition selected');\n        }\n    }\n\n    validateProperty(key, property, formData, schema, parentKey?): any {\n        let errors = {}\n        var type = this.schemaSvc.getType(property);\n        if (type == \"object\") {\n            for (var subKey in property.properties) {\n                errors = {...errors, ...this.validateProperty(subKey, property.properties[subKey], formData, schema, key)};\n            }\n        } else {\n            var theValue: string = _.get(formData, key)\n            if (type == \"integer\") {\n                if (schema.required && schema.required.includes(key)) {\n                    var min = null;\n                    var max = null;\n                    if (property.minimum) min = Number(property.minimum);\n                    if (property.maximum) max = Number(property.maximum);\n                    if (isNaN(parseInt(theValue))) {\n                         errors[key] = 'invalid number';\n                    }\n                    else {\n                        var val = Number(theValue);\n                        if (min != null && val < min) {\n                            errors[key] = `minimum value ${min} expected`;\n                        }\n                        if (max != null && val > max) {\n                            errors[key] = `maximum value ${max} expected`;\n                        }\n                    }\n                }\n            } else if (type == \"array\") {\n                // if (schema.required && schema.required.includes(key)) {\n                //     if ($(\"#\" + ((parentKey != null) ? parentKey + '_' : '') + \"schema_\" + key).hasClass(\"checkboxList\")) {\n                //         var obj = $(\"#\" + ((parentKey != null) ? parentKey + '_' : '') + \"schema_\" + key);\n                //         var total = obj.data(\"total\");\n                //         var hasSelection = false;\n                //         for (var i = 0; i < total; i++) {\n                //             var item = $(\"#\" + ((parentKey != null) ? parentKey + '_' : '') + \"schema_\" + key + \"_\" + i);\n                //             if (item.hasClass(\"checked\")) {\n                //                 hasSelection = true;\n                //                 break;\n                //             }\n                //         }\n                //         if (!hasSelection) $(\"#\" + ((parentKey != null) ? parentKey + '_' : '') + \"schema_\" + key).addClass(\"errors\");\n                //     } else {\n                //         if ($(\"#\" + ((parentKey != null) ? parentKey + '_' : '') + \"schema_\" + key + \"_selected\").children().length == 0) elem.addClass(\"errors\");\n                //     }\n                // }\n            } else {\n                if (schema.required && schema.required.includes(key) && theValue.length == 0) {\n                    errors[key] = `${key} required`;\n                }\n            }\n        }\n        return errors;\n    }\n\n    private processData(results: any) {\n        if (!isEmpty(results?.data)) {\n            //pre-process data before rendering\n            results.data = this.addActionsPerRow(results);\n        }\n        return results;\n    }\n\n    private addActionsPerRow(results: any): any[] {\n        return results.data.map((row) => {\n            row.actionList = ['update', 'delete'];\n            return row;\n        });\n    }\n\n    public openUpdate(item?: any) {\n        this.modalType = 'config';\n        if (item) {\n            this.selectedConfig = item;\n            this.selectedConfig.badges = [];\n            unset(this.selectedConfig, '_links');\n        } else {\n            this.selectedConfig = new Service();\n        }\n        this.sideModalOpen = true;\n    }\n}\n","export const URLS = {\n  ZITI_ATTRIBUTES: '/attributes',\n  ZITI_DASHBOARD: '/dashboard',\n  ZITI_IDENTITIES: '/identities',\n  ZITI_JWT_SIGNERS: '/jwt-signers',\n  ZITI_SERVICES: '/services',\n  ZITI_SERVICE_SELECT: '/services/select',\n  ZITI_SIMPLE_SERVICE: 'services/simple',\n  ZITI_ADVANCED_SERVICE: 'services/advanced',\n  ZITI_ROUTERS: '/routers',\n  ZITI_TRANSIT_ROUTERS: '/transit-routers',\n  ZITI_CONFIGS: '/configs',\n  ZITI_CONFIG_TYPES: '/config-types',\n  ZITI_RECIPES: '/recipes',\n  ZITI_TERMINATORS: '/terminators',\n  ZITI_AUTH_POLICIES: '/auth-policies',\n  ZITI_SERVICE_POLICIES: '/service-policies',\n  ZITI_ROUTER_POLICIES: '/router-policies',\n  ZITI_SERVICE_ROUTER_POLICIES: '/service-router-policies',\n  ZITI_POSTURE_CHECKS: '/posture-checks',\n  ZITI_BROWZER_CAS: '/browzer-cert-auth',\n  ZITI_CERT_AUTHORITIES: '/certificate-authorities',\n  ZITI_SESSIONS: '/sessions',\n  ZITI_API_SESSIONS: '/api-sessions',\n  ZITI_LOGIN: '/login',\n  ZITI_ORGANIZATION: '/organization',\n  ZITI_PROFILE: '/profile',\n  ZITI_SERVERS: '/servers',\n  ZITI_SETTINGS: '/settings',\n  ZITI_CUSTOM_FIELDS: '/custom-fields',\n  ZAC_LOGIN: '/login',\n  NETWORK_VISUALIZER: '/network-visualizer',\n};\n","import {Inject, Injectable, InjectionToken} from '@angular/core';\nimport {SettingsServiceClass} from \"./settings-service.class\";\nimport {SETTINGS_SERVICE} from \"./settings.service\";\nimport {URLS} from \"../urls\";\n\nexport const ZITI_TAB_OVERRIDES = new InjectionToken<string>('ZITI_TAB_OVERRIDES');\n\nexport interface TabInterceptorService {\n    override(key: string, tabs: any[]): any[];\n}\n\nexport class NoopTabInterceptorService implements TabInterceptorService {\n    override(key: string, tabs: any[]): any[] {\n        return tabs;\n    }\n}\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class TabNameService {\n\n    pageToTabsMap = new Map<string, any[]>(\n        [\n            [\"identities\", [\n                {label: 'Identities', url: '/identities'},\n                {label: 'Recipes', url: '/recipes', hidden: !this.settings.supportedFeatures?.recipies}\n            ]\n            ],\n            [\"services\", [\n                {label: 'Services', url: '/services'},\n                {label: 'Configurations', url: '/configs'},\n                {label: 'Config Types', url: '/config-types'},\n                {label: 'Terminators', url: '/terminators'},\n            ]\n            ],\n            [\"routers\", [\n                {label: 'Routers', url: '/routers'},\n                {label: 'Transit Routers', url: '/transit-routers'},\n            ],\n            ],\n            [\"policies\", [\n                {label: 'Service Policies', url: '/service-policies'},\n                {label: 'Router Policies', url: '/router-policies'},\n                {label: 'Service Router Policies', url: '/service-router-policies'},\n                {label: 'Posture Checks', url: URLS.ZITI_POSTURE_CHECKS},\n            ]\n            ],\n            [\"authentication\", [\n                {label: 'Certificate Authorities', url: '/certificate-authorities'},\n                {label: 'Auth Policies', url: '/auth-policies'},\n                {label: 'JWT Signers', url: '/jwt-signers'},\n            ]\n            ],\n            [\"sessions\", [\n                {label: 'Sessions', url: '/sessions'},\n                {label: 'API Sessions', url: '/api-sessions'},\n            ]\n            ]\n        ]\n    );\n\n    constructor(\n        @Inject(ZITI_TAB_OVERRIDES) private interceptor: TabInterceptorService,\n        @Inject(SETTINGS_SERVICE) private settings: SettingsServiceClass\n    ) {\n    }\n\n    getTabs(key: string) {\n        const val =  this.pageToTabsMap.get(key);\n        return this.interceptor.override(key, val)\n    }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, EventEmitter, Input, Output} from '@angular/core';\n\n@Component({\n    selector: 'lib-list-page-header',\n    templateUrl: './list-page-header.component.html',\n    styleUrls: ['./list-page-header.component.scss'],\n    standalone: false\n})\nexport class ListPageHeaderComponent {\n    @Input() title: string = '';\n    @Input() tabs!: any[];\n    @Input() showAdd = true;\n    @Input() hideAction = false;\n    /** When true, hide the create (+) control even if showAdd is true. */\n    @Input() blockCreate = false;\n    /** When true, hide the bulk delete (-) control when rows are selected. */\n    @Input() blockDelete = false;\n    @Output() actionClicked = new EventEmitter<string>();\n\n    clickAction(value: string) {\n        this.actionClicked.emit(value);\n    }\n\n    tabSelected(tab) {\n        const parsedUrl = new URL(window.location.href);\n        let path = parsedUrl.pathname;\n        if (document.baseURI) {\n            const base = new URL(document.baseURI).pathname;\n            if (path.startsWith(base)) {\n                path = path.slice(base.length);\n            }\n        }\n        let tabUrl = tab.url;\n        if (tab.url.startsWith('/')) {\n            tabUrl = tab.url.slice(1);\n        }\n        if (path.startsWith('/')) {\n            path = path.slice(1);\n        }\n        // Return the path without parameters\n        return tabUrl === path;\n    }\n}\n","<div class=\"header\">\n  <div class=\"title\">\n    <span>{{title}}</span>\n  </div>\n  <div class=\"bread\"></div>\n  <div class=\"line\"></div>\n  <div class=\"tabs\">\n    @for (tab of tabs; track tab) {\n      <div class=\"tab\" [ngClass]=\"{selected: tabSelected(tab)}\" [routerLink]=\"tab.url\" [hidden]=\"tab.hidden\">{{tab.label}}</div>\n    }\n  </div>\n  @if (showAdd && !blockCreate) {\n    <div [ngClass]=\"{hideAction: hideAction}\" (click)=\"clickAction('add')\"\n    class=\"action icon-plus icon-add\" data-action=\"add\"></div>\n  }\n  @if (!showAdd && !blockDelete) {\n    <div [ngClass]=\"{hideAction: hideAction}\" (click)=\"clickAction('delete')\"\n    class=\"action icon-minus icon-delete\" data-action=\"delete\"></div>\n  }\n</div>\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\n\nexport type ZitiDateRangeQuickOption = {\n    id: string;\n    label: string;\n};\n\n@Injectable()\nexport class DateRangeQuickHeaderService {\n    readonly rangeClick$ = new Subject<string>();\n    readonly selectedRange$ = new BehaviorSubject<string>('');\n    readonly options$ = new BehaviorSubject<ZitiDateRangeQuickOption[]>([\n        { id: 'hour', label: 'Last Hour' },\n        { id: 'day', label: 'Last Day' },\n        { id: 'week', label: 'Last Week' },\n        { id: 'month', label: 'Last Month' },\n    ]);\n\n    clickRange(id: string) {\n        this.rangeClick$.next(id);\n    }\n\n    setSelectedRange(id: string) {\n        this.selectedRange$.next(id);\n    }\n\n    setOptions(options: ZitiDateRangeQuickOption[]) {\n        this.options$.next(options);\n    }\n}\n\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy } from '@angular/core';\nimport { DateAdapter } from '@angular/material/core';\nimport { MatCalendar } from '@angular/material/datepicker';\nimport { Subscription } from 'rxjs';\nimport { DateRangeQuickHeaderService, ZitiDateRangeQuickOption } from './date-range-quick-header.service';\n\n@Component({\n    selector: 'lib-date-range-quick-header',\n    templateUrl: './date-range-quick-header.component.html',\n    styleUrls: ['./date-range-quick-header.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class DateRangeQuickHeaderComponent implements OnDestroy {\n    selectedRange = '';\n    options: ZitiDateRangeQuickOption[] = [];\n    private sub = new Subscription();\n\n    constructor(\n        private calendar: MatCalendar<Date>,\n        private dateAdapter: DateAdapter<Date>,\n        private cdr: ChangeDetectorRef,\n        private headerService: DateRangeQuickHeaderService\n    ) {\n        this.sub.add(\n            this.headerService.selectedRange$.subscribe((range) => {\n                this.selectedRange = range;\n                this.cdr.markForCheck();\n            })\n        );\n        this.sub.add(\n            this.headerService.options$.subscribe((options) => {\n                this.options = options;\n                this.cdr.markForCheck();\n            })\n        );\n        this.sub.add(\n            this.calendar.stateChanges.subscribe(() => {\n                this.cdr.markForCheck();\n            })\n        );\n    }\n\n    get periodLabel(): string {\n        return this.calendar.activeDate.toLocaleString(undefined, { month: 'long', year: 'numeric' });\n    }\n\n    previousClicked(): void {\n        this.calendar.activeDate = this.dateAdapter.addCalendarMonths(this.calendar.activeDate, -1);\n    }\n\n    nextClicked(): void {\n        this.calendar.activeDate = this.dateAdapter.addCalendarMonths(this.calendar.activeDate, 1);\n    }\n\n    quickRange(id: string) {\n        this.headerService.clickRange(id);\n    }\n\n    ngOnDestroy() {\n        this.sub.unsubscribe();\n    }\n}\n\n","<div class=\"ziti-calendar-header\">\n  <div class=\"filter-button-container\">\n    @for (opt of options; track opt) {\n      <div\n        class=\"toggleButton\"\n        [ngClass]=\"{ selected: selectedRange === opt.id }\"\n        (click)=\"quickRange(opt.id)\"\n        >\n        {{ opt.label }}\n      </div>\n    }\n  </div>\n\n  <div class=\"month-row\">\n    <button mat-icon-button type=\"button\" (click)=\"previousClicked()\" aria-label=\"Previous month\">\n      <i class=\"pi pi-chevron-left\" aria-hidden=\"true\"></i>\n    </button>\n    <div class=\"month-label\">{{ periodLabel }}</div>\n    <button mat-icon-button type=\"button\" (click)=\"nextClicked()\" aria-label=\"Next month\">\n      <i class=\"pi pi-chevron-right\" aria-hidden=\"true\"></i>\n    </button>\n  </div>\n</div>\n\n","import {Component, ElementRef, ViewChild} from '@angular/core';\nimport {IHeaderAngularComp} from 'ag-grid-angular';\nimport {IHeaderParams} from 'ag-grid-community';\n\n@Component({\n    selector: 'app-table-column-select',\n    templateUrl: './table-column-select.component.html',\n    styleUrls: ['./table-column-select.component.scss'],\n    standalone: false\n})\nexport class TableColumnSelectComponent implements IHeaderAngularComp {\n  headerParams: any;\n  gridApi: any = {\n    zitiAllToggled: undefined,\n  };\n\n  @ViewChild('toggleButton') toggleButton: ElementRef;\n\n  agInit(headerParams: IHeaderParams): void {\n    this.headerParams = headerParams;\n    this.gridApi = headerParams.api;\n  }\n\n  refresh(params: IHeaderParams): boolean {\n    return true;\n  }\n\n  toggleAll(): void {\n    this.gridApi.zitiAllToggled = !this.gridApi.zitiAllToggled;\n    if (this.headerParams.toggleAll) {\n      this.headerParams.toggleAll(this.gridApi.zitiAllToggled, this.headerParams);\n    }\n  }\n}\n","<div\n  #toggleButton\n  (click)=\"toggleAll()\"\n  [ngClass]=\"{ selected: gridApi.zitiAllToggled }\"\n  class=\"tSelect tSelectHeader\"\n  id=\"RowSelect_Header\"\n></div>\n","import {Component} from '@angular/core';\nimport {IHeaderAngularComp} from 'ag-grid-angular';\nimport {IHeaderParams} from 'ag-grid-community';\nimport _ from 'lodash';\n\n@Component({\n    selector: 'app-table-column-menu',\n    templateUrl: './table-column-menu.component.html',\n    styleUrls: ['./table-column-menu.component.scss'],\n    standalone: false\n})\nexport class TableColumnMenuComponent implements IHeaderAngularComp {\n  item = {\n    selected: false,\n    id: '',\n    actionList: [],\n  };\n  headerParams;\n  open = false;\n\n  agInit(headerParams: IHeaderParams): void {\n    this.headerParams = headerParams;\n    this.item = _.get(headerParams, 'data');\n  }\n\n  refresh(headerParams: IHeaderParams): boolean {\n    this.headerParams = headerParams;\n    return true;\n  }\n\n  toggleMenu(event): void {\n    _.defer(() => {\n      this.headerParams.openHeaderMenu(event);\n    });\n  }\n\n  closeActionMenu(event): void {\n    this.headerParams.closeMenu(event);\n  }\n}\n","<div (clickOutside)=\"closeActionMenu($event)\" class=\"cell-menu-container\">\n  <div (click)=\"toggleMenu($event)\" class=\"dots\" id=\"Dots_Bulk\">\n    <div (click)=\"toggleMenu($event)\" class=\"dots\" id=\"HeaderRowDots\">...</div>\n  </div>\n</div>","import {Component} from '@angular/core';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\nimport {ICellRendererParams} from 'ag-grid-community';\nimport _ from 'lodash';\n\n@Component({\n    selector: 'app-table-cell-select',\n    templateUrl: './table-cell-select.component.html',\n    styleUrls: ['./table-cell-select.component.scss'],\n    standalone: false\n})\nexport class TableCellSelectComponent implements ICellRendererAngularComp {\n  cellParams;\n  item: any = {\n    id: '',\n    name: '',\n    selected: false,\n    hideSelect: false,\n  };\n  disableToggle = false;\n\n  agInit(params: ICellRendererParams): void {\n    this.cellParams = params;\n    this.item = params.data;\n    this.disableToggle =\n      _.get(this.item, 'typeId') === 'Router' ||\n      _.get(this.item, 'exclusiveTo') ||\n      _.get(this.item, 'reserved') === true ||\n      _.get(this.item, 'isSystem') === true;\n  }\n\n  refresh(params: ICellRendererParams): boolean {\n    this.cellParams = params;\n    this.item = params.data;\n    this.disableToggle =\n      _.get(this.item, 'typeId') === 'Router' ||\n      _.get(this.item, 'exclusiveTo') ||\n      _.get(this.item, 'reserved') === true ||\n      _.get(this.item, 'isSystem') === true;\n    return true;\n  }\n\n  toggle(item): void {\n    if (!this.cellParams.toggleItem || this.disableToggle) {\n      return;\n    }\n    this.cellParams.toggleItem(item, this.cellParams);\n  }\n\n  get tooltip() {\n    let tooltip = '';\n    if (this.item?.isSystem) {\n      tooltip = 'Deleting \"system\" entities is not allowed';\n    } else if (this.item?.typeId === 'Router') {\n      tooltip = 'Unable to delete \"Router\" Identities. Please delete the associated Router instead.';\n    }\n    return tooltip;\n  }\n}\n","@if (!item.hideSelect) {\n  <div\n    #toggleButton\n    (click)=\"toggle(item)\"\n    [ngClass]=\"{ selected: item.selected, disabled: disableToggle }\"\n    attr.name=\"RowSelect0_{{ item.name }}\"\n    class=\"row-toggle tSelect\"\n    id=\"RowSelect0_{{ item.id }}\"\n    attr.data-id=\"{{item.id}}\"\n    [matTooltip]=\"tooltip\"\n  ></div>\n}\n","import {Component} from '@angular/core';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\nimport {ICellRendererParams} from 'ag-grid-community';\nimport _ from 'lodash';\n\n@Component({\n    selector: 'app-table-cell-menu',\n    templateUrl: './table-cell-menu.component.html',\n    styleUrls: ['./table-cell-menu.component.scss'],\n    standalone: false\n})\nexport class TableCellMenuComponent implements ICellRendererAngularComp {\n  item: any = {\n    selected: false,\n    id: '',\n    name: '',\n    actionList: [],\n  };\n  cellParams;\n  open = false;\n\n  get enableCellMenu(): boolean {\n    return !(!this.item || !this.item.actionList || this.item.actionList.length === 0);\n\n  }\n\n  agInit(cellParams: ICellRendererParams): void {\n    this.cellParams = cellParams;\n    this.item = _.get(cellParams, 'data');\n  }\n\n  refresh(cellParams: ICellRendererParams): boolean {\n    this.cellParams = cellParams;\n    this.item = _.get(cellParams, 'data');\n    return true;\n  }\n\n  toggleMenu(event): void {\n    if (!this.cellParams.openMenu) {\n      return;\n    }\n    _.defer(() => {\n      this.cellParams.openMenu(event, this.item);\n    });\n  }\n\n  closeActionMenu(event): void {\n    this.cellParams.closeMenu(event);\n  }\n}\n","<div (clickOutside)=\"closeActionMenu($event)\" class=\"cell-menu-container\">\n  @if (enableCellMenu) {\n    <div\n      (click)=\"toggleMenu($event)\"\n      attr.name=\"RowDots_{{ item.name }}\"\n      class=\"dots\"\n      id=\"RowDots_{{ item.id }}\"\n      >\n      ...\n    </div>\n  }\n</div>\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nexport class Identity {\n    name = '';\n    type = 'Device';\n    appData = {};\n    isAdmin = false;\n    roleAttributes = [];\n    authPolicyId = \"default\";\n    externalId = \"\";\n    defaultHostingCost = 0;\n    defaultHostingPrecedence = 'default';\n    tags = {};\n    enrollment = {\n        ott: true\n    };\n};\n","import {Component} from \"@angular/core\";\nimport {ITooltipAngularComp} from \"ag-grid-angular\";\nimport {ITooltipParams} from \"ag-grid-community\";\n\n@Component({\n    selector: 'lib-os-tooltip',\n    template: `\n      <div class=\"os-tooltip\" [style.background-color]=\"color\">\n          <p><span>OS:</span> <strong>{{ infoObj?.os || 'Unknown' }}</strong></p>\n          <p><span>Release: </span><strong>{{ infoObj?.osRelease || 'Unknown' }}</strong></p>\n          <p><span>Arch: </span><strong>{{ infoObj?.arch || 'Unknown' }}</strong></p>\n      </div>`,\n    styles: [\n        `\n            .os-tooltip {\n                padding: 5px;\n                background-color: var(--background);\n                border-color: var(--primary);\n                border-size: 1px;\n                border-style: solid;\n            }\n\n            :host {\n                position: absolute;\n                width: 150px;\n                height: 70px;\n                pointer-events: none;\n                transition: opacity 1s;\n            }\n\n            :host.ag-tooltip-hiding {\n                opacity: 0;\n            }\n\n            .os-tooltip p {\n                margin: 5px;\n                white-space: nowrap;\n            }\n        `\n    ],\n    standalone: false\n})\nexport class OSTooltipComponent implements ITooltipAngularComp {\n    private params!: {color: string} & ITooltipParams;\n    public data!: any;\n    public infoObj: any = {};\n    public color!: string;\n\n    agInit(params: {color: string} & ITooltipParams): void {\n        this.params = params;\n\n        this.data = params.api.getDisplayedRowAtIndex(params.rowIndex).data;\n        this.infoObj = this.data.envInfo || this.data.versionInfo || {};\n    }\n}","import {Component} from \"@angular/core\";\nimport {ITooltipAngularComp} from \"ag-grid-angular\";\nimport {ITooltipParams} from \"ag-grid-community\";\nimport {isEmpty} from \"lodash\";\n\n@Component({\n    selector: 'lib-sdk-tooltip',\n    template: `\n      <div class=\"os-tooltip\" [style.background-color]=\"color\" [ngClass]=\"{hidden: hasData}\">\n          <p><span>APP ID: </span> <strong>{{ data.sdkInfo?.appId }}</strong></p>\n          <p><span>Version: </span><strong>{{ data.sdkInfo?.appVersion }}</strong></p>\n          <p><span>Branch: </span><strong>{{ data.sdkInfo?.branch }}</strong></p>\n          <p><span>Revision: </span><strong>{{ data.sdkInfo?.revision }}</strong></p>\n          <p><span>Type: </span><strong>{{ data.sdkInfo?.type }}</strong></p>\n      </div>`,\n    styles: [\n        `\n            .os-tooltip {\n                padding: 5px;\n                background-color: var(--background);\n                border-color: var(--primary);\n                border-size: 1px;\n                border-style: solid;\n            }\n\n            :host {\n                position: absolute;\n                width: fit-content;\n                height: 70px;\n                pointer-events: none;\n                transition: opacity 1s;\n            }\n\n            :host.ag-tooltip-hiding {\n                opacity: 0;\n            }\n\n            .os-tooltip p {\n                margin: 5px;\n                white-space: nowrap;\n            }\n        `\n    ],\n    standalone: false\n})\nexport class SDKTooltipComponent implements ITooltipAngularComp {\n    private params!: {color: string} & ITooltipParams;\n    public data!: any;\n    public color!: string;\n\n    agInit(params: {color: string} & ITooltipParams): void {\n        this.params = params;\n\n        this.data = params.api.getDisplayedRowAtIndex(params.rowIndex).data;\n    }\n\n    get hasData() {\n        return isEmpty(this.data?.sdkInfo?.version);\n    }\n}","import {Inject, Injectable} from \"@angular/core\";\nimport {isEmpty} from \"lodash\";\nimport moment from \"moment/moment\";\nimport {GrowlerModel} from \"../messaging/growler.model\";\nimport {GrowlerService} from \"../messaging/growler.service\";\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../services/ziti-data.service\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class ResetEnrollmentService {\n\n    constructor(\n        private growlerService: GrowlerService,\n        @Inject(ZITI_DATA_SERVICE) private dataService: ZitiDataService,\n    ) {\n    }\n\n    resetEnrollment(identity, dateVal) {\n        let id = identity?.authenticators?.cert?.id || identity?.authenticators?.updb?.id;\n        const dateObj: any = moment(dateVal);\n        return this.dataService.resetEnrollment(id, dateObj).then(() => {\n            const growlerData = new GrowlerModel(\n                'success',\n                'Success',\n                `Enrollment Reset`,\n                `Successfully reset enrollment token`,\n            );\n            this.growlerService.show(growlerData);\n            return true;\n        }).catch((error) => {\n            const growlerData = new GrowlerModel(\n                'error',\n                'Error',\n                `Reset Failed`,\n                `Failed to reset enrollment token`,\n            );\n            this.growlerService.show(growlerData);\n            return false;\n        });\n    }\n\n    reissueEnrollment(identity, dateVal) {\n        let id = identity?.enrollment?.id;\n        if(!isEmpty(identity?.enrollment?.ott)) {\n            id = identity?.enrollment?.ott.id;\n        } else if(!isEmpty(identity?.enrollment?.ottca)) {\n            id = identity?.enrollment?.ottca.id;\n        } else if (!isEmpty(identity?.enrollment?.updb)) {\n            id = identity?.enrollment?.updb.id;\n        }\n        const dateObj: any = moment(dateVal);\n        return this.dataService.reissueEnrollment(id, dateObj).then(() => {\n            const growlerData = new GrowlerModel(\n                'success',\n                'Success',\n                `Enrollment Token Reissues`,\n                `Successfully reissued enrollment token`,\n            );\n            this.growlerService.show(growlerData);\n            return true;\n        }).catch((error) => {\n            const growlerData = new GrowlerModel(\n                'error',\n                'Error',\n                `Reissue Failed`,\n                `Failed to reissues enrollment token`,\n            );\n            this.growlerService.show(growlerData);\n            return false;\n        });\n    }\n}","import { Component, Input, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport moment from 'moment';\nimport { CommonModule } from '@angular/common';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\n\n@Component({\n  selector: 'lib-date-time-picker',\n  templateUrl: './date-time-picker.component.html',\n  styleUrls: ['./date-time-picker.component.scss'],\n  imports: [CommonModule, OverlayModule, MatDatepickerModule],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => DateTimePickerComponent),\n      multi: true,\n    },\n  ],\n  standalone: true,\n})\nexport class DateTimePickerComponent implements ControlValueAccessor {\n  @Input() minDate: Date | null = null;\n  @Input() placeholder = 'MM/DD/YYYY HH:mm';\n  @Input() displayFormat = 'MM/DD/YYYY HH:mm';\n  @Input() ariaLabel = 'Open date & time picker';\n  @Input() closeOnDateSelect = true;\n  /** CSS length, e.g. \"22rem\" or \"420px\" */\n  @Input() panelWidth = '22rem';\n\n  open = false;\n  disabled = false;\n\n  value: Date = new Date();\n  hour = this.value.getHours();\n  minute = this.value.getMinutes();\n\n  private onChange: (value: Date | null) => void = () => {};\n  private onTouched: () => void = () => {};\n\n  get displayValue() {\n    return this.value ? moment(this.value).local().format(this.displayFormat) : '';\n  }\n\n  writeValue(value: Date | null): void {\n    this.value = value ? new Date(value) : new Date();\n    this.syncTimeFromDate();\n  }\n\n  registerOnChange(fn: (value: Date | null) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n    if (this.disabled) {\n      this.open = false;\n    }\n  }\n\n  toggle() {\n    if (this.disabled) {\n      return;\n    }\n    this.open = !this.open;\n    if (this.open) {\n      this.syncTimeFromDate();\n    } else {\n      this.onTouched();\n    }\n  }\n\n  close() {\n    this.open = false;\n    this.onTouched();\n  }\n\n  onDateSelected(newDate: Date | null) {\n    if (!newDate) {\n      return;\n    }\n    const d = new Date(newDate);\n    const current = this.value ? new Date(this.value) : new Date();\n    d.setHours(this.hour, this.minute, current.getSeconds() + 5, current.getMilliseconds());\n    this.value = d;\n    this.onChange(this.value);\n    if (this.closeOnDateSelect) {\n      this.close();\n    }\n  }\n\n  adjustHour(delta: number) {\n    this.hour = (this.hour + delta + 24) % 24;\n    this.applyTimeToDate();\n  }\n\n  adjustMinute(delta: number) {\n    this.minute = (this.minute + delta + 60) % 60;\n    this.applyTimeToDate();\n  }\n\n  twoDigit(n: number) {\n    return String(Number.isFinite(n) ? n : 0).padStart(2, '0');\n  }\n\n  private syncTimeFromDate() {\n    const d = this.value ? new Date(this.value) : new Date();\n    this.hour = d.getHours();\n    this.minute = d.getMinutes();\n  }\n\n  private applyTimeToDate() {\n    const d = this.value ? new Date(this.value) : new Date();\n    d.setHours(this.hour, this.minute, d.getSeconds() + 5, d.getMilliseconds());\n    this.value = d;\n    this.onChange(this.value);\n  }\n}\n\n","<div\n  class=\"dtp-field\"\n  cdkOverlayOrigin\n  #origin=\"cdkOverlayOrigin\"\n>\n  <input\n    class=\"form-field-input dtp-input\"\n    [value]=\"displayValue\"\n    [placeholder]=\"placeholder\"\n    [disabled]=\"disabled\"\n    readonly\n    (click)=\"toggle()\"\n  />\n  <button\n    type=\"button\"\n    class=\"dtp-button\"\n    [disabled]=\"disabled\"\n    (click)=\"toggle()\"\n    [attr.aria-label]=\"ariaLabel\"\n  >\n    <i class=\"pi pi-calendar\" aria-hidden=\"true\"></i>\n  </button>\n</div>\n\n<ng-template\n  cdkConnectedOverlay\n  [cdkConnectedOverlayOrigin]=\"origin\"\n  [cdkConnectedOverlayOpen]=\"open\"\n  [cdkConnectedOverlayHasBackdrop]=\"true\"\n  [cdkConnectedOverlayBackdropClass]=\"'cdk-overlay-transparent-backdrop'\"\n  (backdropClick)=\"close()\"\n>\n  <div\n    class=\"dtp-overlay\"\n    [style.--dtp-panel-width]=\"panelWidth\"\n    (keydown.escape)=\"$event.stopPropagation(); close()\"\n  >\n    <mat-calendar\n      [selected]=\"value\"\n      [minDate]=\"minDate\"\n      (selectedChange)=\"onDateSelected($event)\"\n    ></mat-calendar>\n\n    <div class=\"dtp-time\">\n      <div class=\"dtp-time-col\">\n        <button type=\"button\" class=\"dtp-time-btn\" (click)=\"adjustHour(1)\" aria-label=\"Increase hour\">\n          <i class=\"pi pi-chevron-up\" aria-hidden=\"true\"></i>\n        </button>\n        <div class=\"dtp-time-value\">{{ twoDigit(hour) }}</div>\n        <button type=\"button\" class=\"dtp-time-btn\" (click)=\"adjustHour(-1)\" aria-label=\"Decrease hour\">\n          <i class=\"pi pi-chevron-down\" aria-hidden=\"true\"></i>\n        </button>\n      </div>\n      <div class=\"dtp-time-sep\">:</div>\n      <div class=\"dtp-time-col\">\n        <button type=\"button\" class=\"dtp-time-btn\" (click)=\"adjustMinute(1)\" aria-label=\"Increase minute\">\n          <i class=\"pi pi-chevron-up\" aria-hidden=\"true\"></i>\n        </button>\n        <div class=\"dtp-time-value\">{{ twoDigit(minute) }}</div>\n        <button type=\"button\" class=\"dtp-time-btn\" (click)=\"adjustMinute(-1)\" aria-label=\"Decrease minute\">\n          <i class=\"pi pi-chevron-down\" aria-hidden=\"true\"></i>\n        </button>\n      </div>\n    </div>\n  </div>\n</ng-template>\n\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, Inject, ViewChild, OnInit} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef} from \"@angular/material/dialog\";\nimport {GrowlerModel} from \"../messaging/growler.model\";\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../services/ziti-data.service\";\nimport {GrowlerService} from \"../messaging/growler.service\";\nimport {isEmpty, result} from \"lodash\";\nimport moment from \"moment\";\nimport {ResetEnrollmentService} from \"./reset-enrollment.service\";\n\n@Component({\n    selector: 'lib-reset-enrollment',\n    templateUrl: './reset-enrollment.component.html',\n    styleUrls: ['./reset-enrollment.component.scss'],\n    standalone: false\n})\nexport class ResetEnrollmentComponent implements OnInit {\n\n  minDate = moment().add(1, 'minutes').toDate();\n  type = 'reset';\n  identity: any;\n  dateValue = moment().add(2, 'days').toDate();\n  isSubmitting = false;\n  constructor(\n      private svc: ResetEnrollmentService,\n      private dialogRef: MatDialogRef<ResetEnrollmentComponent>,\n      @Inject(MAT_DIALOG_DATA) public data: any,\n      @Inject(ZITI_DATA_SERVICE) private dataService: ZitiDataService\n  ) {\n    this.identity = data.identity;\n    this.type = data.type || 'reset';\n  }\n\n  ngOnInit() {\n    this.dialogRef.addPanelClass('reset-enroll-dialog-container');\n  }\n\n  confirm() {\n    this.dialogRef.close(true);\n  }\n\n  cancel() {\n    this.dialogRef.close(false);\n  }\n\n  handleAction() {\n    if (this.type === 'reset'){\n      this.reset();\n    } else {\n      this.reissue();\n    }\n  }\n\n  reset() {\n      if (this.isSubmitting) return;\n      this.isSubmitting = true;\n      this.svc.resetEnrollment(this.identity, this.dateValue).then((result) => {\n          if (result) {\n              this.confirm();\n          }\n      }).finally(() => {\n          this.isSubmitting = false;\n      });\n  }\n\n  reissue() {\n      if (this.isSubmitting) return;\n      this.isSubmitting = true;\n      this.svc.reissueEnrollment(this.identity, this.dateValue).then((result) => {\n          if (result) {\n              this.confirm();\n          }\n      }).finally(() => {\n          this.isSubmitting = false;\n      });\n  }\n  // Date/time selection is handled by reusable <lib-date-time-picker>.\n}\n","<div id=\"ResetModal\" class=\"reset-enrollment-container modal\" style=\"height: fit-content;\">\n    <div class=\"close icon-close\" (click)=\"cancel()\"></div>\n    <div class=\"reset-title-container\">\n        <div class=\"title\">{{type === 'reset' ? 'Reset' : 'Reissue'}} Enrollment</div>\n        <div class=\"subtitle\">Select a date to {{type === 'reset' ? 'reset' : 'reissue'}} the enrollment token</div>\n    </div>\n    <div class=\"reset-content-container\">\n        <label>Date Enrollment Expires</label>\n        <div class=\"reset-datetime-container\">\n            <lib-date-time-picker\n                [(ngModel)]=\"dateValue\"\n                [minDate]=\"minDate\"\n                [closeOnDateSelect]=\"true\"\n                placeholder=\"Select Expiration Date & Time\"\n            ></lib-date-time-picker>\n        </div>\n    </div>\n    <div class=\"reset-buttons-container\">\n        <div class=\"linkButton cancel\" [class.disabled]=\"isSubmitting\" (click)=\"!isSubmitting && cancel()\">Oops, no get me out of here</div>\n        <div id=\"ResetEnrollButton\" class=\"button\" [class.disabled]=\"isSubmitting\" (click)=\"handleAction()\">\n            {{ isSubmitting ? 'Submitting...' : 'Submit' }}\n        </div>\n    </div>\n</div>\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Injectable, Inject, InjectionToken} from \"@angular/core\";\nimport moment from 'moment';\n\nimport {isEmpty, unset, keys} from 'lodash';\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../services/ziti-data.service\";\nimport {GrowlerService} from \"../../messaging/growler.service\";\nimport {GrowlerModel} from \"../../messaging/growler.model\";\nimport {Identity} from \"../../../models/identity\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../../services/settings.service\";\n\n\nexport const IDENTITY_EXTENSION_SERVICE = new InjectionToken<any>('IDENTITY_EXTENSION_SERVICE');\n\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class IdentityFormService {\n\n    constructor(\n        @Inject(SETTINGS_SERVICE) public settingsService: SettingsService,\n        @Inject(ZITI_DATA_SERVICE) private zitiService: ZitiDataService,\n        private growlerService: GrowlerService\n    ) {}\n \n    save(formData) {\n        const isUpdate = !isEmpty(formData.id);\n        const data: any = this.getIdentityDataModel(formData, isUpdate);\n        const svc = isUpdate ? this.zitiService.patch.bind(this.zitiService) : this.zitiService.post.bind(this.zitiService);\n        return svc('identities', data, formData.id).then((result) => {\n            const growlerData = new GrowlerModel(\n                'success',\n                'Success',\n                `Identity ${isUpdate ? 'Updated' : 'Created'}`,\n                `Successfully ${isUpdate ? 'updated' : 'created'} Identity: ${formData.name}`,\n            );\n            this.growlerService.show(growlerData);\n        }).catch((resp) => {\n            const errorMessage = this.zitiService.getErrorMessage(resp);\n            const growlerData = new GrowlerModel(\n                'error',\n                'Error',\n                `Error ${isUpdate ? 'Updating' : 'Creating'} Identity`,\n                errorMessage,\n            );\n            this.growlerService.show(growlerData);\n            throw resp;\n        })\n    }\n\n    getIdentityDataModel(formData, isUpdate) {\n        const saveModel = new Identity();\n        const modelProperties = keys(saveModel);\n        modelProperties.forEach((prop) => {\n            switch(prop) {\n                case 'type':\n                    if(isUpdate) {\n                        saveModel[prop] = formData[prop].id;\n                    } else {\n                        saveModel[prop] = formData[prop];\n                    }\n                    break;\n                case 'enrollment':\n                    if(isUpdate) {\n                        unset(saveModel, 'enrollment');\n                    } else {\n                        saveModel[prop] = formData[prop];\n                    }\n                    break;\n                default:\n                    saveModel[prop] = formData[prop];\n            }\n        });\n        return saveModel;\n    }\n\n    testService(identityId, serviceId) {\n        const url = `/identities/${identityId}/policy-advice/${serviceId}`;\n        return this.zitiService.call(url).then((result) => {\n            var errors = [];\n            var info = result.data;\n            if (!info?.isDialAllowed&&!info?.isBindAllowed) errors.push(\"No access to service. Adjust service policies.\");\n            if (info?.identityRouterCount<1) errors.push(\"Identity has no edge routers assigned. Adjust edge router policies.\");\n            if (info?.serviceRouterCount<1) errors.push(\"Service has no edge routers assigned. Adjust edge router policies.\");\n            if (info?.identityRouterCount>0&&info?.serviceRouterCount>0) {\n                if (info?.commonCount<1) errors.push(\"Identity and services have no edge routers in common. Adjust edge router policies and/or service edge router policies.\");\n                else if (info?.onlineCount<1) errors.push(\"Common edge routers are all off-line. Bring routers back on-line or adjust edge router policies and/or service edge router policies.\");\n            }\n            var status = \"\";\n            if (info?.isDialAllowed) {\n                if (info?.isBindAllowed) status = \"(Dial,Bind)\";\n                else status = \"(Dial)\";\n            } else {\n                if (info?.isBindAllowed) status = \"(Bind)\";\n            }\n            if (errors.length>0) {\n                for (var i=0; i<errors.length; i++) {\n                    status += \"<br/>\"+errors[i];\n                }\n            } else status += \"<br/>Everything is configured properly\";\n            return status;\n        });\n    }\n\n    refreshIdentity(id) {\n        const url: any = `/identities/${id}`\n        return this.zitiService.call(url);\n    }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Injectable, Inject, Component, OnInit} from \"@angular/core\";\nimport {cloneDeep, isEmpty} from 'lodash';\nimport moment from 'moment';\nimport {DataTableFilterService, FilterObj} from \"../../features/data-table/data-table-filter.service\";\nimport {ListPageServiceClass} from \"../../shared/list-page-service.class\";\nimport {\n    TableColumnDefaultComponent\n} from \"../../features/data-table/column-headers/table-column-default/table-column-default.component\";\nimport {CallbackResults} from \"../../features/list-page-features/list-page-form/list-page-form.component\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../services/settings.service\";\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../services/ziti-data.service\";\nimport {CsvDownloadService} from \"../../services/csv-download.service\";\nimport {Identity} from \"../../models/identity\";\nimport {unset} from \"lodash\";\nimport {ITooltipAngularComp} from \"ag-grid-angular\";\nimport {ITooltipParams} from \"ag-grid-community\";\nimport {OSTooltipComponent} from \"../../features/data-table/tooltips/os-tooltip.component\";\nimport {SDKTooltipComponent} from \"../../features/data-table/tooltips/sdk-tooltip.component\";\nimport {GrowlerModel} from \"../../features/messaging/growler.model\";\nimport {GrowlerService} from \"../../features/messaging/growler.service\";\nimport {ResetEnrollmentComponent} from \"../../features/reset-enrollment/reset-enrollment.component\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {SettingsServiceClass} from \"../../services/settings-service.class\";\nimport {ExtensionService} from \"../../features/extendable/extensions-noop.service\";\nimport {IDENTITY_EXTENSION_SERVICE} from \"../../features/projectable-forms/identity/identity-form.service\";\nimport {Router} from \"@angular/router\";\nimport {TableCellNameComponent} from \"../../features/data-table/cells/table-cell-name/table-cell-name.component\";\nimport {ConfirmComponent} from \"../../features/confirm/confirm.component\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class IdentitiesPageService extends ListPageServiceClass {\n\n    private paging = this.DEFAULT_PAGING;\n    public modalType = 'identities';\n\n    override CSV_COLUMNS = [\n        {label: 'Name', path: 'name'},\n        {label: 'Roles', path: 'roleAttributes'},\n        {label: 'Online', path: 'hasApiSession'},\n        {label: 'Edge Router Connected', path: 'hasEdgeRouterConnection'},\n        {label: 'OS', path: 'envInfo.os'},\n        {label: 'OS Version', path: 'envInfo.osVersion'},\n        {label: 'SDK', path: 'sdkInfo.version'},\n        {label: 'App Version', path: 'sdkInfo.appVersion'},\n        {label: 'Type', path: 'typeId'},\n        {label: 'Is Admin', path: 'isAdmin'},\n        {label: 'Auth Policy', path: 'authPolicy.name'},\n        {label: 'Auth Policy ID', path: 'authPolicy.id'},\n        {label: 'MFA Enabled', path: 'isMfaEnabled'},\n        {label: 'Created At', path: 'createdAt'},\n        {label: 'ID', path: 'id'},\n    ];\n\n    identityRoleAttributes: any[] = [];\n    selectedIdentityRoleAttributes: any[] = [];\n    selectedIdentity: any = new Identity();\n    columnFilters: any = {\n        name: '',\n        os: '',\n        createdAt: '',\n    };\n\n    override menuItems = [\n        {name: 'Edit', action: 'update'},\n        {name: 'Download JWT', action: 'download-enrollment'},\n        {name: 'View QR', action: 'qr-code'},\n        {name: 'Visualizer', action: 'identity-service-path'},\n        {name: 'Reset Enrollment', action: 'reset-enrollment'},\n        {name: 'Reissue Enrollment', action: 'reissue-enrollment'},\n        {name: 'Reset MFA', action: 'reset-mfa'},\n        {name: 'Override', action: 'override'},\n        {name: 'Delete', action: 'delete'},\n    ];\n\n    override tableHeaderActions = [\n        {name: 'Download All', action: 'download-all'},\n    ]\n\n    resourceType = 'identities';\n    constructor(\n        @Inject(SETTINGS_SERVICE) settings: SettingsServiceClass,\n        filterService: DataTableFilterService,\n        @Inject(ZITI_DATA_SERVICE) private zitiService: ZitiDataService,\n        override csvDownloadService: CsvDownloadService,\n        private growlerService: GrowlerService,\n        private dialogForm: MatDialog,\n        @Inject(IDENTITY_EXTENSION_SERVICE) private extService: ExtensionService,\n        protected override router: Router\n    ) {\n        super(settings, filterService, csvDownloadService, extService, router);\n        this.filterService.filtersChanged.subscribe(filters => {\n            let identityFilter;\n            filters.forEach((filter) => {\n                switch (filter.columnId) {\n                    case 'identityRoles':\n                        identityFilter = true;\n                        break;\n                }\n            });\n            if (!identityFilter) {\n                this.selectedIdentityRoleAttributes = [];\n            }\n        });\n    }\n\n    validate = (formData): Promise<CallbackResults> => {\n        return Promise.resolve({ passed: true});\n    }\n\n    initTableColumns(): any {\n        this.initMenuActions();\n        const self = this;\n        const identityRolesHeaderComponentParams = {\n            filterType: 'ATTRIBUTE',\n            enableSorting: true,\n            appendAttributeHash: false,\n            getRoleAttributes: () => {\n                return self.identityRoleAttributes;\n            },\n            getNamedAttributes: () => {\n                return [];\n            },\n            getSelectedRoleAttributes: () => {\n                return self.selectedIdentityRoleAttributes;\n            },\n            getSelectedNamedAttributes: () => {\n                return [];\n            },\n            setSelectedRoleAttributes: (attributes) => {\n                self.selectedIdentityRoleAttributes = attributes;\n            },\n            setSelectedNamedAttributes: (attributes) => {\n                // no-op\n            },\n            getNamedAttributesMap: () => {\n                return {};\n            }\n        };\n        const nameRenderer = (row) => {\n            return `<a href=\"./identities/${row?.data?.id}\">\n                        <div class=\"col cell-name-renderer\" data-id=\"${row?.data?.id}\">\n                            <span class=\"circle ${row?.data?.hasApiSession}\" title=\"Api Session\"></span>\n                            <span class=\"circle ${row?.data?.hasEdgeRouterConnection}\" title=\"Edge Router Connected\"></span>\n                            <strong>${row?.data?.name}</strong>\n                        </div>\n                    </a>`;\n        }\n\n        const osRenderer = (row) => {\n            let os = \"other\";\n            let osDetails = \"\";\n            if (row?.data?.envInfo) {\n                if (row?.data?.envInfo?.osVersion&&row?.data?.envInfo?.osVersion.toLowerCase().indexOf(\"windows\")>=0) os = \"windows\";\n                else {\n                    if (row?.data?.envInfo?.os&&row?.data?.envInfo?.os.toLowerCase().indexOf(\"darwin\")>=0) os = \"apple\";\n                    else if (row?.data?.envInfo?.os&&row?.data?.envInfo?.os.toLowerCase().indexOf(\"linux\")>=0) os = \"linux\";\n                    else if (row?.data?.envInfo?.os&&row?.data?.envInfo?.os.toLowerCase().indexOf(\"android\")>=0) os = \"android\";\n                    else if (row?.data?.envInfo?.os&&row?.data?.envInfo?.os.toLowerCase().indexOf(\"windows\")>=0) os = \"windows\";\n                }\n                if (row?.data?.envInfo?.os) osDetails += \"OS: \"+row?.data?.envInfo?.os;\n                if (row?.data?.envInfo?.arch) osDetails += \"&#10;Arch: \"+row?.data?.envInfo?.arch;\n                if (row?.data?.envInfo?.osRelease) osDetails += \"&#10;Release: \"+row?.data?.envInfo?.osRelease;\n                if (row?.data?.envInfo?.osVersion) osDetails += \"&#10;Version: \"+row?.data?.envInfo?.osVersion;\n            }\n            return `<div class=\"col desktop\" style=\"overflow: unset;\">\n                <span class=\"os ${os}\"></span>\n              </div>`\n        }\n\n        const sdkRenderer = (row) => {\n            let sdk = \"\";\n            let version = \"-\";\n            const sdkInfo = row?.data?.sdkInfo;\n            if (sdkInfo) {\n                version = \"\";\n                if (sdkInfo?.version) version += sdkInfo?.version;\n                if (sdkInfo?.appId) sdk += sdkInfo?.appId;\n                if (sdkInfo?.appVersion) sdk += sdkInfo?.appVersion;\n                if (sdkInfo?.type) sdk += sdkInfo?.type;\n                if (sdkInfo?.type) sdk += \"&#10;\"+sdkInfo?.branch;\n                if (sdkInfo?.revision) sdk += \" - \"+sdkInfo?.revision;\n            }\n            return`<div class=\"col desktop\" data-id=\"${row?.data?.id}\" style=\"overflow: unset;\" data-balloon-pos=\"up\" aria-label=\"${sdk}\">\n                <span class=\"oneline\">${version}</span>\n             </div>`;\n        }\n\n        const columnFilters = this.columnFilters;\n\n        const osParams = {\n            filterType: 'COMBO',\n            filterOptions: [\n                { label: 'All', value: '', icon: 'empty' },\n                { label: 'Apple', value: 'darwin', icon: 'apple' },\n                { label: 'Windows', value: 'mingw', icon: 'windows'  },\n                { label: 'Linux', value: 'linux', icon: 'linux'  },\n                { label: 'Android', value: 'android', icon: 'android'  },\n                { label: 'Other (text search)', value: '', icon: 'other', useTextInput: true  },\n            ],\n            columnFilters,\n        };\n\n        const isAdminHeaderComponentParams = {\n            filterType: 'SELECT',\n            enableSorting: true,\n            filterOptions: [\n                { label: 'All', value: '' },\n                { label: 'Admins', value: true },\n                { label: 'Non-Admins', value: false },\n            ]\n        };\n\n        let tableColumns = [\n            {\n                colId: 'name',\n                field: 'name',\n                headerName: 'Name',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: this.headerComponentParams,\n                cellRenderer: TableCellNameComponent,\n                cellRendererParams: { pathRoot: this.basePath, showIdentityIcons: true },\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.openEditForm(data?.data?.id);\n                },\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: true,\n                filter: true,\n                sortColumn: this.sort.bind(this),\n                sortDir: 'asc',\n                width: 300,\n            },\n            {\n                colId: 'roleAttributes',\n                field: 'roleAttributes',\n                headerName: 'Roles',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: identityRolesHeaderComponentParams,\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.openEditForm(data?.data?.id);\n                },\n                resizable: true,\n                cellRenderer: this.rolesRenderer,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: false,\n                filter: false,\n            },\n            {\n                colId: 'os',\n                field: 'os',\n                headerName: 'O/S',\n                width: 100,\n                cellRenderer: osRenderer,\n                headerComponent: TableColumnDefaultComponent,\n                tooltipComponent: OSTooltipComponent,\n                tooltipField: 'envInfo',\n                tooltipComponentParams: { color: '#ececec' },\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n            },\n            {\n                colId: 'sdk',\n                field: 'sdk',\n                headerName: 'SDK',\n                tooltipField: 'sdkInfo',\n                cellRenderer: sdkRenderer,\n                headerComponent: TableColumnDefaultComponent,\n                tooltipComponent: SDKTooltipComponent,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                width: 125,\n            },\n            {\n                colId: 'type',\n                field: 'type.name',\n                headerName: 'Type',\n                headerComponent: TableColumnDefaultComponent,\n                resizable: true,\n                sortable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortColumn: this.sort.bind(this),\n            },\n            {\n                colId: 'isAdmin',\n                field: 'isAdmin',\n                headerName: 'Is Admin',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: isAdminHeaderComponentParams,\n                resizable: true,\n                sortable: true,\n                sortColumn: this.sort.bind(this),\n                cellClass: 'nf-cell-vert-align tCol',\n                width: 100,\n            },\n            {\n                colId: 'createdAt',\n                field: 'createdAt',\n                headerName: 'Created At',\n                headerComponent: TableColumnDefaultComponent,\n                valueFormatter: this.createdAtFormatter,\n                resizable: true,\n                sortable: true,\n                sortColumn: this.sort.bind(this),\n                cellClass: 'nf-cell-vert-align tCol',\n            },\n            {\n                colId: 'token',\n                field: 'token',\n                headerName: 'Token',\n                headerComponent: TableColumnDefaultComponent,\n                cellRenderer: 'cellTokenComponent',\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n            },\n            {\n                colId: 'isMfaEnabled',\n                field: 'isMfaEnabled',\n                headerName: 'MFA',\n                headerComponent: TableColumnDefaultComponent,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                width: 100,\n            },\n            this.ID_COLUMN_DEF\n        ];\n        if (this.extService.processTableColumns) {\n            tableColumns = this.extService.processTableColumns(tableColumns);\n        }\n        return tableColumns;\n    }\n\n    public getIdentityRoleAttributes() {\n        return this.zitiService.get('identity-role-attributes', {}, []).then((result) => {\n            this.identityRoleAttributes = result.data;\n            return result;\n        });\n    }\n\n    getData(filters?: FilterObj[], sort?: any, page?: any): Promise<any> {\n        // we can customize filters or sorting here before moving on...\n        this.paging.page = page || this.paging.page;\n        return super.getTableData('identities', this.paging, filters, sort)\n            .then((results: any) => {\n                return this.processData(results);\n            });\n    }\n\n    private async processData(results: any) {\n        if (!isEmpty(results?.data)) {\n            //pre-process data before rendering\n            results.data = this.addActionsPerRow(results);\n        }\n        if (this.extService?.emitEvent) {\n            try {\n                const transformed = await this.extService.emitEvent({\n                    type: 'tableDataUpdated',\n                    data: { resourceType: this.resourceType, results },\n                });\n                if (transformed !== undefined) {\n                    results = transformed;\n                }\n            } catch (_e) {\n                // keep original results on extension failure\n            }\n        }\n        return results;\n    }\n\n    private addActionsPerRow(results: any): any[] {\n        return results.data.map((row) => {\n            row.actionList = ['update', 'override', 'delete', 'identity-service-path'];\n\n            if (this.hasEnrolmentToken(row)) {\n                row.actionList.push('reissue-enrollment');\n                if (!this.enrollmentExpired(row)) {\n                    row.actionList.push('download-enrollment');\n                    row.actionList.push('qr-code');\n                }\n            } else if (this.hasAuthenticator(row)) {\n                row.actionList.push('reset-enrollment');\n            }\n            if (row.isMfaEnabled) {\n                row.actionList.push('reset-mfa');\n            }\n            this.addListItemExtensionActions(row);\n            return row;\n        });\n    }\n\n    hasAuthenticator(item) {\n        return item?.authenticators?.cert?.id || item.authenticators?.updb?.id;\n    }\n\n    hasEnrolmentToken(item) {\n        let token;\n        if (item?.enrollment?.ott?.jwt) {\n            token = item?.enrollment?.ott?.jwt;\n        } else if (item?.enrollment?.ottca?.jwt) {\n            token = item?.enrollment?.ottca?.jwt;\n        } else if (item?.enrollment?.updb?.jwt) {\n            token = item?.enrollment?.updb?.jwt;\n        }\n        return token;\n    }\n\n    enrollmentExpired(item) {\n        let expiration;\n        if (item?.enrollment?.ott?.jwt) {\n            expiration = item?.enrollment?.ott?.expiresAt;\n        } else if (item?.enrollment?.ottca?.jwt) {\n            expiration = item?.enrollment?.ottca?.expiresAt;\n        } else if (item?.enrollment?.updb?.jwt) {\n            expiration = item?.enrollment?.updb?.expiresAt;\n        }\n        return moment(expiration).isBefore();\n    }\n\n    public getIdentitiesRoleAttributes() {\n        return this.zitiService.get('identity-role-attributes', {}, []);\n    }\n\n    public resetMFA(identity) {\n        return this.zitiService.resetMFA(identity.id).then(() => {\n            const growlerData = new GrowlerModel(\n                'success',\n                'Success',\n                `MFA Reset`,\n                `MFA was successfully reset for identity: ${identity.name}`,\n            );\n            this.growlerService.show(growlerData);\n        }).catch((error) => {\n            const message = this.zitiService.getErrorMessage(error);\n            const growlerData = new GrowlerModel(\n                'error',\n                'Error',\n                `Failed to Reset MFA`,\n                `Attempt to reset MFA failed: ${message}`,\n            );\n            this.growlerService.show(growlerData);\n        });\n    }\n\n    getJWT(identity: any) {\n        let qrCode;\n        if (!isEmpty(identity?.enrollment?.ott?.jwt)) {\n            qrCode = identity?.enrollment?.ott?.jwt;\n        } else if (!isEmpty(identity?.enrollment?.ottca?.jwt)) {\n            qrCode = identity?.enrollment?.ottca?.jwt;\n        } else if(!isEmpty(identity?.enrollment?.updb?.jwt)) {\n            qrCode = identity?.enrollment?.updb?.jwt;\n        }\n        return qrCode;\n    }\n\n    getToken(identity: any) {\n        let qrCode;\n        if (!isEmpty(identity?.enrollment?.ott?.token)) {\n            qrCode = identity?.enrollment?.ott?.token;\n        } else if (!isEmpty(identity?.enrollment?.ottca?.token)) {\n            qrCode = identity?.enrollment?.ottca?.token;\n        } else if(!isEmpty(identity?.enrollment?.updb?.token)) {\n            qrCode = identity?.enrollment?.updb?.token;\n        }\n        return qrCode;\n    }\n\n    downloadJWT(jwt, name) {\n        const element = document.createElement('a');\n        element.setAttribute('href', 'data:application/ziti-jwt;charset=utf-8,' + encodeURIComponent(jwt));\n        element.setAttribute('download', name+\".jwt\");\n        element.style.display = 'none';\n        document.body.appendChild(element);\n        element.click();\n        document.body.removeChild(element);\n    }\n\n    copyToken(token) {\n        navigator.clipboard.writeText(token);\n        const growlerData = new GrowlerModel(\n            'success',\n            'Success',\n            `Text Copied`,\n            `Registration token copied to clipboard`,\n        );\n        this.growlerService.show(growlerData);\n    }\n\n    resetJWT(identity) {\n        this.dialogRef = this.dialogForm.open(ResetEnrollmentComponent, {\n            data: {\n                identity: identity,\n                type: 'reset'\n            },\n            autoFocus: false,\n        });\n        return this.dialogRef;\n    }\n\n    reissueJWT(identity) {\n        this.dialogRef = this.dialogForm.open(ResetEnrollmentComponent, {\n            data: {\n                identity: identity,\n                type: 'reissue'\n            },\n            autoFocus: false,\n        });\n        return this.dialogRef;\n    }\n\n    getEnrollmentExpiration(identity: any) {\n        let expiresAt;\n        if (!isEmpty(identity?.enrollment?.ott?.expiresAt)) {\n            expiresAt = identity?.enrollment?.ott?.expiresAt;\n        } else if (!isEmpty(identity?.enrollment?.ottca?.expiresAt)) {\n            expiresAt = identity?.enrollment?.ottca?.expiresAt;\n        } else if(!isEmpty(identity?.enrollment?.updb?.expiresAt)) {\n            expiresAt = identity?.enrollment?.updb?.expiresAt;\n        }\n        return expiresAt;\n    }\n\n    resetEnrollment(identity: any, date: any) {\n        let id = identity?.authenticators?.cert?.id;\n        if (!id) {\n            if(!isEmpty(identity?.enrollment?.ott)) {\n                id = identity?.enrollment?.ott.id;\n            } else if(!isEmpty(identity?.enrollment.ottca)) {\n                id = identity?.enrollment?.ottca.id;\n            } else if (!isEmpty(identity?.enrollment.updb)) {\n                id = identity?.enrollment?.updb.id;\n            }\n        }\n        return this.dataService.resetEnrollment(id, date).then(() => {\n            const growlerData = new GrowlerModel(\n                'success',\n                'Success',\n                `Enrollment Reset`,\n                `Successfully reissued enrollment token`,\n            );\n            this.growlerService.show(growlerData);\n        }).catch((error) => {\n            const growlerData = new GrowlerModel(\n                'error',\n                'Error',\n                `Reset Failed`,\n                `Failed to reissues enrollment token`,\n            );\n            this.growlerService.show(growlerData);\n        });\n    }\n\n    public openUpdate(itemId?: any) {\n        this.modalType = 'identity';\n        this.sideModalOpen = true;\n    }\n\n    public openOverridesModal(item) {\n        this.modalType = 'overrides';\n        this.selectedIdentity = item;\n        this.sideModalOpen = true;\n    }\n\n    public deleteEnrollment(identity) {\n      return new Promise((resolve, reject) => {\n        const confirmData = {\n          appendId: 'DeleteEnrollment',\n          title: 'Delete Enrollment',\n          message: `Are you sure you would like to delete the enrollment for this Identity?`,\n          confirmLabel: 'Yes',\n          cancelLabel: 'Oops, no get me out of here',\n          showCancelLink: true,\n          imageUrl: 'assets/svgs/Growl_Warning.svg',\n        };\n        this.dialogRef = this.dialogForm.open(ConfirmComponent, {\n          data: confirmData,\n          autoFocus: false,\n        });\n        this.dialogRef.afterClosed().subscribe({\n          next: (result) => {\n            if (!result?.confirmed) {\n              resolve(false);\n            }\n            let enrollmentId;\n            if(!isEmpty(identity?.enrollment?.ott)) {\n              enrollmentId = identity?.enrollment?.ott.id;\n            } else if(!isEmpty(identity?.enrollment.ottca)) {\n              enrollmentId = identity?.enrollment?.ottca.id;\n            } else if (!isEmpty(identity?.enrollment.updb)) {\n              enrollmentId = identity?.enrollment?.updb.id;\n            }\n            if (result?.confirmed) {\n                this.dataService.deleteEnrollment(enrollmentId).then(() => {\n                const growlerData = new GrowlerModel(\n                    'success',\n                    'Success',\n                    `Enrollment Deleted`,\n                    `Successfully deleted Identity enrollment `,\n                );\n                this.growlerService.show(growlerData);\n                resolve(true);\n                }).catch((error) => {\n                const growlerData = new GrowlerModel(\n                    'error',\n                    'Error',\n                    `Delete Failed`,\n                    `Failed to delete Identity enrollment token`,\n                );\n                this.growlerService.show(growlerData);\n                    reject(error);\n                });\n            }\n          }\n        });\n      })\n    }\n}\n","export class EdgeRouter {\n    name = '';\n    roleAttributes = [];\n    appData = {};\n    isTunnelerEnabled = true;\n    noTraversal = false;\n    cost = 0;\n    tags = {};\n};","import {Injectable, Inject, InjectionToken} from \"@angular/core\";\nimport {isEmpty, unset, keys} from 'lodash';\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../services/ziti-data.service\";\nimport {GrowlerService} from \"../../messaging/growler.service\";\nimport {GrowlerModel} from \"../../messaging/growler.model\";\nimport {Identity} from \"../../../models/identity\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../../services/settings.service\";\nimport {ExtensionService} from \"../../extendable/extensions-noop.service\";\n\nimport moment from 'moment';\nimport {EdgeRouter} from \"../../../models/edge-router\";\n\nexport const EDGE_ROUTER_EXTENSION_SERVICE = new InjectionToken<any>('EDGE_ROUTER_EXTENSION_SERVICE');\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class EdgeRouterFormService {\n\n    associatedIdentities: any = [];\n    associatedIdentityNames: any = [];\n    associatedServices: any = [];\n    associatedServiceNames: any = [];\n\n    constructor(\n        @Inject(SETTINGS_SERVICE) public settingsService: SettingsService,\n        @Inject(ZITI_DATA_SERVICE) private zitiService: ZitiDataService,\n        private growlerService: GrowlerService,\n        @Inject(EDGE_ROUTER_EXTENSION_SERVICE)private extService: ExtensionService\n    ) {}\n \n    save(formData): Promise<any> {\n        const isUpdate = !isEmpty(formData.id);\n        const data: any = this.getEdgeRouterDataModel(formData, isUpdate);\n        const svc = isUpdate ? this.zitiService.patch.bind(this.zitiService) : this.zitiService.post.bind(this.zitiService);\n        return svc('edge-routers', data, formData.id).then(async (result: any) => {\n            const id = result?.data?.id || formData.id;\n            let router = await this.zitiService.getSubdata('edge-routers', id, '').then((routerData) => {\n                return routerData.data;\n            });\n            return this.extService.formDataSaved(router).then((formSavedResult: any) => {\n                const returnVal = {\n                    data: router,\n                    close: this.extService.closeAfterSave\n                };\n                const growlerData = new GrowlerModel(\n                    'success',\n                    'Success',\n                    `Edge Router ${isUpdate ? 'Updated' : 'Created'}`,\n                    `Successfully ${isUpdate ? 'updated' : 'created'} Edge Router: ${formData.name}`,\n                );\n                this.growlerService.show(growlerData);\n                return returnVal;\n            }).catch((result) => {\n                return false;\n            });\n        }).catch((resp) => {\n            const errorMessage = this.zitiService.getErrorMessage(resp);\n            const growlerData = new GrowlerModel(\n                'error',\n                'Error',\n                `Error ${isUpdate ? 'Updating' : 'Creating'} Edge Router`,\n                errorMessage,\n            );\n            this.growlerService.show(growlerData);\n            throw resp;\n        })\n    }\n\n    getEdgeRouterDataModel(formData, isUpdate) {\n        const saveModel = new EdgeRouter();\n        const modelProperties = keys(saveModel);\n        modelProperties.forEach((prop) => {\n            switch(prop) {\n                default:\n                    saveModel[prop] = formData[prop];\n            }\n        });\n        return saveModel;\n    }\n\n    getAuthPolicies() {\n        const paging = {\n            filter: \"\",\n            noSearch: true,\n            order: \"asc\",\n            page: 1,\n            searchOn: \"name\",\n            sort: \"name\",\n            total: 100\n        }\n        return this.zitiService.get('auth-policies', paging, []).then((result: any) => {\n            return [{id: 'default', name: 'Default'}, ...result.data];\n        });\n    }\n\n    copyToClipboard(val) {\n        navigator.clipboard.writeText(val);\n        const growlerData = new GrowlerModel(\n            'success',\n            'Success',\n            `Text Copied`,\n            `API call URL copied to clipboard`,\n        );\n        this.growlerService.show(growlerData);\n    }\n\n    getAssociatedServices(id) {\n        this.zitiService.getSubdata('edge-routers', id, 'services',this.zitiService.DEFAULT_PAGING).then((result: any) => {\n            this.associatedServices = result.data;\n            this.associatedServiceNames = this.associatedServices.map((svc) => {\n                return svc.name;\n            });\n        });\n    }\n\n    getAssociatedIdentities(id) {\n        this.zitiService.getSubdata('edge-routers', id, 'identities',this.zitiService.DEFAULT_PAGING).then((result: any) => {\n            this.associatedIdentities = result.data;\n            this.associatedIdentityNames = this.associatedIdentities.map((policy) => {\n                return policy.name;\n            });\n        });\n    }\n\n    refreshRouter(id) {\n        const url: any = `/edge-routers/${id}`\n        return this.zitiService.call(url);\n    }\n}","import {Injectable, Inject, Component} from \"@angular/core\";\nimport {cloneDeep, isEmpty} from 'lodash';\nimport moment from 'moment';\nimport {DataTableFilterService, FilterObj} from \"../../features/data-table/data-table-filter.service\";\nimport {ListPageServiceClass} from \"../../shared/list-page-service.class\";\nimport {\n    TableColumnDefaultComponent\n} from \"../../features/data-table/column-headers/table-column-default/table-column-default.component\";\nimport {CallbackResults} from \"../../features/list-page-features/list-page-form/list-page-form.component\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../services/settings.service\";\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../services/ziti-data.service\";\nimport {CsvDownloadService} from \"../../services/csv-download.service\";\nimport {EdgeRouter} from \"../../models/edge-router\";\nimport {unset, forEach} from \"lodash\";\nimport {ITooltipAngularComp} from \"ag-grid-angular\";\nimport {ITooltipParams} from \"ag-grid-community\";\nimport {OSTooltipComponent} from \"../../features/data-table/tooltips/os-tooltip.component\";\nimport {GrowlerModel} from \"../../features/messaging/growler.model\";\nimport {GrowlerService} from \"../../features/messaging/growler.service\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {SettingsServiceClass} from \"../../services/settings-service.class\";\nimport {EDGE_ROUTER_EXTENSION_SERVICE} from \"../../features/projectable-forms/edge-router/edge-router-form.service\";\nimport {ExtensionService} from \"../../features/extendable/extensions-noop.service\";\nimport {ConfirmComponent} from \"../../features/confirm/confirm.component\";\nimport {Router} from \"@angular/router\";\nimport {TableCellNameComponent} from \"../../features/data-table/cells/table-cell-name/table-cell-name.component\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class EdgeRoutersPageService extends ListPageServiceClass {\n\n    private paging = this.DEFAULT_PAGING;\n    public modalType = 'edge-router';\n\n    override CSV_COLUMNS = [\n        {label: 'Name', path: 'name'},\n        {label: 'Attributes', path: 'roleAttributes'},\n        {label: 'Verified', path: 'isVerified'},\n        {label: 'Online', path: 'isOnline'},\n        {label: 'Created', path: 'createdAt'},\n        {label: 'Token', path: 'enrollmentToken'},\n        {label: 'No Traversal', path: 'noTraversal'},\n        {label: 'Host Name', path: 'hostname'},\n        {label: 'Disabled', path: 'disabled'},\n        {label: 'Tunneler Enabled', path: 'isTunnelerEnabled'},\n        {label: 'OS', path: 'versionInfo.os'},\n        {label: 'Architecture', path: 'versionInfo.arch'},\n        {label: 'Version', path: 'versionInfo.version'},\n        {label: 'Revision', path: 'versionInfo.revision'},\n        {label: 'Fingerprint', path: 'fingerprint'},\n        {label: 'Advertise TLS Address',path: 'supportedProtocols.tls'},\n        {label: 'Advertise WSS Address',path: 'supportedProtocols.wss'},\n        {label: 'ID', path: 'id'},\n    ];\n\n    selectedEdgeRouter: any = new EdgeRouter();\n    columnFilters: any = {\n        name: '',\n        os: '',\n        createdAt: '',\n    };\n\n    override menuItems = [\n        {name: 'Edit', action: 'update'},\n        {name: 'Download JWT', action: 'download-enrollment'},\n        {name: 'Reset Enrollment', action: 'reset-enrollment'},\n        {name: 'Re-Enroll', action: 're-enroll'},\n        {name: 'Delete', action: 'delete'},\n    ]\n\n    override tableHeaderActions = [\n        {name: 'Download All', action: 'download-all'},\n    ]\n\n    resourceType = 'edge-routers';\n\n    constructor(\n        @Inject(SETTINGS_SERVICE) settings: SettingsServiceClass,\n        filterService: DataTableFilterService,\n        @Inject(ZITI_DATA_SERVICE) private zitiService: ZitiDataService,\n        override csvDownloadService: CsvDownloadService,\n        private growlerService: GrowlerService,\n        private dialogForm: MatDialog,\n        @Inject(EDGE_ROUTER_EXTENSION_SERVICE) private extService: ExtensionService,\n        protected override router: Router\n    ) {\n        super(settings, filterService, csvDownloadService, extService, router);\n    }\n\n    validate = (formData): Promise<CallbackResults> => {\n        return Promise.resolve({ passed: true});\n    }\n\n    initTableColumns(): any {\n        this.initMenuActions();\n\n        const nameRenderer = (row) => {\n            return `<div class=\"col cell-name-renderer\" data-id=\"${row?.data?.id}\">\n                <span class=\"circle ${row?.data?.isVerified}\" title=\"Verified Status\"></span>\n                <span class=\"circle ${row?.data?.isOnline}\" title=\"Online Status\"></span>\n                <strong>${row?.data?.name}</strong>\n              </div>`;\n        }\n\n        const rolesRenderer = (row) => {\n            let roles = '';\n            row?.data?.roleAttributes?.forEach((attr) => {\n                roles += '<div class=\"hashtag\">'+attr+'</div>';\n            });\n            return roles;\n        }\n\n        const osRenderer = (row) => {\n            const osMap: any = {\n                'darwin': 'apple',\n                'linux': 'linux',\n                'android': 'android',\n                'windows': 'windows'\n            }\n            let os = \"other\";\n            forEach(osMap, (value, key) => {\n                if (row?.data?.versionInfo?.osVersion?.toLowerCase().indexOf(key)>=0 ||\n                    row?.data?.versionInfo?.os.toLowerCase().indexOf(key)>=0) {\n                    os = value;\n                }\n            });\n            return `<div class=\"col desktop\" data-id=\"${row?.data?.id}\" style=\"overflow: unset;\">\n                <span class=\"os ${os}\" data-balloon-pos=\"up\"></span>\n              </div>`\n        }\n\n        const enrollmentTokenFormatter = (row) => {\n            const token = row?.data?.enrollmentToken;\n            if (token) {\n                if (moment(row?.data?.enrollmentExpiresAt).isBefore()) {\n                    return 'Enrollment Expired';\n                } else {\n                    return token;\n                }\n            } else {\n                return '';\n            }\n        };\n\n        const columnFilters = this.columnFilters;\n\n        const osParams = {\n            filterType: 'COMBO',\n            filterOptions: [\n                { label: 'All', value: '', icon: 'empty' },\n                { label: 'Apple', value: 'darwin', icon: 'apple' },\n                { label: 'Windows', value: 'mingw', icon: 'windows'  },\n                { label: 'Linux', value: 'linux', icon: 'linux'  },\n                { label: 'Android', value: 'android', icon: 'android'  },\n                { label: 'Other (text search)', value: '', icon: 'other', useTextInput: true  },\n            ],\n            columnFilters,\n        };\n\n        let tableColumns = [\n            {\n                colId: 'name',\n                field: 'name',\n                headerName: 'Name',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: this.headerComponentParams,\n                cellRenderer: TableCellNameComponent,\n                cellRendererParams: { pathRoot: this.basePath, showRouterIcons: true },\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.openEditForm(data?.data?.id);\n                },\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: true,\n                filter: true,\n                sortColumn: this.sort.bind(this),\n                sortDir: 'asc'\n            },\n            {\n                colId: 'os',\n                field: 'versionInfo.os',\n                headerName: 'O/S',\n                width: 100,\n                cellRenderer: osRenderer,\n                headerComponent: TableColumnDefaultComponent,\n                tooltipComponent: OSTooltipComponent,\n                tooltipField: 'versionInfo.os',\n                tooltipComponentParams: { color: '#ececec' },\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n            },\n            {\n                colId: 'roleAttributes',\n                field: 'roleAttributes',\n                headerName: 'Roles',\n                headerComponent: TableColumnDefaultComponent,\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.openEditForm(data?.data?.id);\n                },\n                resizable: true,\n                cellRenderer: this.rolesRenderer,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: false,\n                filter: false,\n            },\n            {\n                colId: 'verified',\n                field: 'isVerified',\n                headerName: 'Verified',\n                width: 100,\n                sortable: true,\n                headerComponent: TableColumnDefaultComponent,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n            },\n            {\n                colId: 'online',\n                field: 'isOnline',\n                headerName: 'Online',\n                width: 100,\n                headerComponent: TableColumnDefaultComponent,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n            },\n            {\n                colId: 'createdAt',\n                field: 'createdAt',\n                headerName: 'Created At',\n                headerComponent: TableColumnDefaultComponent,\n                valueFormatter: this.createdAtFormatter,\n                resizable: true,\n                sortable: true,\n                sortColumn: this.sort.bind(this),\n                cellClass: 'nf-cell-vert-align tCol',\n            },\n            {\n                colId: 'enrollmentToken',\n                field: 'enrollmentToken',\n                headerName: 'Token',\n                headerComponent: TableColumnDefaultComponent,\n                valueFormatter: enrollmentTokenFormatter,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n            },\n            {\n                colId: 'jwt',\n                field: 'enrollmentJwt',\n                headerName: 'JWT',\n                headerComponent: TableColumnDefaultComponent,\n                cellRenderer: 'cellTokenComponent',\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n            },\n            {\n                colId: 'hostname',\n                field: 'hostname',\n                headerName: 'Host Name',\n                headerComponent: TableColumnDefaultComponent,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: false,\n                filter: false,\n                tooltipValueGetter: (params) => {\n                    return params.value || '';\n                }\n            },\n            {\n                colId: 'version',\n                field: 'versionInfo.version',\n                headerName: 'Router Version',\n                headerComponent: TableColumnDefaultComponent,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: false,\n                filter: false,\n            },\n            {\n                colId: 'supportedProtocols',\n                headerName: 'Advertise Address',\n                headerComponent: TableColumnDefaultComponent,\n                resizable: true,\n                sortable: false,\n                filter: false,\n                valueGetter: (params) => {\n                  const protocols = params.data?.supportedProtocols;\n                  if (!protocols) return '';\n                  return Object.values(protocols).filter(Boolean).join(' | ');\n                },\n                tooltipValueGetter: (params) => params.value,\n                tooltipShowMode: 'whenTruncated',\n                cellStyle: {whiteSpace: 'nowrap',overflow: 'hidden',textOverflow: 'ellipsis'}\n            },\n            this.ID_COLUMN_DEF\n        ];\n\n        if (this.extService.processTableColumns) {\n            tableColumns = this.extService.processTableColumns(tableColumns);\n        }\n\n        return tableColumns;\n    }\n\n    getData(filters?: FilterObj[], sort?: any, page?: any): Promise<any> {\n        // we can customize filters or sorting here before moving on...\n        this.paging.page = page || this.paging.page;\n        return super.getTableData('edge-routers', this.paging, filters, sort)\n            .then((results: any) => {\n                return this.processData(results);\n            });\n    }\n\n    private processData(results: any) {\n        if (!isEmpty(results?.data)) {\n            //pre-process data before rendering\n            results.data = this.addActionsPerRow(results);\n        }\n        return results;\n    }\n\n    private addActionsPerRow(results: any): any[] {\n        return results.data.map((row) => {\n            row.actionList = ['update', 're-enroll', 'delete'];\n            if (this.hasEnrolmentToken(row)) {\n                row.actionList.push('download-enrollment');\n            }\n            this.addListItemExtensionActions(row);\n            return row;\n        });\n    }\n\n    hasEnrolmentToken(item) {\n        return !isEmpty(item?.enrollmentJwt);\n    }\n\n    public getEdgeRouterRoleAttributes() {\n        return this.zitiService.get('edge-router-role-attributes', {}, []);\n    }\n\n\n    getJWT(identity: any) {\n        return identity.enrollmentJwt;\n    }\n\n    downloadJWT(jwt, name) {\n        const element = document.createElement('a');\n        element.setAttribute('href', 'data:application/ziti-jwt;charset=utf-8,' + encodeURIComponent(jwt));\n        element.setAttribute('download', name+\".jwt\");\n        element.style.display = 'none';\n        document.body.appendChild(element);\n        element.click();\n        document.body.removeChild(element);\n    }\n\n    reenroll(router: any) {\n        const data = {\n            appendId: 'ReenrollRouter',\n            title: 'Re-Enroll Router',\n            message: `<p>If the router is currently connected, it will be disconnected until the enrollment process is completed with the newly generated JWT. <p> Are you sure you want to re-enroll the selected router?`,\n            confirmLabel: 'Yes',\n            cancelLabel: 'Oops, no get me out of here',\n            showCancelLink: true\n        };\n        this.dialogRef = this.dialogForm.open(ConfirmComponent, {\n            data: data,\n            autoFocus: false,\n        });\n        return this.dialogRef.afterClosed().toPromise().then((result) => {\n            if (result?.confirmed) {\n                return this.zitiService.post(`edge-routers/${router.id}/re-enroll`, {}, true).then((result) => {\n                    const growlerData = new GrowlerModel(\n                        'success',\n                        'Success',\n                        `Re-enroll Confirmed`,\n                        `Router re-enroll was sent. A new enrollment token is now available`,\n                    );\n                    this.growlerService.show(growlerData);\n                });\n            } else {\n                return Promise.resolve();\n            }\n        });\n    }\n\n    public openUpdate(item?: any) {\n        this.modalType = 'edge-router';\n        if (item) {\n            this.selectedEdgeRouter = item;\n            this.selectedEdgeRouter.badges = [];\n            if (this.selectedEdgeRouter.isOnline) {\n                this.selectedEdgeRouter.badges.push({label: 'Online', class: 'online', circle: 'true'});\n            } else {\n                this.selectedEdgeRouter.badges.push({label: 'Offline', class: 'offline', circle: 'false'});\n            }\n            if (!this.selectedEdgeRouter.isVerified) {\n                this.selectedEdgeRouter.badges.push({label: 'Unverified', class: 'unreg'});\n            }\n            // TODO: implement when metrics and dialog features are available\n            /*this.selectedEdgeRouterZ.moreActions = [\n                {name: 'open-metrics', label: 'Open Metrics'},\n                {name: 'dial-logs', label: 'Dial Logs'},\n                {name: 'dial-logs', label: 'View Events'},\n            ];*/\n            unset(this.selectedEdgeRouter, '_links');\n        } else {\n            this.selectedEdgeRouter = new EdgeRouter();\n        }\n        this.sideModalOpen = true;\n    }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, EventEmitter, Input, Output, OnChanges, Inject, Optional} from '@angular/core';\nimport moment from 'moment';\nimport {isEmpty} from 'lodash';\nimport {MAT_DIALOG_DATA, MatDialog, MatDialogRef} from \"@angular/material/dialog\";\nimport {IdentitiesPageService} from \"../../pages/identities/identities-page.service\";\nimport {DialogRef} from \"@angular/cdk/dialog\";\nimport {EdgeRoutersPageService} from \"../../pages/edge-routers/edge-routers-page.service\";\n\n@Component({\n    selector: 'lib-qr-code',\n    templateUrl: './qr-code.component.html',\n    styleUrls: ['./qr-code.component.scss'],\n    standalone: false\n})\nexport class QrCodeComponent implements OnChanges {\n\n  @Input() jwt: any;\n  @Input() token: any;\n  @Input() expiration: any;\n  @Input() identity: any = {};\n  @Input() type: string = 'identity';\n  @Input() authenticators: any;\n  @Input() qrOnly: boolean = false;\n  @Input() canExpand: boolean = false;\n  @Output() doRefresh: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n  jwtExpired;\n  expirationDate;\n  qrCodeSize = 200;\n  isModal = false;\n  resettingMFA = false;\n  mfaReset = false;\n  showQRCodeComponent = false;\n\n  constructor(\n      @Optional() private dialogRef: MatDialogRef<QrCodeComponent>,\n      @Optional() private dialogForm: MatDialog,\n      @Optional() @Inject(MAT_DIALOG_DATA) public data: any,\n      public identitiesSvc: IdentitiesPageService,\n      public edgeRoutersSvc: EdgeRoutersPageService,\n  )\n  {\n    if (!isEmpty(data)) {\n      this.jwt = data.jwt;\n      this.token = data.token;\n      this.expiration = data.expiration;\n      this.qrCodeSize = data.qrCodeSize || 200;\n      this.jwtExpired = this.getJwtExpired();\n      this.expirationDate = this.getExpirationDate();\n      this.isModal = true;\n      this.identity = data.identity;\n      this.qrOnly = data.qrOnly;\n      this.showQRCodeComponent = data.showQRCodeComponent || data.qrOnly;\n    }\n    this.mfaReset = false;\n  }\n\n  get showQRCode() {\n    return this.showQRCodeComponent && !this.jwtExpired && this.type !== 'router';\n  }\n\n  get hasJWT() {\n    return !isEmpty(this.jwt);\n  }\n\n  get showResetToken() {\n    return this.authenticators?.cert?.id || this.authenticators?.updb?.id;\n  }\n\n  get showReissueToken() {\n    return (this.identity?.enrollment?.ott?.id || this.identity?.enrollment?.updb?.id) && moment(this.expiration).isBefore();\n  }\n\n  get showResetMFA() {\n    return this.identity?.isMfaEnabled;\n  }\n\n  get showReenrollToken() {\n    return this.jwtExpired && this.type === 'router';\n  }\n\n  getJwtExpired() {\n    return moment(this.expiration).isBefore();\n  }\n\n  getExpirationDate() {\n    return moment(this.expiration).local().format('M/D/YY h:mm a');\n  }\n\n  reissue() {\n    const dialogRef: MatDialogRef<any> = this.identitiesSvc.reissueJWT(this.identity);\n    dialogRef.afterClosed().subscribe((result) => {\n        if (result) {\n          this.doRefresh.emit(true);\n        }\n    });\n  }\n\n  resetMFA() {\n    this.resettingMFA = true;\n    this.identitiesSvc.resetMFA(this.identity).then(() => {\n      this.mfaReset = true;\n    }).finally(() => {\n      this.resettingMFA = false;\n      this.doRefresh.emit(true);\n    });\n  }\n\n  reenroll() {\n    this.edgeRoutersSvc.reenroll(this.identity).then(() => {\n      this.doRefresh.emit(true);\n    });\n  }\n\n  reset() {\n    const dialogRef: MatDialogRef<any> = this.identitiesSvc.resetJWT(this.identity);\n    dialogRef.afterClosed().subscribe((result) => {\n      if (result) {\n        this.doRefresh.emit(true);\n      }\n    });\n  }\n\n  deleteEnrollment() {\n    this.identitiesSvc.deleteEnrollment(this.identity).then(() => {\n      this.doRefresh.emit(true);\n    });\n  }\n\n  expandQRCode() {\n    if (!this.canExpand) {\n      return;\n    }\n    const data = {\n      jwt: this.jwt,\n      expiration: this.expiration,\n      qrCodeSize: 500,\n      identity: this.identity,\n      qrOnly: true\n    };\n    const dialogRef = this.dialogForm.open(QrCodeComponent, {\n      data: data,\n      autoFocus: false,\n    });\n  }\n\n  ngOnChanges() {\n    this.jwtExpired = this.getJwtExpired();\n    this.expirationDate = this.getExpirationDate();\n  }\n}\n","<div class=\"qr-code-container\" [ngClass]=\"{'modal-view': isModal}\">\n  @if (!showQRCode) {\n    <div class=\"qr-code-buttons\">\n      @if (hasJWT && !jwtExpired && type !== 'router') {\n        <div (click)=\"identitiesSvc.downloadJWT(jwt, identity.name)\" class=\"download-button\">\n          <div class=\"download-jwt\"></div>\n          <div>DOWNLOAD JWT</div>\n          <div class=\"tap-to-download icon-download-jwt\"></div>\n        </div>\n      }\n      @if (hasJWT && !jwtExpired && type !== 'router') {\n        <div (click)=\"expandQRCode()\" class=\"download-button\" matTooltip=\"Show QR Code\">\n          <div class=\"tap-to-download icon-qr\"></div>\n          <div>SHOW QR CODE</div>\n          <div class=\"tap-to-download icon-ClickIcon\"></div>\n        </div>\n      }\n      @if (!jwtExpired && type === 'router') {\n        <div (click)=\"identitiesSvc.copyToken(token)\" class=\"download-button\" style=\"background-color: #232f3e!important;\">\n          <div class=\"download-key\"></div>\n          <div>COPY ENROLLMENT TOKEN</div>\n          <div class=\"tap-to-download icon-ClickIcon\"></div>\n        </div>\n      }\n      @if (showResetToken) {\n        <div (click)=\"identitiesSvc.resetJWT(identity)\" class=\"download-button\" >\n          <div class=\"download-key\"></div>\n          <div>RESET ENROLLMENT</div>\n          <div class=\"tap-to-download icon-refresh\"></div>\n        </div>\n      }\n      @if (showReissueToken) {\n        <div (click)=\"reissue()\" class=\"download-button\" >\n          <div class=\"download-key\"></div>\n          <div>REISSUE ENROLLMENT</div>\n          <div class=\"tap-to-download icon-refresh\"></div>\n        </div>\n      }\n      @if (showResetMFA || mfaReset) {\n        <div (click)=\"resetMFA()\" class=\"download-button\" [ngClass]=\"{'reset-success': mfaReset}\">\n          <div class=\"icon-lock\"></div>\n          <div>{{mfaReset ? 'MFA RESET SUCCESSFUL' : 'RESET MFA'}}</div>\n          <div [ngClass]=\"{spinner: resettingMFA, 'icon-refresh': !resettingMFA, 'tap-to-download': !resettingMFA, 'icon-Icon_Check': mfaReset && !resettingMFA}\"></div>\n        </div>\n      }\n    </div>\n  }\n  @if (showQRCode) {\n    <qrcode\n      [errorCorrectionLevel]=\"'M'\" [qrdata]=\"jwt\"\n      [width]=\"qrCodeSize\" (click)=\"expandQRCode()\"\n      [ngClass]=\"{'qr-code-expandable': canExpand}\"\n    ></qrcode>\n  }\n  @if (!qrOnly) {\n    <div class=\"qr-code-buttons\">\n      @if (hasJWT && type === 'identity') {\n          <div (click)=\"deleteEnrollment()\" class=\"delete-button\">\n            <div class=\"  tap-to-delete icon-Icon_Delete\"></div>\n            <div>DELETE ENROLLMENT</div>\n            <div class=\"tap-to-delete icon-Icon_Delete\"></div>\n          </div>\n      }\n      @if (!jwtExpired && type === 'router') {\n        <span class=\"info-text\">OR</span>\n      }\n      @if (!jwtExpired && type === 'router') {\n        <div (click)=\"identitiesSvc.downloadJWT(jwt, identity.name)\" class=\"download-button\">\n          <div class=\"download-key\"></div>\n          <div>DOWNLOAD ENROLLMENT JWT</div>\n          <div class=\"tap-to-download icon-download-jwt\"></div>\n        </div>\n      }\n      @if (showReenrollToken) {\n        <div (click)=\"reenroll()\" class=\"download-button\" >\n          <div class=\"download-key\"></div>\n          <div>REISSUE ENROLLMENT</div>\n          <div class=\"tap-to-download icon-refresh\"></div>\n        </div>\n      }\n    </div>\n  }\n</div>\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { Component } from '@angular/core';\nimport {ICellRendererAngularComp} from \"ag-grid-angular\";\nimport {ICellRendererParams} from \"ag-grid-community\";\n\nimport {isEmpty} from 'lodash';\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {QrCodeComponent} from \"../../../qr-code/qr-code.component\";\n\nimport moment from \"moment\";\n\n@Component({\n    selector: 'lib-table-cell-token',\n    templateUrl: './table-cell-token.component.html',\n    styleUrls: ['./table-cell-token.component.scss'],\n    standalone: false\n})\nexport class TableCellTokenComponent implements ICellRendererAngularComp {\n\n  cellParams: any;\n  item: any;\n  dialogRef: any;\n\n  constructor(public dialogForm: MatDialog) {\n  }\n\n  agInit(params: ICellRendererParams): void {\n    this.cellParams = params;\n    this.item = params.data;\n  }\n\n  get tokenExpired() {\n    const expiration = this.getEnrollmentExpiration(this.item);\n    if (expiration) {\n      return moment(expiration).isBefore();\n    } else {\n      return false;\n    }\n  }\n\n  get hasEnrolmentToken() {\n    const token = this.item?.enrollment?.ott?.jwt\n      || this.item?.enrollment?.ottca?.jwt\n      || this.item?.enrollment?.updb?.jwt;\n    return this.item.enrollmentToken || !!token;\n  }\n\n  getJWT(item: any) {\n    if (!isEmpty(item.enrollmentJwt)) {\n      return item.enrollmentJwt;\n    }\n    let qrCode;\n    if (!isEmpty(item?.enrollment?.ott?.jwt)) {\n      qrCode = item?.enrollment?.ott?.jwt;\n    } else if (!isEmpty(item?.enrollment?.ottca?.jwt)) {\n      qrCode = item?.enrollment?.ottca?.jwt;\n    } else if(!isEmpty(item?.enrollment?.updb?.jwt)) {\n      qrCode = item?.enrollment?.updb?.jwt;\n    }\n    return qrCode;\n  }\n\n  getEnrollmentExpiration(item: any) {\n    if (!isEmpty(item?.enrollmentExpiresAt)) {\n      return item.enrollmentExpiresAt;\n    }\n    let expiresAt;\n    if (!isEmpty(item?.enrollment?.ott?.expiresAt)) {\n      expiresAt = item?.enrollment?.ott?.expiresAt;\n    } else if (!isEmpty(item?.enrollment?.ottca?.expiresAt)) {\n      expiresAt = item?.enrollment?.ottca?.expiresAt;\n    } else if(!isEmpty(item?.enrollment?.updb?.expiresAt)) {\n      expiresAt = item?.enrollment?.updb?.expiresAt;\n    }\n    return expiresAt;\n  }\n\n  downloadCert() {\n    const jwt = this.getJWT(this.item);\n    const element = document.createElement('a');\n    element.setAttribute('href', 'data:application/ziti-jwt;charset=utf-8,' + encodeURIComponent(jwt));\n    element.setAttribute('download', this.item.name+\".jwt\");\n    element.style.display = 'none';\n    document.body.appendChild(element);\n    element.click();\n    document.body.removeChild(element);\n  }\n\n  showQRCode() {\n    const data = {\n      jwt: this.getJWT(this.item),\n      expiration: this.getEnrollmentExpiration(this.item),\n      qrCodeSize: 500,\n      identity: this.item,\n      qrOnly: true\n    };\n    this.dialogRef = this.dialogForm.open(QrCodeComponent, {\n      data: data,\n      autoFocus: false,\n    });\n  }\n\n  refresh(params: ICellRendererParams<any>): boolean {\n    this.cellParams = params;\n    this.item = params.data;\n    return true;\n  }\n}\n","@if (hasEnrolmentToken && !tokenExpired) {\n  <div>\n    <span class=\"cert\" (click)=\"downloadCert()\"></span>\n    @if (!item.enrollmentJwt) {\n      <span class=\"qr icon-qr\" (click)=\"showQRCode()\"></span>\n    }\n  </div>\n}\n@if (hasEnrolmentToken && tokenExpired) {\n  <div>\n    <span>Enrollment Expired</span>\n  </div>\n}\n@if (!hasEnrolmentToken) {\n  <div>\n    --\n  </div>\n}","import { Injectable } from '@angular/core';\nimport _ from \"lodash\";\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class DataTableService {\n  tableId;\n  gridObj;\n\n  constructor() { }\n\n  refreshCells(gridObj, rowData) {\n    if (!gridObj) {\n      return;\n    }\n    const dataChanged = !_.isEqual(rowData?.previousValue, rowData?.currentValue);\n    if (dataChanged) {\n      gridObj.api.zitiAllToggled = !_.isEmpty(rowData) && _.every(rowData, {selected: true});\n      gridObj.api.refreshCells({force: true});\n    }\n  }\n\n  pinColumn(column, pinned) {\n    this.gridObj.api.setColumnPinned(column, pinned);\n  }\n  resizeGridColumns(event = {}) {\n    if (!this.gridObj) {\n      return;\n    }\n    _.defer(() => {\n      this.gridObj.api.sizeColumnsToFit();\n    });\n  }\n  saveColumnState() {\n    const tableState = this.gridObj.api.getColumnState();\n    const tableStateCookie = JSON.stringify(tableState);\n    localStorage.setItem(`ziti_${this.tableId}_table_state`, tableStateCookie);\n  }\n\n  onColumnsResized(column) {\n    this.saveColumnWidths(column);\n  }\n  private saveColumnWidths(column) {\n    if (!column) {\n      return;\n    }\n    const columnId = column.colId;\n    const columnWidth = column.actualWidth;\n    let colWidthsCookie = localStorage.getItem(`ziti_${this.tableId}_column_widths`);\n    let colWidths: any = {};\n    if (!_.isEmpty(colWidthsCookie)) {\n      colWidths = JSON.parse(colWidthsCookie);\n    }\n    colWidths[columnId] = columnWidth;\n    colWidthsCookie = JSON.stringify(colWidths);\n    localStorage.setItem(`ziti_${this.tableId}_column_widths`, colWidthsCookie);\n\n    let tableStateCookie = localStorage.getItem(`ziti_${this.tableId}_table_state`);\n    let tableState;\n    if (_.isEmpty(tableStateCookie)) {\n      tableState = this.gridObj.api.getColumnState();\n    } else {\n      tableState = JSON.parse(tableStateCookie);\n    }\n    _.forEach(tableState, (column) => {\n      if (columnId === column.colId) {\n        column.suppressSizeToFit = true;\n        column.width = columnWidth;\n      }\n    });\n    tableStateCookie = JSON.stringify(tableState);\n    localStorage.setItem(`ziti_${this.tableId}_table_state`, tableStateCookie);\n    _.forEach(this.gridObj.api?.columnModel?.columnDefs, (colDef) => {\n      if (colDef.colId === columnId) {\n        colDef.suppressSizeToFit = true;\n      }\n    });\n  }\n  getRowNodeId(row) {\n    return row?.data?.id ? row?.data?.id : row?.data?.name ? row?.data?.name : 'new_row_' + row?.data?.itemIndex;\n  }\n\n  resetCookieConfig() {\n    localStorage.removeItem(`ziti_${this.tableId}_table_state`);\n    localStorage.removeItem(`ziti_${this.tableId}_column_widths`);\n  }\n  isServerSideGroup = function (dataItem) {\n    return _.get(dataItem, 'processTree', []).length === 1;\n  };\n  getServerSideGroupKey = function (dataItem) {\n    return dataItem.processId;\n  };\n  getDataPath (data) {\n    return data.processTree;\n  };\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\nimport {debounce, isNumber} from \"lodash\";\nimport {DataTableFilterService, FilterObj} from \"../data-table-filter.service\";\n\n@Component({\n    selector: 'lib-table-filter-bar',\n    templateUrl: './filter-bar.component.html',\n    styleUrls: ['./filter-bar.component.scss'],\n    standalone: false\n})\nexport class FilterBarComponent {\n\n  _filters = [];\n\n  @Input() filterName: string = 'name';\n  @Input() filterColumn: string = 'name';\n\n  @Input() startCount: string = '-';\n  @Input() endCount: string = '-';\n  @Input() totalCount: string = '-';\n  @Input() currentPage: number = 1;\n\n  filtering = false;\n  filterString = '';\n  inputChangedDebounced = debounce(this.inputChanged.bind(this), 400);\n\n  constructor(public filterService: DataTableFilterService) {\n    this.filterService.filtersChanged.subscribe(filters => {\n      this._filters = filters.filter((filter: any) => {\n        return filter.hidden !== true;\n      });\n      let tmp = '';\n      for (let idx = 0; idx < filters.length; idx++) {\n        if (filters[idx].columnId === this.filterColumn) {\n          tmp = filters[idx].value;\n          break;\n        }\n      }\n      this.filterString = tmp;\n    });\n    this.filterService.filtering.subscribe((filtering) => {\n      this.filtering = filtering;\n    });\n  }\n\n  nextPage() {\n    this.currentPage++;\n    this.filterService.changePage(this.currentPage);\n  }\n\n  prevPage() {\n    this.currentPage--;\n    this.filterService.changePage(this.currentPage);\n  }\n\n  get nextDisabled() {\n    if (!isNumber(this.totalCount) || !isNumber(this.endCount) || this.filtering) {\n      return true;\n    }\n    const total: any = Number.parseInt(this.totalCount);\n    const end: any = Number.parseInt(this.endCount);\n    return end >= total;\n  }\n\n  get prevDisabled() {\n    if (!isNumber(this.startCount) || !isNumber(this.totalCount) || this.filtering) {\n      return true;\n    }\n    const start = Number.parseInt(this.startCount, 10);\n    return start <= 1;\n  }\n\n  inputChanged() {\n    this.currentPage = 1;\n    this.filterService.currentPage = this.currentPage;\n    const filterObj: FilterObj = {\n      filterName: this.filterName,\n      columnId: this.filterColumn,\n      value: this.filterString,\n      label: this.filterString,\n    };\n    this.filterService.updateFilter(filterObj)\n  }\n\n\n  removeFilter(filterObj: FilterObj) {\n    this.filterService.removeFilter(filterObj);\n  }\n}\n","<div class=\"filter-bar-container filters\">\n  <input\n    id=\"SearchFilter\"\n    data-defined=\"search\"\n    type=\"text\"\n    class=\"search\"\n    placeholder=\"Type to Filter\"\n    (keyup)=\"inputChangedDebounced()\"\n    [(ngModel)]=\"filterString\"\n    />\n  <div class=\"searchButton icon-search\"></div>\n  <div class=\"filtered-columns-list\" id=\"ColumnFilterContainer\">\n    @for (filter of _filters; track filter) {\n      <div\n        (click)=\"removeFilter(filter)\"\n        class=\"filtered-column-item ag-dnd-ghost ag-unselectable ag-theme-alpine\"\n        id=\"ColumnVisibility_{{ filter.filterName }}\"\n        title=\"Remove filter\"\n        >\n        <span class=\"ag-dnd-ghost-icon\">\n          <span class=\"ag-icon ag-icon-filter\"></span>\n        </span>\n        <div class=\"ag-dnd-ghost-label\">{{ filter.filterName }}: {{ filter.label }}</div>\n      </div>\n    }\n  </div>\n  <div class=\"counters\"><span id=\"Start\">{{startCount}}</span>-<span id=\"End\">{{endCount}}</span> of <span id=\"Total\">{{totalCount}}</span></div>\n  <div class=\"navigate prev icon-prev\" [ngClass]=\"{disabled: prevDisabled}\" (click)=\"prevPage()\"></div>\n  <div class=\"navigate next icon-next\" [ngClass]=\"{disabled: nextDisabled}\" (click)=\"nextPage()\"></div>\n</div>\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\n\n@Component({\n    selector: 'lib-table-hidden-columns-bar',\n    templateUrl: './hidden-columns-bar.component.html',\n    styleUrls: ['./hidden-columns-bar.component.scss'],\n    standalone: false\n})\nexport class HiddenColumnsBarComponent {\n\n  @Input() hiddenColumns: any;\n  @Output() columnVisibilityChanged = new EventEmitter();\n\n  setColumnVisibilityColumn(column, visible) {\n    const event = {\n      column,\n      visible\n    };\n    this.columnVisibilityChanged.emit(event);\n  }\n}\n","<div class=\"hidden-columns-bar-container\">\n  <div class=\"hidden-columns-list\" id=\"ColumnVisibilityHeader\">\n    @for (col of hiddenColumns; track col) {\n      <div\n        (click)=\"setColumnVisibilityColumn(col, true)\"\n        class=\"hidden-column-item ag-dnd-ghost ag-unselectable ag-theme-alpine\"\n        id=\"ColumnVisibility_{{ col.headerName }}\"\n        title=\"Show column\"\n        >\n        <span class=\"ag-dnd-ghost-icon\">\n          <span class=\"ag-icon ag-icon-eye-slash\"></span>\n        </span>\n        <div class=\"ag-dnd-ghost-label\">{{ col.headerName }}</div>\n      </div>\n    }\n  </div>\n</div>","import {Component, EventEmitter, Input, OnChanges, Output} from '@angular/core';\n\n@Component({\n    selector: 'lib-no-items',\n    templateUrl: './no-items.component.html',\n    styleUrls: ['./no-items.component.scss'],\n    standalone: false\n})\n\nexport class NoItemsComponent implements OnChanges {\n  @Input() image = 'No_Gateways';\n  @Input() typeName = '';\n  @Input() isEmpty = false;\n  @Input() hasAdd = true;\n  @Input() hiddenResults = false;\n  @Input() isLoading = false;\n  @Input() readonly = false;\n  @Input() accessDenied = false;\n  background;\n  @Output() clickEmit = new EventEmitter<any>();\n  @Output() refresh = new EventEmitter<any>();\n\n  constructor() {}\n\n  ngOnChanges() {\n    this.background = {\n      'background-image': 'url(assets/svgs/' + this.image + '.svg)',\n    };\n  }\n\n  iconClick() {\n    this.clickEmit.emit();\n  }\n}\n","<div [hidden]=\"!isEmpty || isLoading\" class=\"noarea\" id=\"NoArea\">\n  <div (click)=\"iconClick()\">\n    <div [ngStyle]=\"background\" class=\"icon\"></div>\n    <div class=\"title\">\n      @if (accessDenied) {\n        You do not have permission to view {{ typeName }}.\n      } @else {\n        This network currently has no {{ typeName }} to display.<br/>\n        <span [hidden]=\"!hasAdd || readonly\"\n          >Tap on the <span class=\"addExample\"></span> to add one.</span\n        >\n      }\n    </div>\n  </div>\n</div>\n","import {AfterViewInit, Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild} from '@angular/core';\n\n@Component({\n    selector: 'lib-tag-selector',\n    templateUrl: './tag-selector.component.html',\n    styleUrls: ['./tag-selector.component.scss'],\n    standalone: false\n})\nexport class TagSelectorComponent implements AfterViewInit {\n  _availableRoleAttributes: any[] = [];\n  _availableNamedAttributes: any[] = [];\n\n  @Input() placeholder = 'Select';\n  @Input() disableField = false;\n  @Input() disableCreate = false;\n  @Input() hideOption = '';\n  @Input() isLoading = false;\n  @Input() errorMessage = '';\n  @Input() focusOnInit = false;\n  @Input() namedAttributesServerFiltered = false;\n  @Output() addRoleAttribute = new EventEmitter<any>();\n  @Output() addNamedAttribute = new EventEmitter<any>();\n  @Output() roleAttributeRemoved = new EventEmitter<any>();\n  @Output() namedAttributeRemoved = new EventEmitter<any>();\n  @Output() selectedRoleAttributesChange = new EventEmitter<any>();\n  @Output() selectedNamedAttributesChange = new EventEmitter<any>();\n  @Output() filterChange = new EventEmitter<any>();\n\n  hideSelect = true;\n  displayedRoleOptions: any[] = [];\n  displayedNamedOptions: any[] = [];\n  filterString = '';\n  _hashAttributes = {};\n\n  @ViewChild('search') search: ElementRef;\n  @ViewChild('dropdownWrapper') dropdownWrapper: ElementRef;\n\n  constructor() {\n  }\n\n  ngAfterViewInit() {\n    if (this.focusOnInit) {\n        this.search.nativeElement.focus();\n    }\n  }\n\n  _selectedRoleAttributes: any[] = [];\n\n  @Input() set selectedRoleAttributes(attrs: any) {\n    if (attrs) {\n      this._selectedRoleAttributes = attrs;\n      this._filterAttributes();\n    }\n  }\n\n  _selectedNamedAttributes: any[] = [];\n\n  @Input() set selectedNamedAttributes(attrs: any) {\n    if (attrs) {\n      this._selectedNamedAttributes = attrs;\n      this._filterAttributes();\n    }\n  }\n\n  _hasError = false;\n\n  @Input() set hasError(value: boolean) {\n    this._hasError = value;\n  }\n\n  @Input() set availableRoleAttributes(attrs: any) {\n    if (attrs) {\n      this._availableRoleAttributes = attrs;\n      this._filterAttributes();\n    }\n  }\n\n  @Input() set availableNamedAttributes(attrs: any) {\n    if (attrs) {\n      this._availableNamedAttributes = attrs;\n      this._filterAttributes();\n    }\n  }\n\n  isSelected(item: any) {\n    return this.isAttributeSelected(item);\n  }\n\n  addSelectedRoleAttribute(item: any) {\n    if (!this.isAttributeSelected(item)) {\n      this.addRoleAttribute.emit(item);\n      this._selectedRoleAttributes.push(item);\n      this.selectedRoleAttributesChange.emit(this._selectedRoleAttributes);\n      this.hide();\n    }\n  }\n\n  addSelectedNamedAttribute(item: any) {\n    if (!this.isAttributeSelected(item)) {\n      this.addNamedAttribute.emit(item);\n      this._selectedNamedAttributes.push(item);\n      this.selectedNamedAttributesChange.emit(this._selectedNamedAttributes);\n      this.hide();\n    }\n  }\n\n  isAttributeSelected(attribute) {\n    if(!attribute || attribute.length <= 0) {\n      return false;\n    }\n    if (attribute.charAt(0) === '#' || attribute.charAt(0) === '@') {\n      attribute = attribute.substring(1);\n    }\n    let selected = false;\n    this._selectedRoleAttributes.forEach((attr) => {\n      if(attr === attribute) {\n        selected = true;\n      }\n    });\n    this._selectedNamedAttributes.forEach((attr) => {\n      if(attr === attribute) {\n        selected = true;\n      }\n    });\n    return selected;\n  }\n\n  removeRoleAttribute(item: any) {\n    if (!this.disableField) {\n      this._selectedRoleAttributes = this._selectedRoleAttributes.filter((attr) => {\n        return attr !== item;\n      });\n      this.selectedRoleAttributesChange.emit(this._selectedRoleAttributes);\n      this.roleAttributeRemoved.emit(item);\n      this.hide();\n    }\n  }\n\n  removeNamedAttribute(item: any) {\n    if (!this.disableField) {\n      this._selectedNamedAttributes = this._selectedNamedAttributes.filter((attr) => {\n        return attr !== item;\n      });\n      this.selectedNamedAttributesChange.emit(this._selectedNamedAttributes);\n      this.namedAttributeRemoved.emit(item);\n      this.hide();\n    }\n  }\n\n  inputFocus() {\n    this.hideSelect = false;\n  }\n\n  inputFocusOut() {\n    this.hideSelect = true;\n  }\n\n  toggleSelect() {\n    if (!this.disableField) {\n      this.hideSelect = !this.hideSelect;\n    }\n  }\n\n  openSelect() {\n    if (!this.disableField) {\n      this.hideSelect = false;\n    }\n  }\n\n  hide() {\n    this.hideSelect = true;\n  }\n\n  handleKeyUp($event: KeyboardEvent, filterString: string) {\n    switch ($event.key) {\n      case 'Enter':\n        this.addNewAttribute(filterString);\n        $event.stopPropagation();\n        $event.preventDefault();\n        break;\n      case 'Escape':\n        this.hide();\n        this.search.nativeElement.blur();\n        this.dropdownWrapper.nativeElement.focus();\n        $event.stopPropagation();\n        $event.preventDefault();\n        break;\n      default:\n        this.applyFilter();\n    }\n    this.filterChange.emit(filterString);\n  }\n\n  handleKeyDown($event: KeyboardEvent) {\n    switch ($event.key) {\n      case 'Tab':\n        this.toggleSelect();\n        this.filterString = '';\n        break;\n      default:\n    }\n  }\n\n  applyFilter = () => {\n    this._hasError = false;\n    this._filterAttributes();\n  };\n\n  // update the filter on mouse up event\n  // this is used for the specific case where the user clears the filter via the x button\n  applyFilterMouseUp() {\n    setTimeout(() => {\n      if (this.filterString === '') {\n        this._filterAttributes();\n      }\n    }, 50);\n  }\n\n  _filterAttributes() {\n    let filteredAvailableRoleAttributes: any[] = [];\n    let filteredAvailableNamedAttributes: any[] = [];\n    if (this.filterString) {\n      const filterLower = this.filterString.toLowerCase();\n      filteredAvailableRoleAttributes = this._availableRoleAttributes.filter((attr) => {\n        return attr.toLowerCase().indexOf(filterLower) >= 0\n      });\n      filteredAvailableNamedAttributes = this.namedAttributesServerFiltered\n        ? this._availableNamedAttributes\n        : this._availableNamedAttributes.filter((attr) => attr.toLowerCase().indexOf(filterLower) >= 0);\n    } else {\n      filteredAvailableRoleAttributes = this._availableRoleAttributes;\n      filteredAvailableNamedAttributes = this._availableNamedAttributes;\n    }\n\n    this.displayedRoleOptions = filteredAvailableRoleAttributes;\n    this.displayedNamedOptions = filteredAvailableNamedAttributes;\n  }\n\n  addNewAttribute(attribute: string) {\n    if (!this.disableCreate) {\n      this._hasError = false;\n      if (attribute !== '') {\n        let reference = attribute.charAt(0);\n\n        if (reference === '#' || reference === '@') {\n          attribute = attribute.substring(1);\n        } else {\n          reference = '#';\n        }\n\n        attribute = `${reference}${attribute}`;\n        attribute = attribute.trim();\n\n        if (!this.isAttributeSelected(attribute)) {\n          attribute = attribute.substring(1);\n          if (reference === '@') {\n            this.addSelectedNamedAttribute(attribute);\n            this.addRoleAttribute.emit(attribute);\n          } else {\n            this.addSelectedRoleAttribute(attribute);\n            this.addNamedAttribute.emit(attribute);\n          }\n        } else {\n          this.filterString = '';\n          return;\n        }\n      }\n      this.filterString = '';\n      this.hide();\n    }\n  }\n\n  get isNothingSelected() {\n    return this._selectedRoleAttributes?.length <= 0 && this._selectedNamedAttributes?.length <= 0;\n  }\n\n  nameSort = (a: any, b: any) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0);\n}\n","<span (clickOutside)=\"hide()\" [ngClass]=\"{ readOnly: disableField }\" class=\"clickOutside fullWidth tagsSelector\" >\n  <span\n    class=\"select2 select2-container select2-container--default select2-container--below select2-container--focus\"\n    dir=\"ltr\"\n    >\n    <span class=\"selection\">\n      <span\n        [ngClass]=\"{ 'select2-selection-focus': !hideSelect, tagError: _hasError }\"\n        aria-expanded=\"false\"\n        aria-haspopup=\"true\"\n        class=\"select2-selection select2-selection--multiple\"\n        role=\"combobox\"\n        tabindex=\"-1\"\n        >\n        <input\n          (focus)=\"inputFocus()\"\n          (keydown)=\"handleKeyDown($event);\"\n          (keyup)=\"handleKeyUp($event, filterString);\"\n          (mouseup)=\"applyFilterMouseUp()\"\n          [(ngModel)]=\"filterString\"\n          [disabled]=\"disableField\"\n          [ngClass]=\"{ empty: isNothingSelected, tagError: _hasError }\"\n          aria-autocomplete=\"list\"\n          autocapitalize=\"off\"\n          autocomplete=\"off\"\n          autocorrect=\"off\"\n          class=\"select2-search__field\"\n          placeholder=\"{{disableField ? (isNothingSelected ? 'Nothing selected' : '') : placeholder}}\"\n          role=\"textbox\"\n          spellcheck=\"false\"\n          tabindex=\"0\"\n          type=\"search\"\n          #search\n          />\n        @if (isLoading) {\n          <span class=\"spinner\"></span>\n        }\n\n        <ul\n          (click)=\"openSelect()\"\n          [ngClass]=\"{ error: _hasError, readOnly: disableField, empty: isNothingSelected }\"\n          class=\"select2-selection__rendered\"\n          >\n          @for (item of _selectedRoleAttributes; track item) {\n            <li\n              (click)=\"$event.stopPropagation()\"\n              [hidden]=\"item === this.hideOption\"\n              class=\"hashtag select2-selection__choice\"\n              title=\"#{{ item }}\"\n              >\n              <span\n                (click)=\"removeRoleAttribute(item); $event.stopPropagation()\"\n                class=\"select2-selection__choice__remove\"\n                role=\"presentation\"\n                >×</span\n                ><span class=\"select2-selection__choice__text\">#{{ item }}</span>\n              </li>\n            }\n            @for (item of _selectedNamedAttributes; track item) {\n              <li\n                (click)=\"$event.stopPropagation()\"\n                [hidden]=\"item === this.hideOption\"\n                class=\"select2-selection_choice_item\"\n                >\n                <div class=\"attag select2-selection__choice\" title=\"@{{ item }}\">\n                  <span\n                    class=\"select2-selection__choice__remove\"\n                    role=\"presentation\"\n                    >×</span\n                    ><span class=\"select2-selection__choice__text\">&#64;{{ item }}</span>\n                  </div>\n                  <div class=\"tag-name select2-selection__choice\" title=\"@{{ item }}\">\n                    <span\n                      (click)=\"removeNamedAttribute(item); $event.stopPropagation()\"\n                      class=\"select2-selection__choice__remove\"\n                      role=\"presentation\"\n                      >×</span\n                      ><span class=\"select2-selection__choice__text\">&#64;{{ item }}</span>\n                    </div>\n                  </li>\n                }\n              </ul>\n            </span>\n          </span>\n          <span aria-hidden=\"true\" class=\"dropdown-wrapper\" tabindex=\"-1\" #dropdownWrapper></span>\n        </span>\n        @if (_hasError) {\n          <span class=\"err\">\n            {{ errorMessage }}\n          </span>\n        }\n\n        @if (!hideSelect) {\n          <span\n            [ngClass]=\"{ withBorder: !hideSelect }\"\n            class=\"nf-select2-dropdown select2-dropdown--below\"\n            dir=\"ltr\"\n            >\n            <span class=\"select2-results\">\n              <ul\n                aria-expanded=\"true\"\n                aria-hidden=\"false\"\n                aria-multiselectable=\"true\"\n                class=\"select2-results__options\"\n                role=\"tree\"\n                >\n                <li\n                  (click)=\"addNewAttribute(filterString)\"\n                  [hidden]=\"filterString === '' || isAttributeSelected(filterString)\"\n                  aria-selected=\"false\"\n                  class=\"select2-results__option hashtag\"\n                  role=\"treeitem\"\n                  title=\"{{ filterString }} (New Attribute)\"\n                  >\n                  {{ filterString }} (New Attribute)\n                </li>\n                @for (option of displayedRoleOptions; track option) {\n                  <li\n                    (click)=\"addSelectedRoleAttribute(option)\"\n                    [hidden]=\"option === this.hideOption || isSelected(option)\"\n                    aria-selected=\"false\"\n                    class=\"hashtag select2-results__option\"\n                    role=\"treeitem\"\n                    >\n                    #{{ option }}\n                  </li>\n                }\n                @for (option of displayedNamedOptions; track option) {\n                  <li\n                    (click)=\"addSelectedNamedAttribute(option)\"\n                    [hidden]=\"option === this.hideOption || isSelected(option)\"\n                    aria-selected=\"false\"\n                    >\n                    <div class=\"attag select2-results__option\" title=\"@{{ option }}\" role=\"treeitem\">\n                      &#64;{{ option }}\n                    </div>\n                    <div class=\"tag-name select2-results__option\" title=\"@{{ option }}\" role=\"treeitem\">\n                      &#64;{{ option }}\n                    </div>\n                  </li>\n                }\n              </ul>\n            </span>\n          </span>\n        }\n      </span>\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnInit,\n  Output,\n  ViewChild\n} from '@angular/core';\n\n// Import the resized event model\nimport _ from 'lodash';\nimport moment from 'moment'\nimport { MatDateRangePicker } from '@angular/material/datepicker';\nimport { DateRangeQuickHeaderComponent } from '../date-range-quick-header/date-range-quick-header.component';\nimport { DateRangeQuickHeaderService } from '../date-range-quick-header/date-range-quick-header.service';\n\nimport {TableColumnDefaultComponent} from \"./column-headers/table-column-default/table-column-default.component\";\nimport {TableColumnSelectComponent} from \"./column-headers/table-column-select/table-column-select.component\";\nimport {TableColumnMenuComponent} from \"./column-headers/table-column-menu/table-column-menu.component\";\nimport {TableCellSelectComponent} from \"./cells/table-cell-select/table-cell-select.component\";\nimport {TableCellMenuComponent} from \"./cells/table-cell-menu/table-cell-menu.component\";\nimport {DataTableService} from \"./data-table.service\";\nimport {TableCellTokenComponent} from \"./cells/table-cell-token/table-cell-token.component\";\nimport {DataTableFilterService, FilterObj} from \"./data-table-filter.service\";\nimport {Subscription} from \"rxjs\";\n\n@Component({\n    selector: 'lib-data-table',\n    templateUrl: './data-table.component.html',\n    styleUrls: ['./data-table.component.scss'],\n    standalone: false,\n    providers: [DateRangeQuickHeaderService],\n})\nexport class DataTableComponent implements OnChanges, OnInit {\n  @Input() rowData: any;\n  @Input() expandRowData: any;\n  @Input() collapseRowData: any;\n  @Input() rowValidation: any;\n  // @Input() columnFilters: any;\n  @Input() isTimeSearchAvailable: boolean;\n  @Input() isLoading: any;\n  @Input() set tableId( id: string) {\n    this.svc.tableId = id;\n    this.updateEntityTypeLabel()\n  }\n  @Input() options = {noSelect: false, noMenu: false};\n  @Input() validateService: any;\n  @Input() rowsToggled: any;\n  @Input() tableRefreshCount: any;\n  @Input() set view(value: any) {\n    this._view = value;\n  }\n  @Input() serverSideDataSource: any;\n  @Input() allowDownload: boolean;\n  // @Input() filters: any;\n  @Input() startCount: any;\n  @Input() endCount: any;\n  @Input() totalCount: any;\n  @Input() emptyMsg: any;\n  @Input() filterApplied = false;\n  @Input() menuItems: any = [];\n  @Input() headerActions: any = [];\n  @Input() noItemsClass: any = 'background-image: url(\"assets/svgs/No_Clients.svg\")';\n  @Input() entityTypeName = 'Identities';\n  @Input() showNoItemsAdd = true;\n  /** When true, empty-state copy does not prompt to add (e.g. admin_readonly / no create permission). */\n  @Input() noItemsReadonly = false;\n  /** When true, shows \"no permission to view\" message instead of the table. */\n  @Input() accessDenied = false;\n  @Input() currentPage = 1;\n  @Input() noItemsImage = 'nodata';\n  @Input() rowHeight = this.remToPx(3.125);\n  @Input() filterName = 'name';\n  @Input() filterColumn = 'name';\n  @Output() actionRequested = new EventEmitter<{ action: string; item?: any }>();\n  // @Output() filterChanged = new EventEmitter();\n  @Output() gridReady = new EventEmitter();\n  @Output() dragStart = new EventEmitter();\n  @Output() dragLeave = new EventEmitter();\n  @Output() pageChanged = new EventEmitter();\n\n  _view = 'list';\n  frameworkComponents;\n  gridModules;\n  gridOptions;\n  visibleColumns;\n  hiddenColumns;\n  visibleColumnIds;\n  hiddenColumnIds;\n  mergedColumnDefinitions;\n  openMenu;\n  openHeaderMenu;\n  filterOptions: any = [];\n  showFilterOptions;\n  showDateTimePicker;\n  /** When true, picker was opened from header filter icon: show only calendar, position at icon */\n  datePickerFromHeader = false;\n  showTagSelector;\n  appendAttributeHash = true;\n  attributesColumn = '';\n  dateTimeColumn = '';\n  dateTimeFilterLabel = '';\n  selectedRange = '';\n  dateValue;\n  dateRangeStart: Date | null = null;\n  dateRangeEnd: Date | null = null;\n  menuLeft;\n  menuTop;\n  gridRendered;\n  resizeHandlerInit = false;\n  resizeGridColumnsDebounced;\n  selectedItem: any = {\n    actionList: [],\n  };\n  entityTypeLabel = ''\n  columnFilters:any = {};\n  roleAttributes: any[] = [];\n  namedAttributes: any[] = [];\n  selectedRoleAttributes: any[] = [];\n  selectedNamedAttributes: any[] = [];\n  // appliedFilters = [];\n  autoGroupColumnDef;\n  currentHeaderComponentParams: any = {};\n  subscription: Subscription = new Subscription();\n  rangeHeader = DateRangeQuickHeaderComponent;\n  private readonly dateRangeLabelMap: Record<string, string> = {\n    hour: 'Last Hour',\n    day: 'Last Day',\n    week: 'Last Week',\n    month: 'Last Month',\n    custom: 'Custom',\n  };\n\n  public menuColumnDefinition = {\n    colId: 'ziti-ag-menu',\n    field: 'ziti-ag-menu',\n    resizable: false,\n    width: this.remToPx(3.125),\n    sortable: false,\n    lockPosition: true,\n    suppressMovable: true,\n    headerClass: 'menuHeader',\n    cellClass: 'tCol cellMenu',\n    cellRenderer: 'cellMenuComponent',\n    cellRendererParams: {\n      openMenu: ($event, item) => {\n        this.openActionMenu($event, item);\n      },\n      closeMenu: (event) => {\n        this.closeActionMenu();\n      },\n    },\n    suppressSizeToFit: true,\n    pinned: 'right',\n    headerComponent: TableColumnMenuComponent,\n    headerComponentParams: {\n      openHeaderMenu: ($event) => {\n        this.openHeaderActionMenu($event);\n      },\n      closeMenu: (event) => {\n        this.closeActionMenu();\n      },\n    },\n  };\n  private _initialColumnDefs;\n  private _refreshCellsDebounced;\n  private _onColumnsResizedDebounced;\n  private _saveColumnStateDebounced;\n\n  private selectColumnDefinition = {\n    colId: 'ziti-ag-selected',\n    field: 'ziti-ag-selected',\n    suppressSizeToFit: true,\n    lockPosition: true,\n    suppressMovable: true,\n    resizable: false,\n    pinned: 'left',\n    width: this.remToPx(3.75),\n    sortable: false,\n    headerClass: 'selectHeader',\n    cellClass: 'tCol',\n    cellRenderer: 'cellSelectComponent',\n    cellRendererParams: {\n      toggleItem: (item) => {\n        item.selected = !item.selected;\n        this.svc.gridObj.api.zitiAllToggled = _.every(this.rowData, {selected: true});\n        _.defer(() => {\n          this.svc.gridObj.api.refreshCells({force: true});\n        });\n        this.actionRequested.emit({action: 'toggleItem', item: item});\n      },\n    },\n    headerComponent: TableColumnSelectComponent,\n    headerComponentParams: {\n      toggleAll: (selected: boolean) => {\n        if (!this.svc.gridObj) {\n          return;\n        }\n        _.forEach(this.rowData, (row) => {\n          row.selected = selected;\n        });\n        this.actionRequested.emit({action: 'toggleAll'});\n        _.defer(() => {\n          this.svc.gridObj.api.refreshCells({force: true});\n        });\n      },\n    },\n  };\n\n  @ViewChild('rangePicker') rangePicker?: MatDateRangePicker<Date>;\n  @ViewChild('contextMenu') contextMenu;\n  @ViewChild('tableContainer') tableContainer: ElementRef;\n\n  constructor(\n    public svc: DataTableService,\n    private tableFilterService: DataTableFilterService,\n    private dateHeaderService: DateRangeQuickHeaderService\n  ) {\n    this.resizeGridColumnsDebounced = _.debounce(this.svc.resizeGridColumns.bind(this.svc), 20, {leading: true});\n    this._refreshCellsDebounced = _.debounce(this.svc.refreshCells.bind(this.svc), 50);\n    this._onColumnsResizedDebounced = _.debounce(this.svc.onColumnsResized.bind(this.svc), 400);\n    this._saveColumnStateDebounced = _.debounce(this.svc.saveColumnState.bind(this.svc), 400);\n  }\n\n  hideMenuItem(menuItem, selectedItem) {\n      if (_.isFunction(menuItem.hidden)) {\n          return menuItem.hidden(selectedItem);\n      } else if (_.isBoolean(menuItem.hidden)) {\n          return menuItem.hidden;\n      } else {\n          return !selectedItem.actionList.includes(menuItem.action);\n      }\n  }\n\n  private _columnDefinitions;\n\n  @Input() set columnDefinitions(value: any) {\n    this._columnDefinitions = value;\n\n  }\n\n  get showFilterBar(): boolean {\n    return this._view !== 'upload' && this._view !== 'process';\n  }\n\n  @Input() set refreshCount(value: number) {\n    if (!this.svc.gridObj) {\n      return;\n    }\n    _.defer(() => {\n      this.svc.gridObj.api.redrawRows();\n      this.svc.gridObj.api.refreshCells({force: true});\n    });\n  }\n\n  get showTable() {\n    const _showTable = this.isLoading || this.filterApplied || this.rowData?.length > 0;\n    if (_showTable && !this.resizeHandlerInit) {\n      this._initGridResizeHandler();\n    }\n    return _showTable;\n  }\n\n  ngOnInit() {\n    this.subscription.add(\n      this.dateHeaderService.rangeClick$.subscribe((range) => {\n        this.setDateRangeFilter(range);\n      })\n    );\n\n    this.frameworkComponents = {\n      cellSelectComponent: TableCellSelectComponent,\n      cellMenuComponent: TableCellMenuComponent,\n      cellTokenComponent: TableCellTokenComponent,\n      headerCellSelectComponent: TableColumnSelectComponent,\n      headerHeaderMenuComponent: TableColumnMenuComponent,\n      headerDefaultComponent: TableColumnDefaultComponent,\n    };\n\n    this.autoGroupColumnDef = {\n      field: 'processTree',\n      headerName: 'Process Name',\n      cellRenderer: 'cellResourceStatusComponent',\n      resizable: true,\n      cellRendererParams: {resourceType: 'process-execution'},\n      headerComponentFramework: TableColumnDefaultComponent,\n    };\n\n    if (this._columnDefinitions) {\n      this._addColumnEvents();\n      this._addDefaultColumnDefs();\n      this._storeInitialColumnDefs();\n      this._setColumnWidths();\n      this._setColumnOrderAndVisibility();\n      this._initColumnVisibility();\n      this._initGridOptions();\n    }\n  }\n\n  ngOnChanges(changes: any): void {\n    if (this.svc.gridObj && changes.rowData) {\n      this._refreshCellsDebounced(changes.rowData);\n    }\n  }\n\n  columnVisibilityChanged(event) {\n    this.setColumnVisibilityColumn(event?.column, event?.visible);\n  }\n\n  openActionMenu(event, item): void {\n    this.selectedItem = item;\n    this.openMenu = true;\n    _.delay(() => {\n      const height = this.contextMenu?.nativeElement?.offsetHeight || 120;\n      const windowOffset = window.innerHeight - event.clientY;\n      const menuOffset = windowOffset <= height ? height - windowOffset : 0;\n      this.menuLeft = event.clientX - 100;\n      this.menuTop = event.clientY + 5 - menuOffset;\n    }, 10);\n  }\n\n  onGridReady(params) {\n    this.gridReady.emit(params);\n  }\n\n  resetTableColumns() {\n    if (!this.svc.gridObj) {\n      return;\n    }\n    this.mergedColumnDefinitions = _.cloneDeep(this._initialColumnDefs);\n    this.svc.gridObj.api.setColumnDefs(this.mergedColumnDefinitions);\n    this.svc.resetCookieConfig();\n    this.svc.gridObj.api.resetColumnState();\n    _.defer(() => {\n      this._updateHiddenColumns();\n      this.svc.resizeGridColumns();\n    });\n  }\n\n  openHeaderActionMenu(event): void {\n    this.menuLeft = event.clientX - 150;\n    this.menuTop = event.clientY + 5;\n    _.delay(() => {\n      this.openHeaderMenu = true;\n    }, 100);\n  }\n\n  closeActionMenu(): void {\n    this.selectedItem = {\n      actionList: [],\n    };\n    this.openMenu = false;\n    this.openHeaderMenu = false;\n  }\n\n  openHeaderFilter(event, options, type, columnId, filterLabel, headerComponentParams): void {\n    this.filterOptions = options;\n    this.menuLeft = event.clientX;\n    this.menuTop = event.clientY + 10;\n    if (type === 'DATETIME') {\n      this.dateTimeColumn = columnId;\n      this.dateTimeFilterLabel = filterLabel || 'Date: ';\n      this.datePickerFromHeader = true;\n      _.delay(() => {\n        this.showDateTimePicker = true;\n      }, 10);\n      _.delay(() => {\n        this.rangePicker?.open();\n      }, 150);\n    } else if (type === 'ATTRIBUTE') {\n      this.appendAttributeHash = headerComponentParams.appendAttributeHash !== false;\n      this.attributesColumn = columnId;\n      this.roleAttributes = headerComponentParams?.getRoleAttributes();\n      this.namedAttributes = headerComponentParams?.getNamedAttributes();\n      this.selectedRoleAttributes = headerComponentParams.getSelectedRoleAttributes();\n      this.selectedNamedAttributes = headerComponentParams.getSelectedNamedAttributes();\n      this.dateTimeFilterLabel = filterLabel;\n      this.currentHeaderComponentParams = headerComponentParams;\n      _.delay(() => {\n        this.showTagSelector = true;\n      }, 100);\n    } else {\n      _.defer(() => {\n        this.showFilterOptions = true;\n      });\n    }\n  }\n\n  setDateRangeFilter(range) {\n    let startDate;\n    let label;\n    let endDate = moment();\n    let closeCalendar = true;\n    this.selectedRange = range;\n    this.dateHeaderService.setSelectedRange(range);\n    switch (range) {\n      case 'hour':\n        startDate = moment().subtract(1, 'hours');\n        label = 'Last Hour';\n        break;\n      case 'day':\n        startDate = moment().subtract(24, 'hours');\n        label = 'Last Day';\n        break;\n      case 'week':\n        startDate = moment().subtract(7, 'days');\n        label = 'Last Week';\n        break;\n      case 'month':\n        startDate = moment().subtract(1, 'month');\n        label = 'Last Month';\n        break;\n      case 'custom':\n        if (!this.dateValue) {\n          return;\n        }\n        startDate = moment(this.dateValue[0]);\n        if (this.dateValue[1] !== undefined && this.dateValue[1] !== null) {\n          endDate = moment(this.dateValue[1]);\n        }\n        label = 'Custom';\n        closeCalendar = false;\n        break;\n      default:\n        startDate = moment().subtract(24, 'hours');\n        label = 'Last Day';\n        break;\n    }\n    const startDateRange = encodeURIComponent(startDate.toISOString());\n    const endDateRange = encodeURIComponent(endDate.toISOString());\n    this.columnFilters[this.dateTimeColumn] = [startDateRange, endDateRange];\n\n    if (closeCalendar) {\n      this.rangePicker?.close();\n      if (this.datePickerFromHeader) {\n        this.showDateTimePicker = false;\n        this.datePickerFromHeader = false;\n      }\n    }\n    if (range !== 'custom') {\n      this.dateValue = [startDate.toDate(), endDate.toDate()];\n      this.dateRangeStart = this.dateValue[0];\n      this.dateRangeEnd = this.dateValue[1];\n    }\n    const filterObj: FilterObj = {\n      columnId: this.dateTimeColumn,\n      value: [startDateRange, endDateRange],\n      label: label,\n      filterName: this.dateTimeFilterLabel,\n      type: 'DATETIME'\n    };\n\n    this.tableFilterService.updateFilter(filterObj);\n  }\n\n  get dateRangeDisplayText(): string {\n    // Prefer showing the chosen dates (matches UI screenshot format).\n    if (this.dateRangeStart && this.dateRangeEnd) {\n      return `${moment(this.dateRangeStart).format('MM/DD/YYYY')} - ${moment(this.dateRangeEnd).format('MM/DD/YYYY')}`;\n    }\n    if (this.dateRangeStart) {\n      return `${moment(this.dateRangeStart).format('MM/DD/YYYY')} -`;\n    }\n    // Otherwise, quick presets show a friendly label.\n    if (this.selectedRange && this.selectedRange !== 'custom') {\n      return this.dateRangeLabelMap[this.selectedRange] ?? '';\n    }\n    return '';\n  }\n\n  tagSelectionChanged(event, isRole) {\n    let label = '';\n    let value = '';\n    if (isRole) {\n      this.selectedNamedAttributes = [];\n      if (this.selectedRoleAttributes.length > 1) {\n        this.selectedRoleAttributes = [_.last(this.selectedRoleAttributes)];\n      }\n      this.selectedRoleAttributes.forEach((attr, index) => {\n        if (index > 0) {\n          label += ', ';\n          value += ', ';\n        }\n        label += ((this.appendAttributeHash ? '#' : '') + attr);\n        value += ((this.appendAttributeHash ? '%23' : '') + attr);\n      });\n    } else {\n      this.selectedRoleAttributes = [];\n      const attrIdMap = this.currentHeaderComponentParams.getNamedAttributesMap();\n      if (this.selectedNamedAttributes.length > 1) {\n        this.selectedNamedAttributes = [_.last(this.selectedNamedAttributes)];\n      }\n      this.selectedNamedAttributes.forEach((attr, index) => {\n        if (index > 0) {\n          label += ', ';\n          value += ', ';\n        }\n        label += '@' + attr;\n        value += '%40' + attrIdMap[attr];\n      });\n    }\n    const filterObj: FilterObj = {\n      columnId: this.attributesColumn,\n      value: value,\n      label: label,\n      filterName: this.dateTimeFilterLabel,\n      type: 'ATTRIBUTE'\n    };\n    this.currentHeaderComponentParams.setSelectedRoleAttributes(this.selectedRoleAttributes);\n    this.currentHeaderComponentParams.setSelectedNamedAttributes(this.selectedNamedAttributes);\n    this.tableFilterService.updateFilter(filterObj);\n  }\n\n  applyFilter(event, filter) {\n    this.tableFilterService.updateFilter(filter);\n    this.closeHeaderFilter(event);\n  }\n\n  closeHeaderFilter(event): void {\n    this.showFilterOptions = false;\n  }\n\n  closeDateTime(event): void {\n    this.showDateTimePicker = false;\n    this.datePickerFromHeader = false;\n  }\n\n  onCustomDateRangeStartChanged(date: Date | null) {\n    this.dateRangeStart = date;\n    this.dateValue = [this.dateRangeStart, this.dateRangeEnd];\n  }\n\n  onCustomDateRangeEndChanged(date: Date | null) {\n    this.dateRangeEnd = date;\n    this.dateValue = [this.dateRangeStart, this.dateRangeEnd];\n    if (this.dateRangeStart && this.dateRangeEnd) {\n      this.setDateRangeFilter('custom');\n    }\n  }\n\n  closeTagSelector(event): void {\n    this.showTagSelector = false;\n  }\n\n  openCreate() {\n    this.actionRequested.emit({action: 'create'});\n  }\n\n  anySelected() {\n    return _.some(this.rowData, {selected: true});\n  }\n\n  showDownload() {\n    return this.allowDownload && this._view !== 'process';\n  }\n\n  _initGridResizeHandler() {\n    if (!this.tableContainer) {\n      return;\n    }\n    const observer = new ResizeObserver(entries => {\n      this.resizeGridColumnsDebounced();\n    });\n    observer.observe(this.tableContainer.nativeElement);\n    this.resizeHandlerInit = true;\n  }\n\n  _initGridOptions() {\n    this.gridOptions = {\n      pagination: false,\n      rowSelection: 'single',\n      rowClass: 'ziti-table-row',\n      rowHeight: this.rowHeight,\n      immutableData: true,\n      suppressRowClickSelection: true,\n      suppressHorizontalScroll: false,\n      stopEditingWhenGridLosesFocus: true,\n      suppressPropertyNamesCheck: true,\n      suppressNoRowsOverlay: true,\n      animateRows: true,\n      defaultColDef: {\n        sortable: false,\n        filter: false, // set filtering on for all columns\n      },\n      onRowDragMove: (params) => {\n        this.dragStart.emit(params);\n      },\n      onRowDragLeave: (params) => {\n        this.dragLeave.emit(params);\n      },\n      onRowDragEnd: () => {\n        document.querySelectorAll<HTMLElement>('.attribute-item').forEach(el => el.style.display = '');\n        document.querySelectorAll('.drag-hover').forEach(el => el.classList.remove('drag-hover'));\n        document.getElementById('ColumnVisibilityHeader')?.click();\n        document.querySelectorAll<HTMLElement>('.new-attribute-target').forEach(el => el.style.display = 'none');\n      },\n      rowClassRules: {\n        // row style function\n        'row-invalid': function (params) {\n          return _.get(params, 'data.invalid');\n        },\n        'row-copied': function (params) {\n          return _.get(params, 'data.copied');\n        },\n        'row-child-sub-process': function (params) {\n          return (\n              params.api.view === 'process' &&\n              !_.get(params, 'data.isRoot') &&\n              !_.isEmpty(_.get(params, 'data.subprocessId'))\n          );\n        },\n        'row-child': function (params) {\n          return (\n              (params.api.view === 'process' || params.api.view === 'user-roles') &&\n              !_.get(params, 'data.isRoot') &&\n              !_.isEmpty(_.get(params, 'data.parentId'))\n          );\n        },\n        'row-child-second': function (params) {\n          return (\n              params.api.view === 'process' &&\n              !_.get(params, 'data.isRoot') &&\n              _.get(params, 'data.isParallel')\n          );\n        },\n        'row-child-even': function (params) {\n          return (\n              (params.api.view === 'process' || params.api.view === 'user-roles') &&\n              _.get(params, 'data.parentIndex') % 2 > 0\n          );\n        },\n        'row-child-odd': function (params) {\n          return (\n              (params.api.view === 'process' || params.api.view === 'user-roles') &&\n              _.get(params, 'data.parentIndex') % 2 === 0\n          );\n        },\n        'row-child-warn': function (params) {\n          return params.api.view === 'process' && _.get(params, 'data.state') === 'WARNING';\n        },\n        'row-child-header': function (params) {\n          return params.api.view === 'process' && _.get(params, 'data.rowType') === 'step-header';\n        },\n        'row-role-item': function (params) {\n          return _.get(params, 'data.roleItem');\n        },\n      },\n      getRowHeight: (params) => {\n        return this.remToPx(3.125);\n      },\n      onCellEditingStopped: (eventObj) => {\n        if (!this.validateService) {\n          return;\n        }\n        const field = _.get(eventObj, 'colDef.field', '');\n        if (_.includes(field.toLowerCase(), 'attribute')) {\n          const newVal = eventObj.newValue.split(',');\n          _.set(eventObj, `data.${field}`, newVal);\n        } else {\n          _.set(eventObj, `data.${field}`, eventObj.newValue);\n        }\n        this._validateTable(eventObj);\n      },\n      getRowNodeId: (data) => data.name,\n      onBodyScroll: (scroller) => {\n        this._handleTableScroll(scroller);\n      },\n      onGridReady: (grid) => {\n        grid.api.zitiAllToggled = false;\n        grid.api.zitiHideColumn = this.setColumnVisibilityColumn.bind(this);\n        grid.api.validateTable = this._validateTable.bind(this);\n        grid.api.view = this._view;\n        grid.api.zitiRowData = this.rowData;\n        grid.api.openHeaderFilter = this.openHeaderFilter.bind(this);\n\n        // eslint-disable-next-line @typescript-eslint/no-empty-function\n        grid.api.rowsToggled = this.rowsToggled ? this.rowsToggled.bind(this) : () => {};\n        if (this.serverSideDataSource) {\n          grid.api.setServerSideDatasource(this.serverSideDataSource);\n        }\n        this.svc.gridObj = grid;\n        _.defer(this._applyColumnState.bind(this));\n      },\n      onColumnVisible: (eventObj) => {\n        if (!eventObj.column) {\n          return;\n        }\n        this.updateColumnVisibility(eventObj.column.colDef.colId, eventObj.visible);\n        if (eventObj.visible) {\n          this.svc.gridObj.api.moveColumns(\n              [eventObj.column.colDef.colId],\n              this.mergedColumnDefinitions.length - 1\n          );\n          _.defer(() => {\n            this.svc.gridObj.api.ensureColumnVisible(eventObj.column.colDef.colId);\n          });\n        }\n        this._updateGridColumns();\n        this.svc.saveColumnState();\n      },\n      onFirstDataRendered: (eventObj) => {\n        this.svc.resizeGridColumns();\n        this.gridRendered = true;\n      },\n      onColumnPinned: (eventObj) => {\n        if (!eventObj.column) {\n          return;\n        }\n        const colId = eventObj.column.colDef.colId;\n        const pinned = eventObj.pinned === 'left';\n        this.mergedColumnDefinitions = _.map(this.mergedColumnDefinitions, (colDef) => {\n          if (colDef.colId === colId) {\n            colDef.lockPosition = pinned;\n            colDef.suppressMovable = pinned;\n          }\n          return colDef;\n        });\n        this._updateGridColumns();\n        this.svc.resizeGridColumns();\n        this.svc.saveColumnState();\n      },\n      onColumnResized: (eventObj) => {\n        if (!eventObj.column || eventObj.source === 'sizeColumnsToFit') {\n          return;\n        }\n        this._onColumnsResizedDebounced(eventObj.column);\n      },\n      onColumnMoved: (eventObj) => {\n        this._saveColumnStateDebounced();\n      },\n    };\n  }\n\n  _validateTable(eventObj) {\n    this.rowData[eventObj.rowIndex] = eventObj.data;\n    _.delay(() => {\n      this.validateService(this.rowData);\n      _.delay(() => {\n        this.svc.gridObj.api.refreshCells({force: true});\n        this.svc.gridObj.api.redrawRows();\n      }, 50);\n    }, 50);\n  }\n\n  _applyColumnState() {\n    const tableStateCookie = localStorage.getItem(`ziti_${this.svc.tableId}_table_state`);\n    const tableState = JSON.parse(tableStateCookie);\n    if (tableState) {\n      this.svc.gridObj.api.applyColumnState({state: tableState});\n      this._updateHiddenColumns();\n    }\n  }\n\n  _addColumnEvents() {\n    this._columnDefinitions = _.map(this._columnDefinitions, (colDef) => {\n      colDef.pinColumn = this.svc.pinColumn.bind(this.svc);\n      colDef.cellClass = this._getCellStyle.bind(this);\n      return colDef;\n    });\n  }\n\n  _getCellStyle(params) {\n    if (!this.rowValidation || this.rowValidation.length <= 0) {\n      return '';\n    }\n    const validationResult = this.rowValidation[params.node.rowIndex];\n    if (!validationResult || !validationResult.errors) {\n      return '';\n    }\n    const field = _.get(params, 'colDef.field', '');\n    if (validationResult.errors[field]) {\n      return 'ziti-table-cell-error';\n    }\n    return '';\n  }\n  updateColumnVisibility(colId, visible) {\n    this._columnDefinitions = _.map(this._columnDefinitions, (colDef) => {\n      if (colDef.colId === colId) {\n        colDef.hide = !visible;\n      }\n      return colDef;\n    });\n    for (const colDef of this.mergedColumnDefinitions) {\n      if (colDef.colId === colId) {\n        colDef.hide = !visible;\n      }\n    }\n    this._updateHiddenColumns();\n    this.svc.resizeGridColumns();\n  }\n\n  updateEntityTypeLabel() {\n    switch(this.svc.tableId) {\n      case 'api-sessions':\n        this.entityTypeLabel = 'API Sessions';\n        break;\n      case 'auth-policies':\n        this.entityTypeLabel = 'Auth Policies';\n        break;\n      case 'certificate-authorities':\n        this.entityTypeLabel = 'Certificate Authorities';\n        break;\n      case 'ext-jwt-signers':\n        this.entityTypeLabel = 'External JWT Signers';\n        break;\n      case 'identities':\n        this.entityTypeLabel = 'Identities';\n        break;\n      case 'posture-checks':\n        this.entityTypeLabel = 'Posture Checks';\n        break;\n      case 'edge-routers':\n        this.entityTypeLabel = 'Edge Routers';\n        break;\n      case 'services':\n        this.entityTypeLabel = 'Services';\n        break;\n      case 'configurations':\n        this.entityTypeLabel = 'Configs';\n        break;\n      case 'config-types':\n        this.entityTypeLabel = 'Config Types';\n        break;\n      case 'service-policies':\n        this.entityTypeLabel = 'Service Policies';\n        break;\n      case 'edge-router-policies':\n        this.entityTypeLabel = 'Edge Router Policies';\n        break;\n      case 'service-edge-router-policies':\n        this.entityTypeLabel = 'Service Edge Router Policies';\n        break\n      case 'sessions':\n        this.entityTypeLabel = 'Sessions';\n        break;\n      case 'terminators':\n        this.entityTypeLabel = 'Terminators';\n        break;\n      case 'transit-routers':\n        this.entityTypeLabel = 'Transit Routers';\n        break;\n    }\n  }\n\n  setColumnVisibilityColumn(column, visible) {\n    this.svc.gridObj.api.setColumnsVisible([column.colId], visible);\n    this.svc.gridObj.api.refreshHeader();\n    _.defer(() => {\n      this.updateColumnVisibility(column.colId, visible);\n    });\n  }\n\n  _updateHiddenColumns() {\n    const gridColumnDefs = this.svc.gridObj?.api?.columnModel?.gridColumns;\n    const visibleGridColumns = gridColumnDefs.filter((col) => col.visible);\n    const hiddenGridColumns = gridColumnDefs.filter((col) => !col.visible);\n    this.visibleColumns = _.map(visibleGridColumns, 'colDef');\n    this.visibleColumnIds = _.map(this.visibleColumns, 'field');\n    this.hiddenColumns = _.map(hiddenGridColumns, 'colDef');\n    this.hiddenColumnIds = _.map(this.hiddenColumns, 'field');\n  }\n\n  addHeaderMenu(columnDefs = []) {\n    columnDefs.forEach((columnDef) => {\n      if (columnDef.useHeaderMenu) {\n        columnDef.headerComponentParams = {\n          openHeaderMenu: ($event) => {\n            this.openHeaderActionMenu($event);\n          },\n          closeMenu: (event) => {\n            this.closeActionMenu();\n          },\n        };\n      }\n    });\n  }\n\n  _addDefaultColumnDefs() {\n    this.addHeaderMenu(this._columnDefinitions);\n    this.mergedColumnDefinitions = _.cloneDeep(this._columnDefinitions);\n    if (this._view === 'process') {\n      const cellParams = _.cloneDeep(this.menuColumnDefinition.cellRendererParams);\n      this.mergedColumnDefinitions[this.mergedColumnDefinitions.length - 1].cellRendererParams = _.merge(\n          this.mergedColumnDefinitions[this.mergedColumnDefinitions.length - 1].cellRendererParams,\n          cellParams\n      );\n      this.mergedColumnDefinitions[this.mergedColumnDefinitions.length - 1].headerComponentParams =\n          this.menuColumnDefinition.headerComponentParams;\n    } else if ( (this.options.noSelect && this.options.noMenu)) {\n      // Don't add any additional columns\n    } else if ( (this.options.noSelect && !this.options.noMenu)) {\n      this.mergedColumnDefinitions.push(this.menuColumnDefinition);\n    } else if ( !this.options.noSelect && this.options.noMenu) {\n      this.mergedColumnDefinitions.push(this.selectColumnDefinition);\n    }  else if (this._view !== 'upload') {\n      this.mergedColumnDefinitions.splice(0, 0, this.selectColumnDefinition);\n      this.mergedColumnDefinitions.push(this.menuColumnDefinition);\n    }\n  }\n\n  _storeInitialColumnDefs() {\n    this._initialColumnDefs = _.cloneDeep(this.mergedColumnDefinitions);\n  }\n\n  _initColumnVisibility() {\n    this.visibleColumns = this._columnDefinitions.filter((col) => !col.hide);\n    this.hiddenColumns = this._columnDefinitions.filter((col) => col.hide);\n    this.visibleColumnIds = _.map(this.visibleColumns, 'field');\n  }\n\n  _updateGridColumns() {\n    this._setColumnWidths();\n    this.svc.gridObj.api.setColumnDefs(this.mergedColumnDefinitions);\n    this.svc.gridObj.api.refreshHeader();\n  }\n\n  _setColumnWidths() {\n    if (this._view === 'upload' || this._view === 'process') {\n      return;\n    }\n    const colWidthsCookie = localStorage.getItem(`ziti_${this.svc.tableId}_column_widths`);\n    if (!_.isEmpty(colWidthsCookie)) {\n      const colWidths = JSON.parse(colWidthsCookie);\n      _.forEach(colWidths, (colWidth, colId) => {\n        _.forEach(this.mergedColumnDefinitions, (colDef) => {\n          if (colDef.colId === colId) {\n            colDef.width = colWidth;\n            colDef.suppressSizeToFit = true;\n          }\n        });\n      });\n    }\n  }\n\n  _setColumnOrderAndVisibility() {\n    if (this._view === 'upload' || this._view === 'process') {\n      return;\n    }\n    const tableStateCookie = localStorage.getItem(`ziti_${this.svc.tableId}_table_state`);\n    if (!_.isEmpty(tableStateCookie) || typeof tableStateCookie === 'undefined') {\n      const colStates = JSON.parse(tableStateCookie);\n      const columnIndexes = [];\n      _.forEach(colStates, (colState) => {\n        _.forEach(this.mergedColumnDefinitions, (colDef) => {\n          if (colDef.colId === colState.colId) {\n            columnIndexes.push(colDef);\n            colDef.hide = colState.hide;\n          }\n        });\n      });\n      _.forEach(this.mergedColumnDefinitions, (colDef) => {\n        let colFound = false;\n        _.forEach(columnIndexes, (colIndex) => {\n          if (colDef.colId === colIndex.colId) {\n            colFound = true;\n          }\n        });\n        if (!colFound) {\n          columnIndexes.push(colDef);\n        }\n      });\n      this.mergedColumnDefinitions = columnIndexes;\n    }\n  }\n\n  _handleTableScroll(scroller): void {\n    const centerCols = document.querySelector('.ag-center-cols-container') as HTMLElement;\n    const centerViewport = document.querySelector('.ag-center-cols-viewport') as HTMLElement;\n    const pinnedLeft = document.querySelector('.ag-pinned-left-cols-container') as HTMLElement;\n    const pinnedRight = document.querySelector('.ag-pinned-right-cols-container') as HTMLElement;\n    if (!centerCols || !centerViewport) {\n      return;\n    }\n    const scrollWidth = centerCols.offsetWidth;\n    const viewWidth = centerViewport.offsetWidth;\n    const scrollableWidth = scrollWidth - viewWidth;\n    if (scroller.left > 0) {\n      pinnedLeft?.classList.add('ag-pinned-left-shadow');\n    } else {\n      pinnedLeft?.classList.remove('ag-pinned-left-shadow');\n    }\n    if (scroller.left < scrollableWidth - 2) {\n      pinnedRight?.classList.add('ag-pinned-right-shadow');\n    } else {\n      pinnedRight?.classList.remove('ag-pinned-right-shadow');\n    }\n  }\n\n  remToPx(remValue) {\n    const rootFontSize: any = parseFloat(window.getComputedStyle(document.documentElement).fontSize);\n    return remValue * rootFontSize;\n  };\n}\n","@if (showTable && !accessDenied) {\n  <div #tableContainer class=\"data-table-container\">\n    <lib-table-filter-bar\n      [startCount]=\"startCount\"\n      [endCount]=\"endCount\"\n      [totalCount]=\"totalCount\"\n      [currentPage]=\"currentPage\"\n      [filterName]=\"filterName\"\n      [filterColumn]=\"filterColumn\"\n    ></lib-table-filter-bar>\n    @if (showDateTimePicker) {\n      <div\n        class=\"date-time-container data-table-date-time\"\n        [class.date-picker-from-header]=\"datePickerFromHeader\"\n        [ngStyle]=\"datePickerFromHeader ? { left: menuLeft + 'px', top: menuTop + 'px' } : {}\"\n        (clickOutside)=\"closeDateTime($event)\"\n        >\n        <div class=\"data-table-date-range-control\">\n          @if (!datePickerFromHeader) {\n            <input\n              class=\"data-table-date-range-input\"\n              [value]=\"dateRangeDisplayText\"\n              placeholder=\"Select Time Range\"\n              readonly\n              (click)=\"rangePicker.open()\"\n              />\n            <button\n              type=\"button\"\n              class=\"data-table-date-range-button\"\n              aria-label=\"Select time range\"\n              (click)=\"rangePicker.open(); $event.stopPropagation()\"\n              >\n              <i class=\"pi pi-calendar\" aria-hidden=\"true\"></i>\n            </button>\n          }\n          <!-- Keep Material range input in DOM for picker wiring + ngModel updates -->\n          <mat-date-range-input class=\"data-table-date-range-hidden\" [rangePicker]=\"rangePicker\">\n            <input\n              matStartDate\n              matInput\n              [(ngModel)]=\"dateRangeStart\"\n              (dateChange)=\"onCustomDateRangeStartChanged($event.value)\"\n              tabindex=\"-1\"\n              aria-hidden=\"true\"\n              />\n            <input\n              matEndDate\n              matInput\n              [(ngModel)]=\"dateRangeEnd\"\n              (dateChange)=\"onCustomDateRangeEndChanged($event.value)\"\n              tabindex=\"-1\"\n              aria-hidden=\"true\"\n              />\n          </mat-date-range-input>\n          <mat-date-range-picker\n            #rangePicker\n            [calendarHeaderComponent]=\"rangeHeader\"\n            panelClass=\"ziti-date-range-panel\"\n            [xPosition]=\"datePickerFromHeader ? 'start' : 'end'\"\n            [yPosition]=\"datePickerFromHeader ? 'above' : 'below'\"\n          ></mat-date-range-picker>\n        </div>\n      </div>\n    }\n    @if (gridRendered && showFilterBar) {\n      <lib-table-hidden-columns-bar\n        [hiddenColumns]=\"hiddenColumns\"\n        (columnVisibilityChanged)=\"columnVisibilityChanged($event)\"\n      ></lib-table-hidden-columns-bar>\n    }\n    <div (resize)=\"resizeGridColumnsDebounced($event)\" class=\"ziti-ag-grid\" id=\"ItemTable\">\n      <ag-grid-angular\n        #nfAgGrid\n        [columnDefs]=\"mergedColumnDefinitions\"\n        [components]=\"frameworkComponents\"\n        [getDataPath]=\"svc.getDataPath\"\n        [getRowId]=\"svc.getRowNodeId\"\n        [gridOptions]=\"gridOptions\"\n        [modules]=\"gridModules\"\n        [rowData]=\"rowData\"\n        [tooltipHideDelay]=\"20000\"\n        [tooltipShowDelay]=\"0\"\n        (gridReady)=\"onGridReady($event)\"\n        class=\"ziti-ag-grid-table ag-theme-alpine rows\"\n        id=\"ItemGrid\"\n        >\n      </ag-grid-angular>\n      @if (!isLoading && filterApplied && (!rowData || rowData.length === 0)) {\n        <div class=\"no-rows-message\">No Rows To Show</div>\n      }\n    </div>\n    <div\n      [ngClass]=\"{ open: openHeaderMenu }\"\n      [ngStyle]=\"{ left: menuLeft + 'px', top: menuTop + 'px' }\"\n      class=\"tMenu action-menu header-menu\"\n      id=\"HeaderActionMenu\"\n      >\n      <div (click)=\"resetTableColumns()\" class=\"tActionRow\" id=\"ResetTableButton\">Restore Default Table</div>\n      @for (headerAction of headerActions; track headerAction) {\n        <div\n          (click)=\"actionRequested.emit({ action: headerAction.action })\"\n          class=\"tActionRow\"\n          id=\"ResetTableButton\"\n          >\n          {{headerAction.name || headerAction.label}}\n        </div>\n      }\n    </div>\n    <div\n      [ngClass]=\"{ open: openMenu }\"\n      [ngStyle]=\"{ left: menuLeft + 'px', top: menuTop + 'px' }\"\n      class=\"tMenu action-menu item-menu\"\n      id=\"RowActionMenu\"\n      #contextMenu\n      >\n      @for (menuItem of menuItems; track menuItem) {\n        <div\n          (click)=\"actionRequested.emit({ action: menuItem.action, item: selectedItem })\"\n          [ngClass]=\"{'menu-item-hidden': hideMenuItem(menuItem, selectedItem) }\"\n          class=\"tActionRow\"\n          id=\"TableActionButton_{{menuItem.action}}\"\n          >\n          {{menuItem.name || menuItem.label}}\n        </div>\n      }\n    </div>\n    <div\n      (clickOutside)=\"closeHeaderFilter($event)\"\n      [ngClass]=\"{ open: showFilterOptions }\"\n      [ngStyle]=\"{ left: menuLeft + 'px', top: menuTop + 'px' }\"\n      class=\"tMenu action-menu header-menu\"\n      id=\"HeaderFilterOptions\"\n      >\n      @for (filter of filterOptions; track filter) {\n        <div (click)=\"applyFilter($event, filter)\" class=\"tActionRow\" [ngClass]=\"{'has-icon': filter.icon}\" [id]=\"filter.columnId\">\n          @if (filter.bubbleClass) {\n            <span [ngClass]=\"filter.bubbleClass\" class=\"bubble\">\n              @if (filter.showLoader) {\n                <svg class=\"circular\" viewBox=\"25 25 50 50\">\n                  <circle\n                    class=\"path\"\n                    cx=\"50\"\n                    cy=\"50\"\n                    fill=\"none\"\n                    r=\"20\"\n                    stroke-miterlimit=\"10\"\n                    stroke-width=\"3\"\n                  ></circle>\n                </svg>\n              }\n            </span>\n          }\n          @if (filter.icon) {\n            <span class=\"os-icon {{filter.icon}}\"></span>\n          }\n          {{ filter.label }}\n        </div>\n      }\n    </div>\n  </div>\n} @else {\n  <lib-no-items\n    (clickEmit)=\"openCreate()\"\n    [image]=\"noItemsImage\"\n    [isEmpty]=\"!rowData || rowData.length === 0\"\n    [isLoading]=\"isLoading\"\n    [typeName]=\"this.entityTypeLabel\"\n    [hasAdd]=\"showNoItemsAdd\"\n    [readonly]=\"noItemsReadonly\"\n    [accessDenied]=\"accessDenied\"\n  ></lib-no-items>\n}\n@if (showTagSelector) {\n  <div class=\"tag-selector-container data-table-tag-selector\" [ngStyle]=\"{ left: menuLeft + 'px', top: menuTop + 'px' }\" (clickOutside)=\"closeTagSelector($event)\">\n    <div class=\"buttonBall icon-close\" (click)=\"closeTagSelector($event)\"></div>\n    <div class=\"tag-selector-label\">\n      <span>Select an Attribute:</span>\n    </div>\n    <lib-tag-selector\n      [focusOnInit]=\"true\"\n      [availableRoleAttributes]=\"roleAttributes\"\n      [availableNamedAttributes]=\"namedAttributes\"\n      [(selectedRoleAttributes)]=\"selectedRoleAttributes\"\n      [(selectedNamedAttributes)]=\"selectedNamedAttributes\"\n      (selectedNamedAttributesChange)=\"tagSelectionChanged($event, false)\"\n      (selectedRoleAttributesChange)=\"tagSelectionChanged($event, true)\"\n    ></lib-tag-selector>\n  </div>\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, Inject, OnInit} from '@angular/core';\nimport {DataTableFilterService} from \"../../features/data-table/data-table-filter.service\";\nimport {ConfigurationsPageService} from \"./configurations-page.service\";\nimport {TabNameService} from \"../../services/tab-name.service\";\nimport {ListPageComponent} from \"../../shared/list-page-component.class\";\nimport {ConsoleEventsService} from \"../../services/console-events.service\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {ConfirmComponent} from \"../../features/confirm/confirm.component\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../features/extendable/extensions-noop.service\";\n\n@Component({\n    selector: 'lib-configurations',\n    templateUrl: './configurations-page.component.html',\n    styleUrls: ['./configurations-page.component.scss'],\n    standalone: false\n})\nexport class ConfigurationsPageComponent extends ListPageComponent implements OnInit {\n    title = 'Configurations'\n    tabs: { url: string, label: string }[] ;\n    isLoading: boolean;\n    formDataChanged = false;\n\n    constructor(\n        override svc: ConfigurationsPageService,\n        filterService: DataTableFilterService,\n        private tabNames: TabNameService,\n        consoleEvents: ConsoleEventsService,\n        dialogForm: MatDialog,\n        @Inject(SHAREDZ_EXTENSION) private extService: ExtensionService,\n    ) {\n        super(filterService, svc, consoleEvents, dialogForm, extService);\n    }\n\n    override ngOnInit() {\n        this.tabs = this.tabNames.getTabs('services');\n        this.svc.refreshData = this.refreshData;\n        super.ngOnInit();\n    }\n\n    headerActionClicked(action: string) {\n        switch (action) {\n            case 'add':\n                this.svc.openEditForm();\n                break;\n            case 'edit':\n                this.svc.openEditForm();\n                break;\n            case 'delete':\n                const selectedItems = this.rowData.filter((row) => {\n                    return row.selected;\n                });\n                this.svc.checkForAssociatedEntities(selectedItems, 'configs', 'services').then((configsWithAssociations) => {\n                    const label = selectedItems.length > 1 ? 'configurations' : 'configuration';\n                    if (configsWithAssociations.length > 0) {\n                        this.confirmAssociatedDelete(configsWithAssociations, selectedItems, label);\n                    } else {\n                        this.openBulkDelete(selectedItems, label);\n                    }\n                });\n                break;\n            default:\n        }\n    }\n\n    tableAction(event: any) {\n        this.trackMenuAction(event?.action, event?.item);\n        switch(event?.action) {\n            case 'toggleAll':\n            case 'toggleItem':\n                this.itemToggled(event.item)\n                break;\n            case 'update':\n                this.svc.openEditForm(event.item?.id);\n                break;\n            case 'create':\n                this.svc.openEditForm();\n                break;\n            case 'delete':\n                this.deleteItem(event.item)\n                break;\n            case 'download-all':\n                this.downloadAllItems();\n                break;\n            case 'download-selected':\n                this.svc.downloadItems(this.selectedItems);\n                break;\n            default:\n                break;\n        }\n    }\n\n    trackMenuAction(action: string, item: any) {\n        this.extService?.consoleActionTriggered?.emit({\n            action,\n            page: 'config',\n            item,\n            type:'menu-action'\n        });\n    }\n    \n    deleteItem(item: any) {\n        this.openBulkDelete([item], 'config');\n    }\n\n    closeModal(event: any) {\n        this.svc.sideModalOpen = false;\n        if(event?.refresh) {\n            this.refreshData();\n        }\n    }\n\n    dataChanged(event) {\n        this.formDataChanged = event;\n    }\n\n    confirmAssociatedDelete(configsWithAssociations, selectedItems, label) {\n        const configNames = configsWithAssociations.map((item) => {\n            return item.name;\n        });\n        const data = {\n            appendId: 'DeleteConfigsWithAssociations',\n            title: 'Configs In Use',\n            message: `The following configs are still in use by a service:`,\n            submessage: 'Deleting these configs may cause disruption to those services. Would you still like to continue?',\n            bulletList: configNames,\n            confirmLabel: 'Yes',\n            cancelLabel: 'Oops, no get me out of here',\n            imageUrl: 'assets/svgs/Growl_Warning.svg',\n            showCancelLink: true\n        };\n        this.dialogRef = this.dialogForm.open(ConfirmComponent, {\n            data: data,\n            autoFocus: false,\n        });\n        this.dialogRef.afterClosed().subscribe((result) => {\n            if (result?.confirmed) {\n                this.openBulkDelete(selectedItems, label);\n            }\n        });\n    }\n}\n","<div class=\"ziti-page-wrapper\">\n  <div class=\"ziti-page-container ziti-configs-container\">\n    <lib-list-page-header [title]=\"title\"\n                          [tabs]=\"tabs\"\n                          [showAdd]=\"!itemsSelected\"\n                          [blockCreate]=\"headerBlockCreate\"\n                          [blockDelete]=\"headerBlockDelete\"\n                          (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n\n    <lib-data-table [tableId]=\"'configurations'\"\n                    [noItemsReadonly]=\"headerBlockCreate\"\n                    [accessDenied]=\"headerBlockRead\"\n                    [rowData]=\"rowData\"\n                    [isLoading]=\"isLoading\"\n                    [columnDefinitions]=\"columnDefs\"\n                    (actionRequested)=\"tableAction($event)\"\n                    [startCount]=\"startCount\"\n                    [endCount]=\"endCount\"\n                    [totalCount]=\"totalCount\"\n                    [emptyMsg]=\"'No Configurations defined, Click the plus to add a Configuration.'\"\n                    [filterApplied]=\"filterApplied\"\n                    [menuItems]=\"svc.menuItems\"\n                    (gridReady)=\"gridReady($event)\"\n    >\n    </lib-data-table>\n  </div>\n</div>\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {ExtendableComponent} from \"../extendable/extendable.component\";\nimport {Component, DoCheck, ElementRef, EventEmitter, HostBinding, HostListener, Inject, Input, OnDestroy, OnInit, Output, ViewChild, inject} from \"@angular/core\";\n\nimport {defer, isEqual, unset, debounce, cloneDeep, forEach, isArray, isEmpty, isObject, isNil, map, omitBy, slice, get} from \"lodash\";\nimport {GrowlerModel} from \"../messaging/growler.model\";\nimport {GrowlerService} from \"../messaging/growler.service\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../extendable/extensions-noop.service\";\nimport {Identity} from \"../../models/identity\";\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../services/ziti-data.service\";\nimport {ActivatedRoute, NavigationEnd, Router} from \"@angular/router\";\nimport {Subscription} from \"rxjs\";\nimport {Location} from \"@angular/common\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../services/settings.service\";\nimport {URLS} from \"../../urls\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {ConfirmComponent} from \"../confirm/confirm.component\";\nimport {ManagementPermissionsService} from \"../../services/management-permissions.service\";\n\nexport class Entity {\n    name: ''\n}\n\nexport const KEY_CODES = {\n    LEFT_ARROW: 37,\n    UP_ARROW: 38,\n    RIGHT_ARROW: 39,\n    DOWN_ARROW: 40\n};\n\n@Component({\n    template: '',\n    styleUrls: ['./projectable-form.class.scss'],\n    standalone: false\n})\nexport abstract class ProjectableForm extends ExtendableComponent implements DoCheck, OnInit {\n    @Input() isModal = false;\n    @Output() abstract close: EventEmitter<any>;\n\n    _formData: any = {};\n    @Input() set formData(data) {\n      this._formData = data;\n      this.dataInit = true;\n    }\n    get formData(): any {\n      return this._formData;\n    }\n\n    _entityId: String;\n    @Input() set entityId(data: String) {\n      this._entityId = data;\n    }\n\n    get entityId(): String {\n      return this._entityId;\n    }\n\n    @Output() dataChange: EventEmitter<any> = new EventEmitter<any>();\n    @ViewChild('nameFieldInput') nameFieldInput: ElementRef;\n    @ViewChild('scrollContainer') scrollContainer: ElementRef;\n\n    abstract clear(): void;\n    abstract save(): void;\n\n    public dataInit = false;\n    public errors: any = {};\n    protected entityType = 'identities';\n    protected entityClass: any = Entity;\n    public isLoading = false;\n    protected usePreviousLocation = true;\n    moreActions: any[] = [];\n    multiActions: any[] = [];\n    tagElements: any = [];\n    tagData: any = [];\n    hideTags = false;\n    initData: any = {};\n    _dataChange = false;\n    apiOptions = [{id: 'cli', label: 'Copy as CLI'}, {id: 'curl', label: 'Copy as CURL'}];\n    basePath = '';\n    baseHref;\n    previousRoute;\n    showMore = false;\n\n    _settings: any = {};\n    checkDataChangeDebounced = debounce(this.checkDataChange, 100, {maxWait: 100});\n    ignoreDataChange = false;\n    isScrolled = false;\n\n    subscription: Subscription = new Subscription();\n\n    protected readonly managementPermissions = inject(ManagementPermissionsService);\n\n    formInit = false;\n\n    @ViewChild('formContainer') formContainer!: ElementRef;\n\n    get showApiCalls(): boolean {\n        return this.extService?.showApiCalls !== false;\n    }\n\n    protected constructor(\n        protected growlerService: GrowlerService,\n        @Inject(SHAREDZ_EXTENSION) protected extService: ExtensionService,\n        @Inject(ZITI_DATA_SERVICE) protected zitiService: ZitiDataService,\n        protected router?: Router,\n        protected route?: ActivatedRoute,\n        protected location?: Location,\n        @Inject(SETTINGS_SERVICE) protected settingsService?: SettingsService,\n        protected dialogForm?: MatDialog,\n    ) {\n        super();\n        this.previousRoute = this.router.getCurrentNavigation().previousNavigation?.finalUrl?.toString();\n        this.subscription.add(\n            this.route?.params?.subscribe(params => {\n                const id = params['id'];\n                if (!isEmpty(id)) {\n                    this.entityId = id;\n                } else {\n                    this.entityId = undefined;\n                }\n            })\n        );\n        this.subscription.add(\n            router.events.subscribe((event: any) => {\n                if (event instanceof NavigationEnd) {\n                    const snapshot = this.router.routerState.snapshot.root;\n                    const routeConfig = snapshot.firstChild?.routeConfig;\n                    if (!routeConfig?.path) {\n                      return;\n                    }\n                    const pathSegments = routeConfig.path.split('/');\n                    this.basePath = pathSegments[0];\n                }\n            })\n        );\n        this.subscription.add(\n            this.settingsService.settingsChange?.subscribe(params => {\n                const newSettings = cloneDeep(this.settingsService.settings);\n                if (\n                    !isEmpty(this.formData?.id) && (isEmpty(this._settings) ||\n                    this._settings.session?.id === newSettings.session?.id ||\n                        isEmpty(newSettings.session?.id))\n                ) {\n                    this._settings = newSettings;\n                    return;\n                }\n                this._settings = newSettings;\n                if (!this.formInit) {\n                    return;\n                }\n                this.ngOnInit();\n            })\n        );\n        this.initBaseHref();\n    }\n\n    get isEdit() {\n        return !isEmpty(this.formData.id);\n    }\n\n    get formPermissionSaveDisabled(): boolean {\n        return this.managementPermissions.isSaveDisabled(this.entityType, this.isEdit);\n    }\n\n    get formPermissionSaveTooltip(): string {\n        return this.managementPermissions.isSaveDisabled(this.entityType, this.isEdit)\n            ? this.managementPermissions.saveDeniedTooltip\n            : '';\n    }\n\n    canReadRelated(apiResource: string): boolean {\n        return this.managementPermissions.canRead(apiResource);\n    }\n\n    get useStrictReadonlyForm(): boolean {\n        return this.managementPermissions.useStrictReadonlyFormUi(this.entityType, this.isEdit);\n    }\n\n    /** Blocks save from shortcuts/callbacks when the controller denies create/update for this resource. */\n    protected canSaveByPermissions(): boolean {\n        return !this.managementPermissions.isSaveDisabled(this.entityType, this.isEdit);\n    }\n\n    @HostBinding('class.zac-management-readonly-form')\n    get zacManagementReadonlyHostClass(): boolean {\n        return this.useStrictReadonlyForm;\n    }\n\n    override ngAfterViewInit(skipFocus = false) {\n        super.ngAfterViewInit();\n        this.errors = {};\n        if (!skipFocus && !this.useStrictReadonlyForm) {\n            this.nameFieldInput?.nativeElement?.focus();\n        }\n        if (this.extService?.moreActions) {\n            this.moreActions = [...this.moreActions, ...this.extService.moreActions];\n        }\n        this.formContainer?.nativeElement?.addEventListener('scroll', () => {\n          this.isScrolled = this.formContainer.nativeElement.scrollTop > 0;\n        });\n    }\n\n    ngOnInit() {\n        if (this.entityId) {\n            if (this.entityId === 'create') {\n                this.formData = new this.entityClass();\n                this.initData = cloneDeep(this.formData);\n                this._dataChange = false;\n                this.entityUpdated();\n                return;\n            }\n            this.isLoading = true;\n            this.zitiService.getSubdata(this.entityType, this.entityId, '').then((entity: any) => {\n                this.formData = entity?.data || this.formData || new this.entityClass();\n                this.initData = cloneDeep(this.formData);\n                this._dataChange = false;\n                this.entityUpdated();\n            }).finally(() => {\n                this.isLoading = false;\n            });\n        }\n        this.formInit = true;\n    }\n\n    initBaseHref() {\n        try {\n            const base = document?.querySelector('base');\n            this.baseHref = base ? base.getAttribute('href') : '/';\n        } catch (error) {\n            this.baseHref = '/';\n        }\n    }\n\n    showMoreChanged(showMore) {\n        if (!showMore || this.hideTags) {\n            return;\n        }\n    }\n\n    loadTags() {\n        this.hideTags = localStorage.getItem(\"hideTags\")==\"yes\";\n        if (this.hideTags) {\n            return;\n        }\n    }\n\n    getTagValues() {\n        return [];\n    }\n\n    closeForm(refresh = true, ignoreChanges = false, data?, event?) {\n        if (!ignoreChanges && this._dataChange) {\n            const confirmed = confirm('You have unsaved changes. Do you want to leave this page and discard your changes or stay on this page?');\n            if (!confirmed) {\n                return;\n            }\n        }\n        if (this.isModal) {\n            this.closeModal(refresh, ignoreChanges);\n        } else {\n            this.returnToListPage();\n        }\n    }\n\n    closeModal(refresh = true, ignoreChanges = false, data?, event?): void {\n        this.close.emit({refresh: refresh});\n        if (event) {\n            event.stopPropagation();\n        }\n    }\n\n    returnToListPage() {\n        if (this.location && this.previousRoute && this.usePreviousLocation) {\n            this.location.back();\n        } else {\n            this.router?.navigateByUrl(`${this.basePath}`);\n        }\n    }\n\n    ngDoCheck() {\n        this.checkDataChangeDebounced();\n    }\n\n    protected checkDataChange() {\n        if (this.ignoreDataChange) {\n            return;\n        }\n        let initData = cloneDeep(this.initData);\n        initData = this.omitEmptyData(initData);\n        let formData = cloneDeep(this.formData);\n        formData = this.omitEmptyData(formData);\n        const dataChange = !isEqual(initData, formData);\n        if (dataChange !== this._dataChange) {\n            this.dataChange.emit(dataChange);\n        }\n        this._dataChange = dataChange;\n    }\n\n    omitEmptyData(object) {\n        forEach(object, (val, key) => {\n            if(this.omitDataIteratee(val)) {\n                unset(object, key);\n            } else if(isObject(val)) {\n                this.omitEmptyData(val);\n            }\n        });\n        return object;\n    }\n\n    omitDataIteratee(val) {\n        return isNil(val) || (isArray(val) && isEmpty(val));\n    }\n\n    copyToClipboard(val) {\n        navigator.clipboard.writeText(val);\n        const growlerData = new GrowlerModel(\n            'success',\n            'Success',\n            `Text Copied`,\n            `API call URL copied to clipboard`,\n        );\n        this.growlerService.show(growlerData);\n    }\n\n    getRolesCLIVariable(selectedRoles) {\n        let rolesVar = '';\n        selectedRoles.forEach((role, index)=> {\n            if (index > 0) {\n                rolesVar += ',';\n            }\n            rolesVar += role;\n        });\n        return rolesVar;\n    }\n\n    getRolesCURLVariable(selectedRoles) {\n        let rolesVar = '';\n        selectedRoles.forEach((role, index)=> {\n            if (index > 0) {\n                rolesVar += ', ';\n            }\n            rolesVar += `\"${role}\"`;\n        });\n        rolesVar = `[${rolesVar}]`;\n        return rolesVar;\n    }\n\n    canDeactivate() {\n        if (this._dataChange) {\n            return confirm('You have unsaved changes. Do you want to leave this page and discard your changes or stay on this page?');\n        }\n        return true;\n    }\n\n    protected entityUpdated() {\n        //no-op\n        if (this.isEdit && !this.moreActions.find(action => action.name === 'delete') && !this.multiActions.find(action => action.id === 'delete')) {\n            const deleteAction: any = {\n                name: 'delete',\n                id: 'delete',\n                label: 'Delete',\n                icon: 'icon-trash',\n                hidden: () => !this.managementPermissions.canDelete(this.entityType),\n            };\n            if (this.extService?.useDeleteSplitButton) {\n                deleteAction.style = 'danger';\n                this.multiActions = [...this.multiActions, deleteAction];\n            } else {\n                this.moreActions.push(deleteAction);\n            }\n        }\n    }\n\n    getRoleAttributes(type: string) {\n        return this.zitiService.get(type, {}, []).then((results) => {\n            return results.data;\n        });\n    }\n\n    private deleteConfirmDialogRef: any;\n\n    protected deleteEntity() {\n        if (!this.dialogForm) {\n            console.error('MatDialog not injected. Cannot show delete confirmation.');\n            return;\n        }\n\n        if (!this.managementPermissions.canDelete(this.entityType)) {\n            return;\n        }\n\n        const entityLabel = this.getEntityLabel();\n        const isService = this.entityType === 'services';\n        const showOrphanedEntitiesOption = isService && !isEmpty(this.settingsService?.zitiSemver);\n\n        const data: any = {\n            appendId: `Delete${this.entityType}`,\n            title: 'Delete',\n            message: `Are you sure you would like to delete the following ${entityLabel}?`,\n            bulletList: [this.formData.name],\n            confirmLabel: 'Yes',\n            cancelLabel: 'Oops, no get me out of here',\n            imageUrl: 'assets/svgs/Confirm_Trash.svg',\n            showCancelLink: true\n        };\n\n        if (showOrphanedEntitiesOption) {\n            data.showSecondaryConfirm = true;\n            data.secondaryConfirmLabel = 'Delete all orphaned associated configs and service policies?';\n            data.secondaryConfirmed = false;\n            data.secondaryInfoLabel = 'Choosing this option will also delete any associated configs and/or service policies that ONLY make reference to this service';\n            data.secondaryActionLabel = 'Preview Deletions';\n            data.confirmLabelAlt = 'Delete All';\n            data.secondaryAction = () => this.openPreviewDeletions();\n        }\n\n        this.deleteConfirmDialogRef = this.dialogForm.open(ConfirmComponent, {\n            data: data,\n            autoFocus: false,\n        });\n        this.deleteConfirmDialogRef.afterClosed().subscribe((result) => {\n            if (result?.confirmed) {\n                this.isLoading = true;\n                const deleteOrphans = result.secondaryConfirmed || false;\n\n                let deletePromise;\n                if (isService && deleteOrphans) {\n                    deletePromise = this.deleteServiceWithOrphans();\n                } else {\n                    deletePromise = this.zitiService.delete(this.entityType, this.formData.id);\n                }\n\n                deletePromise.then(() => {\n                    const growlerData = new GrowlerModel(\n                        'success',\n                        'Success',\n                        `${entityLabel} Deleted`,\n                        `Successfully deleted ${entityLabel.toLowerCase()} \"${this.formData.name}\"`,\n                    );\n                    this.growlerService.show(growlerData);\n                    this.returnToListPage();\n                }).catch((error) => {\n                    const growlerData = new GrowlerModel(\n                        'error',\n                        'Error',\n                        `Delete Failed`,\n                        `Failed to delete ${entityLabel.toLowerCase()}: ${error?.error?.error?.message || error?.message || 'Unknown error'}`,\n                    );\n                    this.growlerService.show(growlerData);\n                }).finally(() => {\n                    this.isLoading = false;\n                });\n            }\n        });\n    }\n\n    protected deleteServiceWithOrphans(): Promise<any> {\n        return Promise.reject('deleteServiceWithOrphans must be overridden in child class');\n    }\n\n    protected openPreviewDeletions() {\n        // This should be overridden by child classes that support preview\n        console.log('Preview deletions not implemented for this entity type');\n    }\n\n    protected getEntityLabel(): string {\n        // Convert entity type to a readable label\n        // e.g., \"external-jwt-signers\" -> \"JWT Signer\"\n        const typeMap: { [key: string]: string } = {\n            'external-jwt-signers': 'JWT Signer',\n            'identities': 'Identity',\n            'services': 'Service',\n            'edge-routers': 'Edge Router',\n            'transit-routers': 'Transit Router',\n            'edge-router-policies': 'Edge Router Policy',\n            'service-edge-router-policies': 'Service Edge Router Policy',\n            'service-policies': 'Service Policy',\n            'configs': 'Configuration',\n            'config-types': 'Config Type',\n            'posture-checks': 'Posture Check',\n            'auth-policies': 'Auth Policy',\n            'cas': 'Certificate Authority'\n        };\n        return typeMap[this.entityType] || this.entityType;\n    }\n}\n","export class Terminator {\n    service: any = '';\n    identity: any = '';\n    router: any = '';\n    binding: string = '';\n    precedence: string = '';\n    address: string = '';\n    cost: number = 0;\n    identitySecret: string = '';\n};","import {Injectable, Inject} from '@angular/core';\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../services/ziti-data.service\";\nimport {Resolver} from \"@stoplight/json-ref-resolver\";\nimport {SchemaService} from \"../../../services/schema.service\";\nimport {defer, invert, isBoolean, isEmpty, isNil, keys} from \"lodash\";\nimport {GrowlerModel} from \"../../messaging/growler.model\";\nimport {GrowlerService} from \"../../messaging/growler.service\";\nimport {Config} from \"../../../models/config\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../extendable/extensions-noop.service\";\nimport {ValidationService} from \"../../../services/validation.service\";\nimport {Terminator} from \"../../../models/terminator\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class TerminatorFormService {\n\n    items: any[] = [];\n    errors: any[] = [];\n    saveDisabled = false;\n\n    serviceNamedAttributes = [];\n    identityNamedAttributes = [];\n    routerNamedAttributes = [];\n\n    selectedServiceNamedAttributes = [];\n    selectedIdentityNamedAttributes = [];\n    selectedRouterNamedAttributes = [];\n\n    serviceNamedAttributesMap: any = {};\n    identityNamedAttributesMap: any = {};\n    routerNamedAttributesMap: any = {};\n\n    constructor(\n        @Inject(ZITI_DATA_SERVICE) private dataService: ZitiDataService,\n        @Inject(SHAREDZ_EXTENSION)private extService: ExtensionService,\n        private growlerService: GrowlerService,\n        private validationService: ValidationService\n    ) {\n    }\n\n    save(formData) {\n        const isUpdate = !isEmpty(formData.id);\n        const data: any = this.getTerminatorDataModel(formData, isUpdate);\n        let prom;\n        if (isUpdate) {\n            prom = this.dataService.patch('terminators', data, formData.id, true);\n        } else {\n            prom = this.dataService.post('terminators', data, true);\n        }\n\n        return prom.then(async (result: any) => {\n            const id = isUpdate ? formData.id : (result?.data?.id || result?.id);\n            let config = await this.dataService.getSubdata('terminators', id, '').then((svcData) => {\n                return svcData.data;\n            });\n            return this.extService.formDataSaved(config).then((formSavedResult: any) => {\n                if (!formSavedResult) {\n                    return config;\n                }\n                const growlerData = new GrowlerModel(\n                    'success',\n                    'Success',\n                    `Terminator ${isUpdate ? 'Updated' : 'Created'}`,\n                    `Successfully ${isUpdate ? 'updated' : 'created'} Terminator: ${formData.name}`,\n                );\n                this.growlerService.show(growlerData);\n                return config;\n            }).catch((result) => {\n                return false;\n            });\n        }).catch((resp) => {\n            let errorMessage;\n            if (resp?.error?.error?.cause?.message) {\n                errorMessage = resp?.error?.error?.cause?.message;\n            } else if (resp?.error?.error?.cause?.reason) {\n                errorMessage = resp?.error?.error?.cause?.reason;\n            }else if (resp?.error?.message) {\n                errorMessage = resp?.error?.message;\n            } else {\n                errorMessage = 'An unknown error occurred';\n            }\n            const growlerData = new GrowlerModel(\n                'error',\n                'Error',\n                `Error Creating Terminator`,\n                errorMessage,\n            );\n            this.growlerService.show(growlerData);\n            throw resp;\n        })\n    }\n\n    getTerminatorDataModel(formData, isUpdate) {\n        const saveModel = new Terminator();\n        const modelProperties = keys(saveModel);\n        modelProperties.forEach((prop) => {\n            switch(prop) {\n                default:\n                    saveModel[prop] = formData[prop];\n            }\n        });\n        return saveModel;\n    }\n\n    public getIdentityNamedAttributes() {\n        return this.dataService.get('identities', {rawFilter: true, filter: '', sort: 'name', order: 'asc', total: -1, page: 1}, []).then((result) => {\n            const namedAttributes = result.data.map((identity) => {\n                this.identityNamedAttributesMap[identity.name] = identity.id;\n                return identity.name;\n            });\n            this.identityNamedAttributes = namedAttributes;\n            return namedAttributes;\n        });\n    }\n\n    public getServiceNamedAttributes() {\n        return this.dataService.get('services', {rawFilter: true, filter: '', sort: 'name', order: 'asc', total: -1, page: 1}, []).then((result) => {\n            const namedAttributes = result.data.map((service) => {\n                this.serviceNamedAttributesMap[service.name] = service.id;\n                return service.name;\n            });\n            this.serviceNamedAttributes = namedAttributes;\n            return namedAttributes;\n        });\n    }\n\n    public getRouterNamedAttributes() {\n        return this.dataService.get('routers', {rawFilter: true, filter: '', sort: 'name', order: 'asc', total: -1, page: 1}, []).then((result) => {\n            const namedAttributes = result.data.map((service) => {\n                this.routerNamedAttributesMap[service.name] = service.id;\n                return service.name;\n            });\n            this.routerNamedAttributes = namedAttributes;\n            return namedAttributes;\n        });\n    }\n\n}\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {isFunction} from 'lodash';\n\n@Component({\n    selector: 'lib-multi-action-button',\n    templateUrl: './multi-action-button.component.html',\n    styleUrls: ['./multi-action-button.component.scss'],\n    standalone: false\n})\nexport class MultiActionButtonComponent {\n\n  @Input() actions: any[];\n  @Output() actionRequested: EventEmitter<any> = new EventEmitter<any>();\n\n  showMoreActions = false;\n\n  showMoreActionsMenu() {\n    this.showMoreActions = true;\n  }\n\n  closeMoreActionsMenu() {\n    this.showMoreActions = false;\n  }\n\n  actionClicked(action) {\n    this.actionRequested.emit(action);\n  }\n\n  isActionHidden(action: any): boolean {\n    return isFunction(action.hidden) ? action.hidden() : !!action.hidden;\n  }\n}\n","<div class=\"multi-action-button-container\">\n  @if (actions) {\n    <div class=\"form-field-action\"\n      (clickOutside)=\"closeMoreActionsMenu()\"\n      >\n      <div class=\"primary-action-button\" (click)=\"actionClicked(actions[0])\">{{actions[0].label}}</div>\n      @if (actions.length > 1) {\n        <div class=\"secondary-action-button\"\n          (click)=\"showMoreActionsMenu()\"\n          ><div class=\"secondary-actions-arrow icon-prev\"></div></div>\n        }\n      </div>\n    }\n    @if (showMoreActions) {\n      <div class=\"multi-action-button-dropdown\">\n        <ul>\n          @for (action of actions; track action) {\n            <li [hidden]=\"isActionHidden(action)\" class=\"confirm-item-name {{action.style}}\" (click)=\"actionClicked(action)\">\n              @if (action.icon) {\n                <div class=\"confirm-item-icon {{action.icon}}\"></div>\n              }\n              {{action.label}}\n            </li>\n          }\n        </ul>\n      </div>\n    }\n  </div>\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, EventEmitter, Input, OnChanges, Output, SimpleChanges} from '@angular/core';\nimport {isFunction, defer, isEmpty} from 'lodash';\n\n@Component({\n    selector: 'lib-form-header',\n    templateUrl: './form-header.component.html',\n    styleUrls: ['./form-header.component.scss'],\n    standalone: false\n})\nexport class FormHeaderComponent implements OnChanges {\n  @Input() data: any = {};\n  @Input() badges: any = [];\n  @Input() title = '';\n  @Input() moreActions: any = [];\n  @Input() formView = 'simple';\n  @Input() saveDisabled = false;\n  @Input() saveTooltip = '';\n  @Input() actionButtonText = 'Save';\n  @Input() moreActionsText = 'More Actions';\n  @Input() showHeaderToggle = true;\n  @Input() showHeaderButton = true;\n  /** Hide save / more-actions / multi-save and retitle Edit→View for global admin_readonly without write grants. */\n  @Input() strictReadonlyUi = false;\n  @Input() multiActions: any[] = [];\n  @Output() formViewChange: EventEmitter<string> = new EventEmitter<string>();\n  @Output() actionRequested: EventEmitter<any> = new EventEmitter<any>();\n  @Output() multiActionRequested: EventEmitter<any> = new EventEmitter<any>();\n\n  _saveActions = [{id: 'save', label: 'Save', hidden: true}];\n  saveActions = [];\n  showActionsDropDown = false;\n\n  constructor() {}\n\n  ngOnChanges(changes: SimpleChanges) {\n    this.saveActions = [...this._saveActions, ...this.multiActions];\n  }\n\n  get displayTitle(): string {\n    if (!this.strictReadonlyUi || !this.title) {\n      return this.title;\n    }\n    return this.title.replace(/\\bEdit\\b/gi, 'View').replace(/\\bCreate\\b/gi, 'View');\n  }\n\n  get hasMoreActions() {\n    let hasMoreActions = false;\n    this.moreActions?.forEach(action => {\n      if (!isFunction(action.hidden) || !action.hidden()) {\n        hasMoreActions = true;\n      }\n    });\n    return hasMoreActions;\n  }\n\n  actionClicked(event) {\n    if (this.strictReadonlyUi) {\n      return;\n    }\n    if (event?.id === 'save' && this.saveDisabled) {\n      return;\n    }\n    this.multiActionRequested.emit({id: event?.id});\n  }\n\n  requestAction(action) {\n    if (this.strictReadonlyUi && action?.name === 'save') {\n      return;\n    }\n    if (action?.name === 'save' && this.saveDisabled) {\n      return;\n    }\n    if (action.name === 'toggle-view') {\n      if (action.data === 'simple') {\n        this.formView = 'raw';\n      } else {\n        this.formView = 'simple';\n      }\n      action.data = this.formView;\n      this.formViewChange.emit();\n    }\n    if (action.callback) {\n      action.callback();\n    }\n    this.actionRequested.emit({name: action.name, data: action.data})\n    this.showActionsDropDown = false;\n  }\n\n  showMoreActions() {\n    defer(() => {\n      this.showActionsDropDown = true;\n    });\n  }\n\n  closeActionsMoreActions() {\n    defer(() => {\n      this.showActionsDropDown = false;\n    });\n  }\n\n  get hasMultiActions() {\n    return !isEmpty(this.multiActions);\n  }\n\n  get headerBadges() {\n    return this.data.badges || this.badges;\n  }\n}\n","<div class=\"form-header-container\" [ngClass]=\"{'show-more-actions': (moreActions && moreActions.length > 0 && data.id)}\">\n  <div class=\"form-header-group\">\n    <div class=\"form-title-container\">\n      <div class=\"form-title-back-arrow\" (click)=\"requestAction({name: 'close'})\">\n        <div class=\"form-title-back-arrow-icon icon-back-arrow\"></div>\n      </div>\n      <div class=\"form-header-title-text\">\n        <span class=\"form-title\">{{displayTitle}}</span>\n        @if (data.name) {\n          <span class=\"form-title title-name\">{{data.name}}</span>\n        }\n      </div>\n    </div>\n    <div class=\"header-actions-container\">\n      @if (showHeaderToggle) {\n        <div class=\"form-header-toggle-container\">\n          <span\n            class=\"toggle-option-text\"\n            [ngClass]=\"{'toggle-option-selected': formView === 'simple'}\"\n            (click)=\"requestAction({name: 'toggle-view', data: 'raw'})\"\n            >\n            FORM\n          </span>\n          <div class=\"form-header-toggle\" (click)=\"requestAction({name: 'toggle-view', data: formView})\">\n            <div\n              class=\"form-toggle-switch\"\n              [ngClass]=\"{'toggle-left': formView === 'simple', 'toggle-right': formView === 'raw'}\"\n              >\n              <div class=\"form-toggle-indicator\"></div>\n              <div class=\"form-toggle-indicator\"></div>\n            </div>\n          </div>\n          <span\n            class=\"toggle-option-text\"\n            [ngClass]=\"{'toggle-option-selected': formView === 'raw'}\"\n            (click)=\"requestAction({name:'toggle-view', data: 'simple'})\"\n            >\n            JSON\n          </span>\n        </div>\n      }\n      @if (hasMoreActions && !strictReadonlyUi) {\n        <div class=\"more-actions-container\" [ngClass]=\"{'more-actions-open': showActionsDropDown}\"  (click)=\"showMoreActions()\">\n          <div class=\"more-actions-button\">\n            <div class=\"more-actions-label\">\n              <div class=\"more-actions-text\">{{moreActionsText}}</div>\n              <div class=\"more-actions-arrow\"></div>\n            </div>\n          </div>\n          @if (showActionsDropDown) {\n            <div class=\"more-actions-list\" (clickOutside)=\"closeActionsMoreActions()\">\n              @for (action of moreActions; track action) {\n                <div\n                  class=\"more-actions-item\"\n                  (click)=\"requestAction(action)\"\n                  >\n                  @if (action.icon) {\n                    <div class=\"more-actions-item-icon {{action.icon}}\"></div>\n                  }\n                  {{action.label}}\n                </div>\n              }\n            </div>\n          }\n        </div>\n      }\n      @if (!hasMultiActions && showHeaderButton && !strictReadonlyUi) {\n        <div class=\"save-button\"\n          (click)=\"requestAction({name: 'save'})\"\n          [ngClass]=\"{'save-disabled': saveDisabled}\"\n          matTooltip=\"{{saveTooltip}}\"\n          matTooltipPosition=\"below\"\n        >{{actionButtonText}}</div>\n      }\n      @if (hasMultiActions && !strictReadonlyUi) {\n        <lib-multi-action-button\n          [actions]=\"saveActions\"\n          (actionRequested)=\"actionClicked($event)\"\n        ></lib-multi-action-button>\n      }\n    </div>\n  </div>\n  <div class=\"form-header-group badges-container\">\n    @for (badge of headerBadges; track badge) {\n      <div class=\"header-badge-container {{badge.class}}\">\n        @if (badge.circle) {\n          <span class=\"circle {{badge.circle}}\"></span>\n        }\n        <span class=\"badge-label\">{{badge.label}}</span>\n      </div>\n    }\n  </div>\n</div>\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, Input, Output, EventEmitter} from '@angular/core';\n\n@Component({\n    selector: 'lib-form-field-container',\n    templateUrl: './form-field-container.component.html',\n    styleUrls: ['./form-field-container.component.scss'],\n    standalone: false\n})\nexport class FormFieldContainerComponent {\n\n  @Input() title = '';\n  @Input() title2 = undefined;\n  @Input() titleIcon = undefined;\n  @Input() layout = 'column';\n  @Input() helpText: any = undefined;\n  @Input() helpText2: any = undefined;\n  @Input() label: any = undefined;\n  @Input() count: any = undefined;\n  @Input() action: any = undefined;\n  @Input() actionLabel: string;\n  @Input() class = '';\n  @Input() contentStyle: any = '';\n  @Input() contentClass: any = '';\n  @Input() showHeader: any = true;\n  @Input() showToggle = false;\n  @Input() headerActions: any[];\n  @Input() headerToggle = false;\n\n  @Output() actionRequested: EventEmitter<any> = new EventEmitter<any>();\n  @Output() headerToggleChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n  @Output() helpClicked: EventEmitter<void> = new EventEmitter<void>();\n\n  constructor() {}\n\n  onHelpClick() {\n    this.helpClicked.emit();\n  }\n\n  actionClicked(action) {\n    this.actionRequested.emit(action);\n  }\n\n  toggleHeader(option?) {\n    if (option == 'left') {\n      this.headerToggle = false;\n    } else if (option === 'right') {\n      this.headerToggle = true;\n    } else {\n      this.headerToggle = !this.headerToggle;\n    }\n    this.headerToggleChange.emit(this.headerToggle);\n  }\n}\n","<div class=\"form-field-container\" class=\"{{class}}\" [ngClass]=\"{'form-field-row': layout === 'row'}\">\n  @if (showHeader) {\n    <div class=\"form-field-header\">\n      <div class=\"form-field-title-container\">\n        @if (titleIcon) {\n          <div class=\"title-icon {{titleIcon}}\"></div>\n        }\n        <span class=\"form-field-title\">{{title}}</span>\n        @if (helpText) {\n          <div\n            class=\"form-field-help-icon\"\n            matTooltip=\"{{helpText}}\"\n            matTooltipPosition=\"below\"\n            (click)=\"onHelpClick()\"\n          >?</div>\n        }\n      </div>\n      @if (label) {\n        <span class=\"form-field-label\">{{label}}</span>\n      }\n      @if (count || count === 0) {\n        <span class=\"form-field-count\">{{count}}</span>\n      }\n      @if (title2) {\n        <div class=\"form-field-title-container title-container-2\">\n          <span class=\"form-field-title title2\">{{title2}}</span>\n          @if (helpText2) {\n            <div\n              class=\"form-field-info infoicon\"\n              matTooltip=\"{{helpText2}}\"\n              matTooltipPosition=\"below\"\n            ></div>\n          }\n        </div>\n      }\n      @if (showToggle) {\n        <div class=\"form-header-toggle-container\">\n          <span\n            class=\"toggle-option-text\"\n            [ngClass]=\"{'toggle-option-selected': !headerToggle}\"\n            (click)=\"toggleHeader('left')\"\n            >\n            OFF\n          </span>\n          <div class=\"form-header-toggle\" (click)=\"toggleHeader()\">\n            <div\n              class=\"form-toggle-switch form-toggle-switch-inverse\"\n              [ngClass]=\"{'toggle-left': !headerToggle, 'toggle-right': headerToggle}\"\n              >\n              <div class=\"form-toggle-indicator\"></div>\n              <div class=\"form-toggle-indicator\"></div>\n            </div>\n          </div>\n          <span\n            class=\"toggle-option-text\"\n            [ngClass]=\"{'toggle-option-selected': headerToggle}\"\n            (click)=\"toggleHeader('right')\"\n            >\n            ON\n          </span>\n        </div>\n      }\n    </div>\n  }\n  <div class=\"form-field-content\" [style]=\"contentStyle\" class=\"{{contentClass}}\">\n    <ng-content></ng-content>\n  </div>\n  @if (headerActions) {\n    <lib-multi-action-button\n      [actions]=\"headerActions\"\n      (actionRequested)=\"actionClicked($event)\"\n    ></lib-multi-action-button>\n  }\n</div>\n","import {Component, Input, OnInit} from \"@angular/core\";\nimport {AnimationOptions} from 'ngx-lottie';\n\nimport {isEmpty} from 'lodash';\n\nconst DEFAULT_LOADER_PATH = 'assets/animations/Loader.json';\nconst cachedAnimationData: {[path: string]: any} = {};\nconst inflightFetches: {[path: string]: Promise<any>} = {};\n\nfunction loadAnimationData(path: string): Promise<any> {\n  if (cachedAnimationData[path]) {\n    return Promise.resolve(cachedAnimationData[path]);\n  }\n  if (!inflightFetches[path]) {\n    inflightFetches[path] = fetch(path)\n      .then((res) => res.json())\n      .then((data) => {\n        cachedAnimationData[path] = data;\n        delete inflightFetches[path];\n        return data;\n      })\n      .catch((err) => {\n        delete inflightFetches[path];\n        throw err;\n      });\n  }\n  return inflightFetches[path];\n}\n\n@Component({\n    selector: 'lib-loading-indicator',\n    templateUrl: './loading-indicator.component.html',\n    styleUrls: ['./loading-indicator.component.scss'],\n    standalone: false\n})\nexport class LoadingIndicatorComponent implements OnInit {\n  @Input() isLoading = false;\n  lottieOptions: AnimationOptions | undefined;\n\n  ngOnInit() {\n    const overridePath = localStorage.getItem('loading-indicator-path');\n    const path = !isEmpty(overridePath) ? overridePath! : DEFAULT_LOADER_PATH;\n\n    if (cachedAnimationData[path]) {\n      this.lottieOptions = {animationData: cachedAnimationData[path]};\n      return;\n    }\n\n    loadAnimationData(path)\n      .then((data) => {\n        this.lottieOptions = {animationData: data};\n      })\n      .catch(() => {\n        this.lottieOptions = {path};\n      });\n  }\n}\n","<div [hidden]=\"!isLoading\" id=\"Loading\">\n  <div class=\"grid-row\">\n    <div class=\"col\">\n      <div class=\"loader\">\n        <div class=\"nfloader\">\n          @if (lottieOptions) {\n            <ng-lottie [options]=\"lottieOptions\"></ng-lottie>\n          }\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input, OnChanges,\n  Output,\n  SimpleChanges,\n  ViewChild\n} from \"@angular/core\";\n\nimport {GrowlerService} from '../messaging/growler.service';\nimport {GrowlerModel} from '../messaging/growler.model';\n\nimport _ from 'lodash';\nimport {createAjvValidator, createJSONEditor, Mode} from \"vanilla-jsoneditor\";\n\n@Component({\n    selector: 'lib-json-view',\n    templateUrl: './json-view.component.html',\n    styleUrls: ['./json-view.component.scss'],\n    standalone: false\n})\nexport class JsonViewComponent implements AfterViewInit, OnChanges {\n\n  @Input() data: any = {};\n  @Input() schema: any = {};\n  @Input() readOnly: boolean = false;\n  @Input() jsonInvalid: boolean = false;\n  @Input() showCopy: boolean = false;\n  @Input() showLineNumbers = true;\n  @Output() dataChange: EventEmitter<any> = new EventEmitter();\n  @Output() jsonChange: EventEmitter<any> = new EventEmitter();\n  @Output() jsonInvalidChange: EventEmitter<any> = new EventEmitter();\n\n  onChangeDebounced;\n  schemaRefs: any;\n  content: any;\n  @ViewChild('editor', {static: false}) editorDiv!: ElementRef;\n  validator: any;\n  private editor: any;\n  private schemaDefinitions: any;\n  oldData: any;\n  currentData: any;\n  editorInit = false;\n\n  constructor(private growlerService: GrowlerService) {\n    this.onChangeDebounced = _.debounce(this.onChange.bind(this), 400);\n  }\n\n  ngAfterViewInit() {\n    if (this.schema) {\n      this.validator = createAjvValidator({\n        schema: this.schema,\n        schemaDefinitions: this.schemaDefinitions,\n        ajvOptions: {}\n      });\n    }\n    this.initEditor();\n    if (this.readOnly) {\n      this.watchData();\n    }\n  }\n\n  initEditor() {\n    if (!this.editorDiv || !this.data || this.editorInit) {\n      return;\n    }\n    this.currentData = this.data;\n    this.content = {\n      text: undefined,\n      json: this.data || {}\n    };\n    this.editor = createJSONEditor({\n      target: this.editorDiv.nativeElement,\n      props: {\n        validator: this.validator,\n        content: this.content,\n        readOnly: this.readOnly,\n        mode: Mode.text,\n        onChange: (updatedContent, previousContent, {contentErrors, patchResult}) => {\n          this.content = updatedContent\n          if (this.content?.json) {\n            this.dataChange.emit(this.content.json);\n            this.currentData = this.content.json;\n          } else if (this.content?.text) {\n            try {\n              const newData = JSON.parse(this.content.text)\n              this.dataChange.emit(newData);\n              this.currentData = newData;\n            } catch (e) {\n              this.jsonInvalidChange.emit(false);\n            }\n          }\n          const errors = this.validate(this.currentData);\n          if (!errors && !_.isEmpty(this.content.text)) {\n            this.jsonInvalidChange.emit(false);\n          } else {\n            this.jsonInvalidChange.emit(true);\n          }\n        }\n      }\n    });\n    this.editorInit = true;\n  }\n\n  updateEditor() {\n    if (_.isEqual(this.oldData, this.data)) {\n      return;\n    }\n    this.oldData = _.cloneDeep(this.data);\n    this.content = {\n      json: this.oldData || {}\n    };\n    this.editor.update(this.content);\n  }\n\n  watchData() {\n    const watchDataObj = (originalData, self, callback) => {\n      _.delay(() => {\n        const currentData = self.data;\n        if (!_.isEqual(originalData, currentData)) {\n          callback();\n          originalData = _.cloneDeep(currentData);\n        }\n        watchDataObj(originalData, self, callback);\n      }, 100);\n    };\n    const originalData = _.cloneDeep(this.data);\n    watchDataObj(originalData, this, (val) => {\n      this.updateEditor();\n    });\n  }\n\n  async onChange() {\n    let newData;\n    try {\n      newData = this.editor.get();\n    } catch (e) {\n      // Error getting editor data\n    }\n\n    if (newData) {\n      this.dataChange.emit(newData);\n    }\n\n    const errors = await this.validate(newData);\n    if (!errors) {\n      if (newData) {\n        this.jsonChange.emit(newData);\n      }\n      this.jsonInvalidChange.emit(false);\n    } else {\n      this.jsonInvalidChange.emit(true);\n    }\n  }\n\n  public getData() {\n    return this.editor.get();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['schema']) {\n      this.schema = changes['schema'].currentValue;\n\n      if(this.schema) {\n        if (this.validator) {\n          this.validator.schema = this.schema;\n        } else {\n          this.validator = createAjvValidator({\n            schema: changes['schema'].currentValue,\n            schemaDefinitions: this.schemaDefinitions,\n            ajvOptions: {}\n          });\n        }\n      }\n    } else if (changes['data']) {\n      if (!this.editorInit) {\n        this.initEditor();\n      }\n    }\n    if (changes['readOnly'] && this.editorInit && this.editor?.updateProps) {\n      void this.editor.updateProps({ readOnly: this.readOnly });\n    }\n  }\n\n  public validate(newData: any = undefined) {\n    return this.editor.validate();\n  }\n\n  enterKeyPressed(event) {\n    event.stopPropagation();\n    event.preventDefault();\n  }\n\n  jsonChanged(event) {\n    this.dataChange.emit(this.data);\n  }\n\n  copyToClipboad() {\n    var clipData = JSON.stringify(JSON.parse(JSON.stringify(this.data)),null,2);\n    navigator.clipboard.writeText(clipData);\n    const growlerData = new GrowlerModel(\n        'success',\n        'Success',\n        `Text Copied`,\n        `API call JSON body copied to clipboard`,\n    );\n    this.growlerService.show(growlerData);\n  }\n}\n","<div id=\"jsoneditor\" [ngClass]=\"{'read-only': readOnly, 'hide-line-numbers': !showLineNumbers}\" #editor (keyup.enter)=\"enterKeyPressed($event)\" (keyup)=\"jsonChanged($event)\"></div>\n@if (showCopy) {\n  <div class=\"icon-copy copy-text\" (click)=\"copyToClipboad()\"></div>\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {\n    Component,\n    EventEmitter, Inject,\n    Input,\n    OnDestroy,\n    OnInit, Output,\n    ViewChild,\n} from '@angular/core';\nimport {TerminatorFormService} from \"./terminator-form.service\";\nimport {Subscription} from \"rxjs\";\nimport {SchemaService} from \"../../../services/schema.service\";\nimport {ProjectableForm} from \"../projectable-form.class\";\nimport {GrowlerService} from \"../../messaging/growler.service\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../extendable/extensions-noop.service\";\nimport {ConfigEditorComponent} from \"../../config-editor/config-editor.component\";\n\nimport {cloneDeep, defer, forOwn, invert, isEmpty, isNil, unset} from 'lodash';\nimport {GrowlerModel} from \"../../messaging/growler.model\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../../services/settings.service\";\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../services/ziti-data.service\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {Terminator} from \"../../../models/terminator\";\nimport {Location} from \"@angular/common\";\n\n@Component({\n    selector: 'lib-configuration',\n    templateUrl: './terminator-form.component.html',\n    styleUrls: ['./terminator-form.component.scss'],\n    standalone: false\n})\nexport class TerminatorFormComponent extends ProjectableForm implements OnInit, OnDestroy {\n\n    @Input() override errors: any = {};\n    @Output() close: EventEmitter<void> = new EventEmitter<void>();\n\n    formView = 'simple';\n    options: any[] = [];\n    isEditing = !isEmpty(this.formData.id);\n    formDataInvalid = false;\n    editMode = false;\n    items: any = [];\n    settings: any = {};\n    selectedIdentityNamedAttribute;\n    selectedServiceNamedAttribute;\n    selectedRouterNamedAttribute;\n    selectedIdentityId;\n    selectedServiceId;\n    selectedRouterId;\n    override entityType = 'terminators';\n    override entityClass = Terminator;\n\n    constructor(\n        public svc: TerminatorFormService,\n        private schemaSvc: SchemaService,\n        growlerService: GrowlerService,\n        @Inject(SHAREDZ_EXTENSION) extService: ExtensionService,\n        @Inject(SETTINGS_SERVICE) protected override settingsService: SettingsService,\n        @Inject(ZITI_DATA_SERVICE) override zitiService: ZitiDataService,\n        protected override router: Router,\n        protected override route: ActivatedRoute,\n        location: Location\n    ) {\n        super(growlerService, extService, zitiService, router, route, location, settingsService);\n    }\n\n    override ngOnInit(): void {\n        super.ngOnInit();\n        this.settingsService.settingsChange.subscribe((results:any) => {\n            this.settings = results;\n        });\n    }\n\n    protected override entityUpdated() {\n        super.entityUpdated();\n        const promises = [];\n        promises.push(this.svc.getServiceNamedAttributes());\n        promises.push(this.svc.getIdentityNamedAttributes());\n        promises.push(this.svc.getRouterNamedAttributes());\n        Promise.all(promises).then(() => {\n            this.initSelectedAttributes();\n        });\n    }\n\n    ngOnDestroy(): void {\n        this.clearForm();\n    }\n\n    headerActionRequested(event) {\n        switch(event.name) {\n            case 'save':\n                this.save(event);\n                break;\n            case 'close':\n                this.returnToListPage();\n                break;\n            case 'toggle-view':\n                this.formView = event.data;\n                break;\n        }\n    }\n\n    multiActionRequested(action) {\n        switch (action.id) {\n            case 'save':\n                this.save();\n                break;\n            case 'delete':\n                this.deleteEntity();\n                break;\n        }\n    }\n\n    override clear() {\n        this.formData.configTypeId = '';\n        this.clearForm();\n    }\n\n    clearForm() {\n        this.items.forEach((item: any) => {\n            if (item?.component) item.component.destroy();\n        });\n        this.errors = {};\n        this.items = [];\n        this.formData = {};\n        if (this.subscription) this.subscription.unsubscribe();\n    }\n\n    async save(event?: any) {\n        if (!this.canSaveByPermissions()) {\n            return;\n        }\n        if(!this.validate()) {\n            return;\n        }\n        const tagVals = this.getTagValues();\n        if (!isEmpty(tagVals)) {\n            forOwn(tagVals, (value, key) => {\n                this.formData.tags[key] = value;\n            });\n        }\n        const apiData = this.apiData;\n        this.isLoading = true;\n        this.svc.save(apiData).then((result) => {\n            if (this.isModal) {\n                this.closeModal(true, true);\n                return;\n            }\n            this.initData = this.formData;\n            this._dataChange = false;\n            this.returnToListPage();\n        }).finally(() => {\n            this.isLoading = false;\n        });\n    }\n\n    validate() {\n        this.errors = {};\n        return isEmpty(this.errors);\n    }\n\n    get apiCallURL() {\n        return this.settings.selectedEdgeController + '/edge/management/v1/terminators' + (this.formData.id ? `/${this.formData.id}` : '');\n    }\n\n    get apiData(): any {\n        const data: any = {\n            service: this.selectedServiceId || '',\n            router: this.selectedRouterId || '',\n            identity: this.selectedIdentityId || '',\n            binding: this.formData.binding || '',\n            address: this.formData.address || '',\n            identitySecret: this.formData.identitySecret || '',\n            precedence: this.formData.precedence || '',\n            cost: this.formData.cost || 0\n        };\n        if (this.formData.id) {\n            data.id = this.formData.id;\n        }\n        this._apiData = data;\n        return this._apiData;\n    }\n\n    _apiData: any = {};\n    set apiData(data) {\n        this._apiData = data;\n    }\n\n    dataChanged(event) {\n        this._apiData = cloneDeep(this.apiData);\n    }\n\n    initSelectedAttributes() {\n        const serviceIdAttributesMap = invert(this.svc.serviceNamedAttributesMap);\n        const identityIdAttributesMap = invert(this.svc.identityNamedAttributesMap);\n        const routerIdAttributesMap = invert(this.svc.routerNamedAttributesMap);\n        this.selectedServiceNamedAttribute = serviceIdAttributesMap[this.formData?.service.id];\n        this.selectedIdentityNamedAttribute = identityIdAttributesMap[this.formData?.identity];\n        this.selectedRouterNamedAttribute = routerIdAttributesMap[this.formData?.router.id];\n        this.selectedServiceId = this.formData?.service.id;\n        this.selectedIdentityId = this.formData?.identity;\n        this.selectedRouterId = this.formData?.router.id;\n        this.svc.selectedServiceNamedAttributes = [];\n        if (this.selectedServiceNamedAttribute) {\n            this.svc.selectedServiceNamedAttributes.push(this.selectedServiceNamedAttribute);\n        }\n        this.svc.selectedIdentityNamedAttributes = [];\n        if (this.selectedIdentityNamedAttribute) {\n            this.svc.selectedIdentityNamedAttributes.push(this.selectedIdentityNamedAttribute);\n        }\n        this.svc.selectedRouterNamedAttributes = [];\n        if (this.selectedRouterNamedAttribute) {\n            this.svc.selectedRouterNamedAttributes.push(this.selectedRouterNamedAttribute);\n        }\n    }\n\n    serviceAttributeChanged(event?) {\n        let selectedNamedAttributes = [];\n        if (isEmpty(event)) {\n            this.selectedServiceId = '';\n        } else {\n            this.selectedServiceId = this.svc.serviceNamedAttributesMap[event];\n            selectedNamedAttributes = [event];\n        }\n        this.selectedServiceNamedAttribute = event;\n        defer(() => {\n            this.svc.selectedServiceNamedAttributes = selectedNamedAttributes;\n        });\n    }\n\n    identityAttributeChanged(event?) {\n        let selectedNamedAttributes = [];\n        if (isEmpty(event)) {\n            this.selectedIdentityId = '';\n        } else {\n            this.selectedIdentityId = this.svc.identityNamedAttributesMap[event];\n            selectedNamedAttributes = [event];\n        }\n        this.selectedIdentityNamedAttribute = event;\n        defer(() => {\n            this.svc.selectedIdentityNamedAttributes = selectedNamedAttributes;\n        });\n    }\n\n    routerAttributeChanged(event?) {\n        let selectedNamedAttributes = [];\n        if (isEmpty(event)) {\n            this.selectedRouterId = '';\n        } else {\n            this.selectedRouterId = this.svc.routerNamedAttributesMap[event];\n            selectedNamedAttributes = [event];\n        }\n        this.selectedRouterNamedAttribute = event;\n        defer(() => {\n            this.svc.selectedRouterNamedAttributes = selectedNamedAttributes;\n        });\n    }\n}\n","<div class=\"projectable-form-wrapper\"\n  (keyup.enter)=\"save($event)\"\n  (keyup.escape)=\"closeModal(false)\"\n  tabindex=\"0\"\n  >\n  <lib-form-header\n    [data]=\"formData\"\n    [title]=\"(formData.id ? 'Terminator Details' : 'Create Terminator')\"\n    [moreActions]=\"moreActions\"\n    [multiActions]=\"multiActions\"\n    (actionRequested)=\"headerActionRequested($event)\"\n    (multiActionRequested)=\"multiActionRequested($event)\"\n    [(formView)]=\"formView\"\n    [saveDisabled]=\"svc.saveDisabled || formDataInvalid || formPermissionSaveDisabled\"\n    [saveTooltip]=\"formPermissionSaveTooltip\"\n    [strictReadonlyUi]=\"useStrictReadonlyForm\"\n  ></lib-form-header>\n  <div class=\"terminator-form-container projectable-form-container\">\n    <div class=\"projectable-form-main-column form-group-row\" [hidden]=\"formView !== 'simple'\">\n      <div class=\"form-group-column one-half\">\n        <lib-form-field-container\n          [title]=\"'Service'\"\n          [contentStyle]=\"'z-index: 10003'\"\n          >\n          <input class=\"form-field-input read-only\" [(ngModel)]=\"selectedServiceNamedAttribute\" [disabled]=\"true\"/>\n          <!--<lib-tag-selector\n          [(selectedNamedAttributes)]=\"svc.selectedServiceNamedAttributes\"\n          [availableNamedAttributes]=\"svc.serviceNamedAttributes\"\n          [placeholder]=\"'Select a service'\"\n          (addNamedAttribute)=\"serviceAttributeChanged($event)\"\n          (namedAttributeRemoved)=\"serviceAttributeChanged()\"\n        ></lib-tag-selector>-->\n      </lib-form-field-container>\n      <lib-form-field-container\n        [title]=\"'Router'\"\n        [contentStyle]=\"'z-index: 10002'\"\n        >\n        <input class=\"form-field-input read-only\" [(ngModel)]=\"selectedRouterNamedAttribute\" [disabled]=\"true\"/>\n        <!--<lib-tag-selector\n        [(selectedNamedAttributes)]=\"svc.selectedRouterNamedAttributes\"\n        [availableNamedAttributes]=\"svc.routerNamedAttributes\"\n        [placeholder]=\"'Select a router'\"\n        (addNamedAttribute)=\"routerAttributeChanged($event)\"\n        (namedAttributeRemoved)=\"routerAttributeChanged()\"\n      ></lib-tag-selector>-->\n    </lib-form-field-container>\n    <lib-form-field-container\n      [title]=\"'Identity'\"\n      [contentStyle]=\"'z-index: 10001'\"\n      >\n      <input class=\"form-field-input read-only\" [(ngModel)]=\"selectedIdentityNamedAttribute\" [disabled]=\"true\"/>\n      <!--<lib-tag-selector\n      [(selectedNamedAttributes)]=\"svc.selectedIdentityNamedAttributes\"\n      [availableNamedAttributes]=\"svc.identityNamedAttributes\"\n      [placeholder]=\"'Select an identity'\"\n      (addNamedAttribute)=\"identityAttributeChanged($event)\"\n      (namedAttributeRemoved)=\"identityAttributeChanged()\"\n    ></lib-tag-selector>-->\n  </lib-form-field-container>\n</div>\n<div class=\"form-group-column one-half\">\n  <lib-form-field-container\n    [title]=\"'Address'\"\n    [contentStyle]=\"'z-index: 1001'\"\n    >\n    <input class=\"form-field-input read-only\" [disabled]=\"true\" [(ngModel)]=\"formData.address\"/>\n  </lib-form-field-container>\n  <lib-form-field-container\n    [showHeader]=\"false\"\n    [layout]=\"'row'\"\n    [contentStyle]=\"'z-index: 1001'\"\n    >\n    <div class=\"form-field-label-container\">\n      <span class=\"form-field-title\">Binding</span>\n      <input class=\"form-field-input\" [disabled]=\"true\" [(ngModel)]=\"formData.binding\"/>\n    </div>\n    <div class=\"form-field-label-container\">\n      <span class=\"form-field-title\">Identity Secret</span>\n      <input class=\"form-field-input\" [disabled]=\"true\" [(ngModel)]=\"formData.identitySecret\"/>\n    </div>\n  </lib-form-field-container>\n  <lib-form-field-container\n    [layout]=\"'row'\"\n    [showHeader]=\"false\"\n    >\n    <div class=\"form-field-label-container\">\n      <span class=\"form-field-title\">Hosting Cost</span>\n      <input class=\"form-field-input\" [disabled]=\"true\" [(ngModel)]=\"formData.cost\" type=\"number\"/>\n    </div>\n    <div class=\"form-field-label-container\">\n      <span class=\"form-field-title\">Precedence</span>\n      <select\n        [(ngModel)]=\"formData.precedence\"\n        [disabled]=\"true\"\n        id=\"hostingPrecedence\"\n        class=\"form-field-dropdown read-only\"\n        >\n        <option value=\"default\">Default</option>\n        <option value=\"required\">Required</option>\n        <option value=\"failed\">Failed</option>\n      </select>\n    </div>\n  </lib-form-field-container>\n</div>\n</div>\n@if (formView === 'raw') {\n  <div class=\"form-group-column\">\n    @if (formData) {\n      <lib-json-view [(data)]=\"formData\" [readOnly]=\"useStrictReadonlyForm\"></lib-json-view>\n    }\n  </div>\n}\n</div>\n</div>\n@if (isLoading) {\n  <lib-loading-indicator [isLoading]=\"isLoading\"></lib-loading-indicator>\n}\n","import {AfterViewInit, Component, ContentChild, EventEmitter, HostListener, Input, Output} from '@angular/core';\nimport {ExtendableComponent} from \"../../extendable/extendable.component\";\nimport {ProjectableForm} from \"../../projectable-forms/projectable-form.class\";\n\nexport type CallbackResults = { passed: boolean, errors?: any }\nexport type ValidatorCallback = (data: any, payload?:any) => Promise<CallbackResults>;\n\n@Component({\n    selector: 'lib-list-page-form',\n    template: `\n        @if (_show) {\n          <div class=\"fullModal\" [ngClass]=\"formClass\">\n            <div class=\"buttonBall close icon-close\" (click)=\"closeThisForm()\">\n              <div class=\"buttonLabel\">ESC</div>\n            </div>\n            <div class=\"innerblock\">\n              <ng-container #beforetitleext></ng-container>\n              <div class=\"title\">{{title}}</div>\n              <ng-container #aftertitleext></ng-container>\n              <ng-container #beforesubtitleext></ng-container>\n              <div class=\"subtitle\">{{subTitle}}</div>\n              <ng-container #aftersubtitleext></ng-container>\n              <ng-content></ng-content>\n              <ng-container #beforebuttonsext></ng-container>\n              @if (showButtons) {\n                <div class=\"buttons\">\n                  <div class=\"linkButton closer\" (click)=\"closeThisForm()\">Oops, No get me out of here</div>\n                  <div id=\"SaveButton\" class=\"button\" (click)=\"updateItem()\">Save</div>\n                </div>\n              }\n              <ng-container #afterbuttonsext></ng-container>\n            </div>\n          </div>\n        }\n        `,\n    styleUrls: ['./list-page-form.component.scss'],\n    standalone: false\n})\nexport class ListPageFormComponent extends ExtendableComponent implements AfterViewInit {\n\n    @ContentChild('projectable') public contentChild!: ProjectableForm;\n    @Input() title = 'Form Title';\n    @Input() subTitle = 'Form Subtitle';\n    @Input() buttonLabel = 'Create';\n    @Input() showButtons = true;\n    @Input() formClass: any | undefined;\n    @Input() validator: ValidatorCallback | undefined;\n    @Output() close = new EventEmitter<void>();\n    @Output() afterOpen = new EventEmitter<void>();\n    @Output() update = new EventEmitter<any>();\n    @Output() showChange = new EventEmitter<boolean>()\n\n    constructor() {\n        super();\n    }\n\n    @Input() set data(d: any) {\n        if (this.contentChild)\n            this.contentChild.formData = d;\n    }\n\n    _show = false;\n\n    @Input() set show(val: boolean) {\n        if (val && !this._show) this.openThisForm();\n    }\n\n    @HostListener('document:keydown.escape', ['$event']) onKeydownHandler(event: KeyboardEvent) {\n        this.closeThisForm();\n    }\n\n    override ngAfterViewInit() {\n        super.ngAfterViewInit();\n    }\n\n    closeThisForm() {\n        this.close.emit();\n        this.contentChild?.clear();\n        this._show = false;\n        this.showChange.emit(false);\n    }\n\n    openThisForm() {\n        this._show = true;\n        this.afterOpen.emit();\n    }\n\n    updateItem() {\n        if (this.validator) {\n            this.validator(this.contentChild.formData)\n                .then((results: CallbackResults) => {\n                    if (results.passed) this.updateAndClose();\n                    else this.contentChild.errors = results.errors;\n                })\n        } else this.updateAndClose();\n    }\n\n    updateAndClose() {\n        this.update.emit(this.contentChild.formData);\n        this.closeThisForm();\n    }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport _ from 'lodash';\n\n// statusReason explains WHY a link is in a broken (status === 2) state so the renderer\n// can show router-reported issues differently from tunneler-side connectivity problems.\ntype LinkStatusReason = 'router-down' | 'tunneler-unreachable' | 'misconfigured' | null;\n\ninterface LinkState {\n    state: number; // 1 = active, -1/0 = available/offline, 2 = broken\n    reason: LinkStatusReason;\n}\n\nclass Link {\n    source;\n    sourceName;\n    target;\n    targetName;\n    weight;\n    status;\n    statusReason: LinkStatusReason = null;\n    linkType: 'active-circuit' | 'fabric-link' | 'inferred' | 'endpoint-connection' = 'inferred';\n}\n\nclass Node {\n    id;\n    name;\n    provider;\n    group;\n    posx;\n    posy;\n    status;\n    online;\n    apiSession;\n    routerConnection;\n    tunnelerEnabled;\n    os;\n    mfaEnabled;\n    type;\n    usage;\n    routerType?: 'edge-router' | 'transit-router';\n    // brokenCause drives the broken node iconography; connectivity is the human-readable\n    // line shown in the hover tooltip. Both are null/empty when the node is healthy.\n    brokenCause?: LinkStatusReason;\n    connectivity?: string;\n    connState?: 'online' | 'offline' | 'unknown' | 'unenrolled';\n}\n\nclass ServiceHostNode {\n    id;\n    name;\n    group;\n    posx;\n    posy;\n    interceptIps;\n    interceptPorts;\n    interceptProtocols;\n    forwardedHost;\n    hostNames;\n    forwardedPort;\n    hostPorts;\n    forwardedProtocol;\n    hostProtocols;\n    status;\n    type;\n    usage;\n    intercept = [];\n    configAddress;\n    configPorts;\n}\n\nexport class ServiceData {\n    id;\n    name;\n}\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class IdentityServicePathHelper {\n    posy_for_group3 = 0;\n\n    constructor(\n    ) {}\n\n    public getEndpointGraphObj(\n        endpoint,\n        bindIdnetities,\n        edgerouters,\n        selectedServiceOb,\n        serviceConfigs,\n        filterText = '',\n        // New fabric topology parameters\n        hostEdgeRouters: any[] = [],\n        fabricRouters: any[] = [],\n        routerTypesMap: Map<string, string> = new Map(),\n        fabricLinks: any[] = [],\n        serviceCircuits: any[] = [],\n        serviceTerminators: any[] = [],\n        fabricApiAvailable = false,\n        availableWidth = 900\n    ) {\n        const rootOb = new RootJson();\n\n        // If fabric API is not available, use the legacy layout\n        if (!fabricApiAvailable) {\n            return this.buildLegacyGraph(\n                endpoint, bindIdnetities, edgerouters,\n                selectedServiceOb, serviceConfigs\n            );\n        }\n\n        // === GROUP 1: Dialing Identity ===\n        let endpointNodeOb = null;\n        const bindNode = bindIdnetities.find((nd) => nd.id === endpoint.id);\n        if (!bindNode) {\n            endpointNodeOb = createEndpoint(endpoint);\n            endpointNodeOb.group = '1';\n            endpointNodeOb.posx = 50;\n            endpointNodeOb.posy = 200;\n            rootOb.addNode(endpointNodeOb);\n        }\n\n        // === GROUP 2d: Dial-side Edge Routers ===\n        const dialEdgeRouterIds = new Set<string>();\n        const group2dNodes = [];\n        _.isArray(edgerouters) && edgerouters.forEach((nd) => {\n            const nodeOb = createERNode(nd);\n            nodeOb.group = '2d';\n            nodeOb.routerType = 'edge-router';\n            dialEdgeRouterIds.add(nd.id);\n            group2dNodes.push(nodeOb);\n            rootOb.addNode(nodeOb);\n        });\n\n        // === GROUP 2h: Host-side Edge Routers ===\n        const hostEdgeRouterIds = new Set<string>();\n        const group2hNodes = [];\n        _.isArray(hostEdgeRouters) && hostEdgeRouters.forEach((nd) => {\n            if (dialEdgeRouterIds.has(nd.id)) {\n                // Router is on both sides — keep it in the public column\n                // but track it as host-side too for link creation\n                hostEdgeRouterIds.add(nd.id);\n                return;\n            }\n            const nodeOb = createERNode(nd);\n            nodeOb.group = '2h';\n            nodeOb.routerType = 'edge-router';\n            hostEdgeRouterIds.add(nd.id);\n            group2hNodes.push(nodeOb);\n            rootOb.addNode(nodeOb);\n        });\n\n        // Also check terminators for host-side routers not yet captured\n        serviceTerminators.forEach((term) => {\n            const routerId = term.routerId || term.router?.id;\n            if (routerId && !dialEdgeRouterIds.has(routerId) && !hostEdgeRouterIds.has(routerId)) {\n                const fabricRouter = fabricRouters.find(r => r.id === routerId);\n                if (fabricRouter) {\n                    const rType = routerTypesMap.get(routerId) || 'edge-router';\n                    if (rType === 'edge-router') {\n                        const nodeOb = createFabricRouterNode(fabricRouter, rType);\n                        nodeOb.group = '2h';\n                        hostEdgeRouterIds.add(routerId);\n                        group2hNodes.push(nodeOb);\n                        rootOb.addNode(nodeOb);\n                    }\n                }\n            }\n        });\n\n        // Transit routers excluded for now — can be added in a future iteration\n        const group2tNodes = [];\n\n        // === GROUP 4: Service Node ===\n        const group4Nodes = [];\n        const srNode = new ServiceHostNode();\n        srNode.id = selectedServiceOb.id;\n        srNode.name = selectedServiceOb.name;\n        srNode.intercept = serviceConfigAlias(serviceConfigs);\n        buildServiceDetails(srNode, selectedServiceOb, serviceConfigs);\n        srNode.type = 'Config Service';\n        srNode.group = '4';\n        srNode.status = '1';\n        group4Nodes.push(srNode);\n        rootOb.addNode(srNode);\n\n        // === GROUP 3: Hosting Identities ===\n        const group3Ids = [];\n        _.isArray(bindIdnetities) && bindIdnetities.forEach((ePoint) => {\n            if (group3Ids.indexOf(ePoint.id) < 0) {\n                group3Ids.push(ePoint.id);\n            }\n        });\n\n        const group3Nodes = [];\n        group3Ids.forEach((nid) => {\n            // Skip if this identity is already in the graph as a router\n            if (dialEdgeRouterIds.has(nid) || hostEdgeRouterIds.has(nid)) {\n                return;\n            }\n            const grp3Node = findEndpoint(nid, bindIdnetities);\n            if (grp3Node) {\n                grp3Node.group = '3';\n                group3Nodes.push(grp3Node);\n                rootOb.addNode(grp3Node);\n            }\n        });\n\n        // === POSITIONING ===\n        // Dynamically distribute 5 columns across available width\n        // Build column list dynamically — only include groups that have nodes\n        const columnDefs = [\n            { groups: ['1'], nodes: endpointNodeOb ? [endpointNodeOb] : [] },\n            { groups: ['2d', '2dh'], nodes: group2dNodes },\n            { groups: ['2h'], nodes: group2hNodes },\n            { groups: ['3'], nodes: group3Nodes },\n            { groups: ['4'], nodes: group4Nodes },\n        ];\n        const activeColumns = columnDefs.filter(col => col.nodes.length > 0);\n\n        const padding = 100;\n        const usableWidth = availableWidth - (padding * 2);\n        const gaps = Math.max(activeColumns.length - 1, 1);\n        const colSpacing = usableWidth / gaps;\n\n        // Assign X positions to active columns\n        const POS_X: Record<string, number> = {};\n        activeColumns.forEach((col, i) => {\n            const x = padding + colSpacing * i;\n            col.groups.forEach(g => { POS_X[g] = x; });\n        });\n        // Fallback for groups that might not be in active columns\n        if (!POS_X['2t']) POS_X['2t'] = POS_X['2h'] || POS_X['2d'] || padding;\n        if (!POS_X['2dh']) POS_X['2dh'] = POS_X['2d'] || padding;\n        if (!POS_X['2h']) POS_X['2h'] = POS_X['2d'] || padding;\n\n        // Compute available height based on the tallest group\n        const allGroups = activeColumns.map(col => ({ nodes: col.nodes, x: POS_X[col.groups[0]] }));\n        const maxCount = Math.max(...allGroups.map(g => g.nodes.length));\n        const MIN_Y = 55;\n        const availableHeight = Math.max(350, maxCount * 70);\n\n        // Position all groups with the same available height so they align\n        allGroups.forEach((g) => {\n            positionGroupNodes(g.nodes, g.x, availableHeight);\n        });\n\n        // Position shared routers (2dh) at center x\n        rootOb.nodes.forEach((nd) => {\n            if (nd.group === '2dh') {\n                nd.posx = POS_X['2dh'];\n            }\n        });\n\n        // === LINKS ===\n\n        // Build set of active circuit hops for highlighting\n        // Only include circuits for THIS specific identity\n        const activeCircuitHops = new Set<string>();\n        const endpointId = endpoint.id;\n        serviceCircuits.forEach((circuit) => {\n            const clientId = circuit.tags?.clientId || circuit.clientId || circuit.client?.id;\n            if (clientId !== endpointId) return; // skip circuits for other identities\n\n            const pathNodes = circuit.path?.nodes || circuit.path || [];\n            const hostId = circuit.tags?.hostId || circuit.host?.id;\n\n            // Client -> first router\n            if (pathNodes.length > 0) {\n                const firstRouterId = pathNodes[0]?.id || pathNodes[0];\n                activeCircuitHops.add(hopKey(endpointId, firstRouterId));\n            }\n\n            // Router -> Router hops\n            for (let i = 0; i < pathNodes.length - 1; i++) {\n                const fromId = pathNodes[i]?.id || pathNodes[i];\n                const toId = pathNodes[i + 1]?.id || pathNodes[i + 1];\n                activeCircuitHops.add(hopKey(fromId, toId));\n            }\n\n            // Last router -> host identity\n            if (pathNodes.length > 0 && hostId) {\n                const lastRouterId = pathNodes[pathNodes.length - 1]?.id || pathNodes[pathNodes.length - 1];\n                // If the last router IS the host (tunnel routers), mark router -> service as active\n                if (lastRouterId === hostId) {\n                    activeCircuitHops.add(hopKey(hostId, selectedServiceOb.id));\n                } else {\n                    activeCircuitHops.add(hopKey(lastRouterId, hostId));\n                    activeCircuitHops.add(hopKey(hostId, selectedServiceOb.id));\n                }\n            }\n        });\n\n        // Per-host connectivity is derived from the identity's own controller-reported state\n        // (hasEdgeRouterConnection / edgeRouterConnectionStatus -> routerConnection/apiSession),\n        // NOT from terminators: real ziti terminators carry no hosting-identity id (identity:\"\",\n        // no hostId), so a terminator can't be mapped back to the host that created it. Terminator\n        // COUNT remains a service-level health hint only.\n\n        // Annotate node connectivity so the renderer can pick a broken icon and the tooltip can\n        // explain the cause. A hosting tunneler that is enrolled but unreachable, or expected to\n        // host (Bind policy) yet has no terminator, is \"broken\".\n        group3Nodes.forEach((node) => {\n            if (node.status === 'Un-Registered') {\n                node.brokenCause = 'misconfigured';\n                node.connectivity = 'Not enrolled';\n            } else if (node.apiSession === 'No' || node.routerConnection === 'No') {\n                node.brokenCause = 'tunneler-unreachable';\n                node.connectivity = 'Configured but not connected (offline or blocked)';\n            } else {\n                node.connectivity = 'Connected';\n            }\n        });\n        if (endpointNodeOb && endpointNodeOb.status !== 'Un-Registered') {\n            if (endpointNodeOb.apiSession === 'No' || endpointNodeOb.routerConnection === 'No') {\n                endpointNodeOb.brokenCause = 'tunneler-unreachable';\n                endpointNodeOb.connectivity = 'Configured but not connected (offline or blocked)';\n            } else {\n                endpointNodeOb.connectivity = 'Connected';\n            }\n        }\n\n        // Build fabric link lookup\n        const fabricLinkSet = new Set<string>();\n        fabricLinks.forEach((link) => {\n            const srcId = link.sourceRouter?.id || link.sourceRouterId || link.src?.id;\n            const dstId = link.destRouter?.id || link.destRouterId || link.dst?.id;\n            if (srcId && dstId) {\n                fabricLinkSet.add(hopKey(srcId, dstId));\n            }\n        });\n\n        // 1. Identity -> Dial-side Edge Routers (Group 1 -> 2d/2dh)\n        if (endpointNodeOb !== null) {\n            rootOb.nodes.forEach((nd) => {\n                if (nd.group === '2d' || nd.group === '2dh') {\n                    const lnk = new Link();\n                    lnk.source = endpointNodeOb.id;\n                    lnk.sourceName = endpointNodeOb.name;\n                    lnk.target = nd.id;\n                    lnk.targetName = nd.name;\n                    applyLinkState(lnk, getEndpointToRouterLinkState(endpointNodeOb, nd));\n                    lnk.linkType = activeCircuitHops.has(hopKey(endpointNodeOb.id, nd.id))\n                        ? 'active-circuit' : 'endpoint-connection';\n                    rootOb.addLink(lnk);\n                }\n            });\n        }\n\n        // 2. Router-to-Router links — only show links on actual circuit paths\n        //    or shortest fabric-link paths between dial-side and host-side routers.\n        const routerGroups = ['2d', '2dh', '2t', '2h'];\n        const routerNodeMap = new Map<string, any>();\n        rootOb.nodes.forEach(nd => {\n            if (routerGroups.includes(nd.group)) {\n                routerNodeMap.set(nd.id, nd);\n            }\n        });\n\n        // Collect router-to-router hops that should be drawn\n        const relevantHops = new Set<string>();\n        let hasAnyFabricRouterLink = false;\n\n        // a) Always include hops from active circuit paths\n        serviceCircuits.forEach((circuit) => {\n            const pathNodes = circuit.path?.nodes || circuit.path || [];\n            for (let i = 0; i < pathNodes.length - 1; i++) {\n                const fromId = pathNodes[i]?.id || pathNodes[i];\n                const toId = pathNodes[i + 1]?.id || pathNodes[i + 1];\n                if (routerNodeMap.has(fromId) && routerNodeMap.has(toId)) {\n                    relevantHops.add(hopKey(fromId, toId));\n                }\n            }\n        });\n\n        // b) For potential paths: find shortest fabric-link paths from each\n        //    dial-side router to each host-side router using BFS\n        const dialSideIds = new Set([...dialEdgeRouterIds]);\n        const hostSideIds = new Set([...hostEdgeRouterIds]);\n\n        // Build adjacency list from fabric links (only among visible routers)\n        const adjacency = new Map<string, Set<string>>();\n        fabricLinks.forEach((link) => {\n            const srcId = link.sourceRouter?.id || link.sourceRouterId || link.src?.id;\n            const dstId = link.destRouter?.id || link.destRouterId || link.dst?.id;\n            if (srcId && dstId && routerNodeMap.has(srcId) && routerNodeMap.has(dstId)) {\n                if (!adjacency.has(srcId)) adjacency.set(srcId, new Set());\n                if (!adjacency.has(dstId)) adjacency.set(dstId, new Set());\n                adjacency.get(srcId).add(dstId);\n                adjacency.get(dstId).add(srcId);\n            }\n        });\n\n        // BFS from each dial-side router to find shortest path to any host-side router\n        dialSideIds.forEach((startId) => {\n            if (!adjacency.has(startId)) return;\n            const visited = new Set<string>();\n            const parent = new Map<string, string>();\n            const queue: string[] = [startId];\n            visited.add(startId);\n\n            while (queue.length > 0) {\n                const current = queue.shift();\n                if (current !== startId && hostSideIds.has(current)) {\n                    // Trace back the path and add all hops\n                    let node = current;\n                    while (parent.has(node)) {\n                        const prev = parent.get(node);\n                        relevantHops.add(hopKey(prev, node));\n                        node = prev;\n                    }\n                    continue; // found one host-side target, keep searching for others\n                }\n                const neighbors = adjacency.get(current);\n                if (neighbors) {\n                    neighbors.forEach((neighbor) => {\n                        if (!visited.has(neighbor)) {\n                            visited.add(neighbor);\n                            parent.set(neighbor, current);\n                            queue.push(neighbor);\n                        }\n                    });\n                }\n            }\n        });\n\n        // Now create links only for relevant hops\n        relevantHops.forEach((key) => {\n            const [id1, id2] = key.split('::');\n            const r1 = routerNodeMap.get(id1);\n            const r2 = routerNodeMap.get(id2);\n            if (!r1 || !r2) return;\n\n            // Skip links between routers on the same side\n            if (r1.group === r2.group) return;\n            const hostGroups = ['2h', '2dh'];\n            if (hostGroups.includes(r1.group) && hostGroups.includes(r2.group)) return;\n            const dialGroups = ['2d', '2dh'];\n            if (dialGroups.includes(r1.group) && dialGroups.includes(r2.group)) return;\n\n            hasAnyFabricRouterLink = true;\n            const isActiveCircuit = activeCircuitHops.has(key);\n            const lnk = new Link();\n            lnk.source = r1.id;\n            lnk.sourceName = r1.name;\n            lnk.target = r2.id;\n            lnk.targetName = r2.name;\n            lnk.linkType = isActiveCircuit ? 'active-circuit' : 'fabric-link';\n            const r1Up = r1.online === 'Yes' || r1.status === 'PROVISIONED';\n            const r2Up = r2.online === 'Yes' || r2.status === 'PROVISIONED';\n            if (isActiveCircuit) {\n                applyLinkState(lnk, { state: 1, reason: null });\n            } else if (!r1Up || !r2Up) {\n                applyLinkState(lnk, { state: 2, reason: 'router-down' });\n            } else {\n                applyLinkState(lnk, { state: 1, reason: null });\n            }\n            rootOb.addLink(lnk);\n        });\n\n        // If no fabric links connect dial to host side, add inferred connections\n        if (!hasAnyFabricRouterLink && group2dNodes.length > 0 && (group2hNodes.length > 0 || group3Nodes.length > 0)) {\n            const targetNodes = group2hNodes.length > 0 ? group2hNodes : group3Nodes;\n            group2dNodes.forEach((dialRouter) => {\n                targetNodes.forEach((targetNode) => {\n                    const lnk = new Link();\n                    lnk.source = dialRouter.id;\n                    lnk.sourceName = dialRouter.name;\n                    lnk.target = targetNode.id;\n                    lnk.targetName = targetNode.name;\n                    lnk.linkType = 'inferred';\n                    lnk.status = -1;\n                    lnk.weight = 5;\n                    rootOb.addLink(lnk);\n                });\n            });\n        }\n\n        // 3. Host-side Edge Routers -> Hosting Identities (Group 2h/2dh -> 3)\n        // Use terminators to map which router connects to which hosting identity\n        const terminatorRouterToHost = new Map<string, Set<string>>();\n        serviceTerminators.forEach((term) => {\n            const routerId = term.routerId || term.router?.id;\n            const hostId = (term.hostId && term.hostId.trim()) ||\n                (term.identity && typeof term.identity === 'string' && term.identity.trim()) ||\n                term.identity?.id || term.identityId;\n            if (routerId && hostId) {\n                if (!terminatorRouterToHost.has(routerId)) {\n                    terminatorRouterToHost.set(routerId, new Set());\n                }\n                terminatorRouterToHost.get(routerId).add(hostId);\n            }\n        });\n\n        const hostRouterNodes = rootOb.nodes.filter(nd =>\n            nd.group === '2h' || nd.group === '2dh' || (nd.group === '2d' && hostEdgeRouterIds.has(nd.id))\n        );\n        if (hostRouterNodes.length > 0 && group3Nodes.length > 0) {\n            let hasTerminatorLink = false;\n            hostRouterNodes.forEach((routerNode) => {\n                const hostIds = terminatorRouterToHost.get(routerNode.id);\n                if (hostIds) {\n                    group3Nodes.forEach((hostNode) => {\n                        if (hostIds.has(hostNode.id)) {\n                            hasTerminatorLink = true;\n                            const lnk = new Link();\n                            lnk.source = routerNode.id;\n                            lnk.sourceName = routerNode.name;\n                            lnk.target = hostNode.id;\n                            lnk.targetName = hostNode.name;\n                            applyLinkState(lnk, getEndpointToRouterLinkState(hostNode, routerNode));\n                            lnk.linkType = activeCircuitHops.has(hopKey(routerNode.id, hostNode.id))\n                                ? 'active-circuit' : 'endpoint-connection';\n                            rootOb.addLink(lnk);\n                        }\n                    });\n                }\n            });\n\n            // If no terminator-based links, add inferred connections using actual status\n            if (!hasTerminatorLink) {\n                hostRouterNodes.forEach((routerNode) => {\n                    group3Nodes.forEach((hostNode) => {\n                        const lnk = new Link();\n                        lnk.source = routerNode.id;\n                        lnk.sourceName = routerNode.name;\n                        lnk.target = hostNode.id;\n                        lnk.targetName = hostNode.name;\n                        applyLinkState(lnk, getEndpointToRouterLinkState(hostNode, routerNode));\n                        lnk.linkType = activeCircuitHops.has(hopKey(routerNode.id, hostNode.id))\n                            ? 'active-circuit'\n                            : (lnk.status === 1 ? 'endpoint-connection' : 'inferred');\n                        rootOb.addLink(lnk);\n                    });\n                });\n            }\n        } else if (group3Nodes.length > 0) {\n            // No host-side routers at all — connect dial routers directly to hosting identities (inferred)\n            const dialRouterNodes = rootOb.nodes.filter(nd => nd.group === '2d' || nd.group === '2dh');\n            dialRouterNodes.forEach((dialRouter) => {\n                group3Nodes.forEach((hostNode) => {\n                    // Only add if no link already exists between them\n                    const exists = rootOb.links.find(l =>\n                        (l.source === dialRouter.id && l.target === hostNode.id) ||\n                        (l.source === hostNode.id && l.target === dialRouter.id)\n                    );\n                    if (!exists) {\n                        const lnk = new Link();\n                        lnk.source = dialRouter.id;\n                        lnk.sourceName = dialRouter.name;\n                        lnk.target = hostNode.id;\n                        lnk.targetName = hostNode.name;\n                        applyLinkState(lnk, getEndpointToRouterLinkState(hostNode, dialRouter));\n                        lnk.linkType = lnk.status === 1 ? 'endpoint-connection' : 'inferred';\n                        rootOb.addLink(lnk);\n                    }\n                });\n            });\n        }\n\n        // 4. Hosting Identities/Routers -> Service (Group 3 or host routers -> 4)\n        // Collect all nodes that host this service (either group 3 identities or routers that are also hosts)\n        const hostingNodes = [...group3Nodes];\n        // Add routers that are also hosting identities (tunnel routers)\n        bindIdnetities.forEach((bi) => {\n            if (dialEdgeRouterIds.has(bi.id) || hostEdgeRouterIds.has(bi.id)) {\n                const routerNode = rootOb.nodes.find(n => n.id === bi.id);\n                if (routerNode && !hostingNodes.find(h => h.id === bi.id)) {\n                    hostingNodes.push(routerNode);\n                }\n            }\n        });\n\n        group4Nodes.forEach((serviceNode) => {\n            hostingNodes.forEach((hostNode) => {\n                const lnk = new Link();\n                lnk.source = hostNode.id;\n                lnk.sourceName = hostNode.name;\n                lnk.target = serviceNode.id;\n                lnk.targetName = serviceNode.name;\n                lnk.weight = 1;\n                applyLinkState(lnk, getServiceToEndpointLinkState(hostNode, serviceNode));\n                lnk.linkType = activeCircuitHops.has(hopKey(hostNode.id, serviceNode.id))\n                    ? 'active-circuit' : 'endpoint-connection';\n                rootOb.addLink(lnk);\n            });\n        });\n\n        // Final cleanup: remove any links between nodes on the same side\n        const nodeGroupMap = new Map<string, string>();\n        rootOb.nodes.forEach(nd => nodeGroupMap.set(nd.id, nd.group));\n        const hostSide = new Set(['2h', '2dh']);\n        const dialSide = new Set(['2d', '2dh']);\n        rootOb.links = rootOb.links.filter((lnk) => {\n            const srcGroup = nodeGroupMap.get(lnk.source) || '';\n            const tgtGroup = nodeGroupMap.get(lnk.target) || '';\n            if (hostSide.has(srcGroup) && hostSide.has(tgtGroup)) return false;\n            if (dialSide.has(srcGroup) && dialSide.has(tgtGroup)) return false;\n            return true;\n        });\n\n        // Collapse parallel links between the same node pair. A router that is on BOTH the dial\n        // and host side can otherwise produce two links to the same node — e.g. an 'available'\n        // inferred link and a 'router-down' link — which overlap and render as mixed dashed/dotted.\n        // Keep the single most-significant link per pair.\n        const linkSeverity = (l) => {\n            if (l.linkType === 'active-circuit') return 4; // live traffic wins\n            if (l.status === 2) return 3;                  // broken (router-down / tunneler-unreachable)\n            if (l.status === 1) return 2;                  // connected\n            return 1;                                      // available / inferred\n        };\n        const bestLinkByPair = new Map<string, any>();\n        rootOb.links.forEach((lnk) => {\n            const key = [lnk.source, lnk.target].sort().join('::');\n            const existing = bestLinkByPair.get(key);\n            if (!existing || linkSeverity(lnk) > linkSeverity(existing)) {\n                bestLinkByPair.set(key, lnk);\n            }\n        });\n        rootOb.links = Array.from(bestLinkByPair.values());\n\n        return rootOb;\n    }\n\n    /**\n     * Fallback: builds the graph using the original policy-derived approach\n     * when fabric API data is not available.\n     */\n    private buildLegacyGraph(endpoint, bindIdnetities, edgerouters, selectedServiceOb, serviceConfigs) {\n        let endpointNodeOb = null;\n        const rootOb = new RootJson();\n        const bindNode = bindIdnetities.find((nd) => nd.id === endpoint.id);\n        if (!bindNode) {\n            endpointNodeOb = createEndpoint(endpoint);\n            endpointNodeOb.group = '1';\n            endpointNodeOb.posx = 50;\n            endpointNodeOb.posy = 200;\n            rootOb.addNode(endpointNodeOb);\n        }\n        let publicRouterNodes = [];\n        let posy = 0;\n        _.isArray(edgerouters) && edgerouters.forEach((nd) => {\n            const nodeOb = createERNode(nd);\n            nodeOb.group = '2a';\n            nodeOb.posx = 250;\n            posy = posy + 100;\n            nodeOb.posy = posy;\n            publicRouterNodes.push(nodeOb);\n            rootOb.addNode(nodeOb);\n        });\n\n        const posx_for_group3 = 550;\n        this.posy_for_group3 = 0;\n        const group3Ids = [];\n        let posy_for_group4 = 150;\n        const group4Nodes = [];\n        const srNode = new ServiceHostNode();\n        srNode.id = selectedServiceOb.id;\n        srNode.name = selectedServiceOb.name;\n        srNode.intercept = serviceConfigAlias(serviceConfigs);\n        buildServiceDetails(srNode, selectedServiceOb, serviceConfigs);\n        srNode.type = 'Config Service';\n        srNode.group = '4';\n        srNode.status = '1';\n        group4Nodes.push(srNode);\n        rootOb.addNode(srNode);\n        _.isArray(bindIdnetities) && bindIdnetities.forEach((ePoint) => {\n            if (group3Ids.indexOf(ePoint.id) < 0) {\n                group3Ids.push(ePoint.id);\n            }\n        });\n\n        this.posy_for_group3 = 165;\n        let grp3Yincrement = 100;\n\n        const group3Nodes = [];\n        let countgrp3 = 0;\n        group3Ids.find((nid) => {\n            const grp3Node = findEndpoint(nid, bindIdnetities);\n            if (grp3Node) {\n                grp3Node.group = '3';\n                grp3Node.posx = posx_for_group3;\n                grp3Node.posy = this.posy_for_group3;\n                this.posy_for_group3 = this.posy_for_group3 + 125;\n                group3Nodes.push(grp3Node);\n                countgrp3++;\n                rootOb.addNode(grp3Node);\n            }\n        });\n\n        grp3Yincrement = countgrp3 > 2 ? 75 : 100;\n        if (countgrp3 === 1) {\n            this.posy_for_group3 = 160;\n        } else if (countgrp3 === 2) {\n            this.posy_for_group3 = 120;\n        } else if (countgrp3 >= 5) {\n            this.posy_for_group3 = 50;\n            grp3Yincrement = 75;\n        } else {\n            this.posy_for_group3 = 73;\n        }\n\n        if (group3Nodes) {\n            group3Nodes.find((node3) => {\n                if (node3.group === '3') {\n                    node3.posy = this.posy_for_group3;\n                    this.posy_for_group3 = this.posy_for_group3 + grp3Yincrement;\n                }\n            });\n        }\n\n        if (group4Nodes && group4Nodes.length === 1) {\n            posy_for_group4 = 200;\n        }\n\n        group4Nodes.find((nd4) => {\n            nd4.posx = posx_for_group3 + 175;\n            nd4.posy = posy_for_group4;\n            posy_for_group4 = posy_for_group4 + 100;\n        });\n\n        let countPublicNodes = 0;\n        rootOb.nodes.find((pNode) => {\n            if (pNode.group.includes('2')) {\n                countPublicNodes = countPublicNodes + 1;\n            }\n        });\n\n        publicRouterNodes = [];\n        let posy_group2 = 100;\n        let yIncrement = 0;\n        if (countPublicNodes === 1) {\n            posy_group2 = 200;\n        } else if (countPublicNodes >= 2 && countPublicNodes < 5) {\n            posy_group2 = 60;\n            yIncrement = 80;\n        } else if (countPublicNodes >= 5 && countPublicNodes < 10) {\n            posy_group2 = 40;\n            yIncrement = 50;\n        } else {\n            posy_group2 = 40;\n            yIncrement = 40;\n        }\n\n        rootOb.nodes.find((publicNode) => {\n            if (publicNode.group.includes('2')) {\n                publicNode.posx = 275;\n                publicNode.posy = posy_group2;\n                posy_group2 = posy_group2 + yIncrement;\n                publicRouterNodes.push(publicNode);\n                if (publicNode.group === '2b') {\n                    group3Nodes.push(publicNode);\n                }\n            }\n        });\n\n        for (let k1 = 0; k1 < rootOb.nodes.length; k1++) {\n            const nd = rootOb.nodes[k1];\n            if (endpointNodeOb !== null && (nd.group === '2a' || nd.group === '2ab' || nd.group === '2ac')) {\n                const lnk = new Link();\n                lnk.source = endpointNodeOb.id;\n                lnk.sourceName = endpointNodeOb.name;\n                lnk.target = nd.id;\n                lnk.targetName = nd.name;\n                applyLinkState(lnk, getEndpointToRouterLinkState(endpointNodeOb, nd));\n                lnk.linkType = 'endpoint-connection';\n                rootOb.addLink(lnk);\n            }\n        }\n\n        for (let k1 = 0; k1 < rootOb.nodes.length; k1++) {\n            const nd1 = rootOb.nodes[k1];\n            if (nd1.group.includes('2')) {\n                for (let k2 = 0; k2 < group3Nodes.length; k2++) {\n                    const nd2 = group3Nodes[k2];\n                    if (nd2.group === '2b' || nd2.group === '2ab') {\n                        continue;\n                    }\n                    const lnk = new Link();\n                    lnk.source = nd1.id;\n                    lnk.sourceName = nd1.name;\n                    lnk.target = nd2.id;\n                    lnk.targetName = nd2.name;\n                    if (nd1.type.includes('Router') && nd2.type.includes('Router')) {\n                        lnk.status =\n                            nd1.status === 'PROVISIONED' &&\n                            nd1.online === 'Yes' &&\n                            nd2.status === 'PROVISIONED' &&\n                            nd2.online === 'Yes'\n                                ? 1 : 0;\n                        lnk.statusReason = lnk.status === 1 ? null : 'router-down';\n                    } else {\n                        applyLinkState(lnk, getEndpointToRouterLinkState(nd2, nd1));\n                    }\n                    lnk.weight = getWeight(lnk.status);\n                    lnk.linkType = 'inferred';\n                    rootOb.addLink(lnk);\n                }\n            }\n        }\n\n        for (let k0 = 0; k0 < group4Nodes.length; k0++) {\n            for (let k1 = 0; k1 < group3Nodes.length; k1++) {\n                const lnk = new Link();\n                lnk.source = group3Nodes[k1].id;\n                lnk.sourceName = group3Nodes[k1].name;\n                lnk.target = group4Nodes[k0].id;\n                lnk.targetName = group4Nodes[k0].name;\n                lnk.weight = 1;\n                const foundNd = rootOb.nodes.find(function (rnd) {\n                    return rnd.id === group3Nodes[k1].id;\n                });\n                if (foundNd.type.includes('Router')) {\n                    lnk.status = foundNd.online === 'Yes' ? 1 : -1;\n                } else {\n                    applyLinkState(lnk, getServiceToEndpointLinkState(group3Nodes[k1], group4Nodes[k0]));\n                }\n                lnk.linkType = 'endpoint-connection';\n                rootOb.addLink(lnk);\n            }\n        }\n\n        return rootOb;\n    }\n}\n\n// === Shared helper functions ===\n\nfunction hopKey(id1: string, id2: string): string {\n    return [id1, id2].sort().join('::');\n}\n\nfunction positionGroupNodes(nodes: any[], posx: number, availableHeight = 450) {\n    const count = nodes.length;\n    if (count === 0) return;\n\n    const MIN_Y = 40;\n    const MAX_Y = MIN_Y + availableHeight;\n\n    if (count === 1) {\n        nodes[0].posx = posx;\n        nodes[0].posy = (MIN_Y + MAX_Y) / 2; // center vertically\n        return;\n    }\n\n    const yIncrement = Math.min(90, (MAX_Y - MIN_Y) / (count - 1));\n    // Center the group vertically within the available space\n    const totalHeight = yIncrement * (count - 1);\n    const posyStart = MIN_Y + ((availableHeight - totalHeight) / 2);\n\n    nodes.forEach((nd, i) => {\n        nd.posx = posx;\n        nd.posy = posyStart + (i * yIncrement);\n    });\n}\n\nfunction serviceConfigAlias(configs) {\n    const intercept = [];\n    _.isArray(configs) && configs.forEach((conf) => {\n        let addresses = '';\n        let ports = '';\n        if (conf.data.addresses) {\n            addresses = conf.data.addresses.toString();\n        } else {\n            addresses = conf.data.address;\n        }\n        if (_.isArray(conf.data.portRanges)) {\n            conf.data.portRanges.forEach((portsJson) => {\n                for (const key in portsJson) {\n                    ports = ports + key + ':' + portsJson[key] + ' ';\n                }\n                ports = ports + ';';\n            });\n        } else {\n            ports = conf.data.port;\n        }\n        intercept.push(addresses);\n        intercept.push(ports);\n    });\n    return intercept;\n}\n\n// Annotates the service node with labeled, purpose-specific details so the hover card can explain\n// what each address is for and surface the service's configuration. Handles services that are\n// intercept+host, host-only, intercept-only, or SDK-defined (no address configs at all).\nfunction buildServiceDetails(srNode, service, configs) {\n    srNode.encryptionRequired = service ? service.encryptionRequired : undefined;\n    srNode.terminatorStrategy = service ? service.terminatorStrategy : undefined;\n    srNode.serviceRoleAttributes = _.isArray(service && service.roleAttributes) ? service.roleAttributes : [];\n    srNode.permissions = _.isArray(service && service.permissions) ? service.permissions : [];\n\n    const fmtPorts = (portRanges, port) => {\n        if (_.isArray(portRanges)) {\n            return portRanges.map((r) => (r.low === r.high ? `${r.low}` : `${r.low}-${r.high}`));\n        }\n        if (port !== undefined && port !== null) return [String(port)];\n        return [];\n    };\n    const fmtEndpoint = (addrs, ports, protos) => {\n        const a = (addrs || []).filter(Boolean).join(', ');\n        const detail = [(protos || []).join('/'), (ports || []).join(',')].filter(Boolean).join('/');\n        return detail ? `${a}  ${detail}` : a;\n    };\n\n    const types = [];\n    _.isArray(configs) && configs.forEach((conf) => {\n        const t = ((conf && conf.configType && conf.configType.name) || (conf && conf.type) || '').toString();\n        const d = (conf && conf.data) || {};\n        if (t) types.push(t);\n        if (t.indexOf('intercept') === 0) {\n            const addrs = d.addresses || (d.address ? [d.address] : []);\n            srNode.interceptSummary = fmtEndpoint(addrs, fmtPorts(d.portRanges, d.port), d.protocols || (d.protocol ? [d.protocol] : []));\n        } else if (t.indexOf('host') === 0) {\n            const addrs = d.address ? [d.address] : (d.forwardAddress ? ['(forwarded)'] : []);\n            srNode.hostSummary = fmtEndpoint(addrs, fmtPorts(d.allowedPortRanges, d.port), d.protocol ? [d.protocol] : (d.protocols || (d.forwardProtocol ? ['(forwarded)'] : [])));\n        }\n    });\n    srNode.configTypeNames = types;\n}\n\nfunction findEndpoint(endpointId, endpoints) {\n    if (endpointId === null) {\n        return null;\n    }\n    const ePoint = endpoints.find(function (er) {\n        return er.id === endpointId;\n    });\n    if (ePoint) {\n        const node = createEndpoint(ePoint);\n        node.type = 'Hosted Identity';\n        return node;\n    }\n    return null;\n}\n\nfunction createEndpoint(ePoint) {\n    const node = new Node();\n    node.id = ePoint.id;\n    node.name = ePoint.name;\n    node.type = 'Identity';\n    // Prefer the explicit booleans, which controllers populate reliably. Only fall back to the\n    // edgeRouterConnectionStatus string when it actually carries a value — note its key can be\n    // PRESENT-BUT-NULL, so `_.has` is not a safe guard (that bug made every identity look \"Yes\").\n    if (ePoint.edgeRouterConnectionStatus != null) {\n        node.routerConnection = ePoint.edgeRouterConnectionStatus === 'offline' ? 'No' : 'Yes';\n        node.apiSession = node.routerConnection;\n    } else {\n        node.routerConnection = ePoint['hasEdgeRouterConnection'] === false ? 'No' : 'Yes';\n        node.apiSession = ePoint['hasApiSession'] === false ? 'No' : 'Yes';\n    }\n    node.os = ePoint.envInfo ? ePoint.envInfo.os : '';\n    node.mfaEnabled = ePoint.isMfaEnabled;\n    // \"Registered\" means the identity has enrolled and run (it has reported env info). Guard on a\n    // truthy os: the controller returns envInfo as an empty object {} for a created-but-never-\n    // enrolled identity, and `{}.os !== null` is true — which previously mis-classed it Registered.\n    node.status = (ePoint.envInfo && ePoint.envInfo.os) ? 'Registered' : 'Un-Registered';\n\n    // Node status indicator. Mirrors the controller's edgeRouterConnectionStatus enum\n    // (online | offline | unknown) when present, falling back to the hasEdgeRouterConnection\n    // boolean otherwise. An identity that hasn't enrolled is \"unenrolled\" (its own state, not an\n    // error). There is no \"error\" value in the API, so we don't synthesize one.\n    if (node.status === 'Un-Registered') {\n        node.connState = 'unenrolled';\n    } else {\n        const ers = ePoint.edgeRouterConnectionStatus;\n        if (ers === 'online' || ers === 'offline' || ers === 'unknown') {\n            node.connState = ers;\n        } else {\n            node.connState = (ePoint.hasEdgeRouterConnection === true || ePoint.hasApiSession === true)\n                ? 'online' : 'offline';\n        }\n    }\n    return node;\n}\n\nfunction createERNode(erouter) {\n    const nodeOb = new Node();\n    nodeOb.id = erouter.id;\n    nodeOb.name = erouter.name;\n    nodeOb.status = erouter.isVerified === true ? 'Registered' : 'Un-Registered';\n    nodeOb.online = erouter.isOnline === false ? 'No' : 'Yes';\n    nodeOb.tunnelerEnabled = erouter.isTunnelerEnabled === false ? 'No' : 'Yes';\n    nodeOb.type = 'EdgeRouter';\n    nodeOb.routerType = 'edge-router';\n    return nodeOb;\n}\n\nfunction createFabricRouterNode(fabricRouter, routerType: 'edge-router' | 'transit-router') {\n    const nodeOb = new Node();\n    nodeOb.id = fabricRouter.id;\n    nodeOb.name = fabricRouter.name;\n    nodeOb.status = fabricRouter.connected ? 'PROVISIONED' : 'Un-Registered';\n    nodeOb.online = fabricRouter.connected || fabricRouter.isOnline ? 'Yes' : 'No';\n    nodeOb.tunnelerEnabled = fabricRouter.isTunnelerEnabled === false ? 'No' : 'Yes';\n    nodeOb.type = routerType === 'transit-router' ? 'TransitRouter' : 'EdgeRouter';\n    nodeOb.routerType = routerType;\n    return nodeOb;\n}\n\n// Determines the state of an identity/tunneler <-> edge-router link.\n// A router-reported problem (offline/errored router) is distinguished from a tunneler-side\n// problem (enrolled identity that cannot establish a connection to the router, e.g. blocked\n// by a firewall) so the visualizer can render the two causes differently.\nfunction getEndpointToRouterLinkState(endpointNode, routerNode): LinkState {\n    if (routerNode.status === 'ERROR' || routerNode.online === 'No') {\n        return { state: 2, reason: 'router-down' }; // router-reported issue\n    }\n    if (endpointNode.status === 'Un-Registered') {\n        // Never enrolled — the path through this identity can't carry traffic, so it's not\n        // \"available\". Marked unavailable (the node still shows the specific \"Not enrolled\" cause).\n        return { state: 2, reason: 'misconfigured' };\n    }\n    if (endpointNode.apiSession === 'No' || endpointNode.routerConnection === 'No') {\n        // Enrolled but cannot reach the edge router — tunneler-side broken (was previously\n        // shown as a benign \"available\" link, which is exactly what we're fixing).\n        return { state: 2, reason: 'tunneler-unreachable' };\n    }\n    if (routerNode.online === 'Yes' && endpointNode.routerConnection === 'Yes') {\n        return { state: 1, reason: null }; // active/available\n    }\n    return { state: -1, reason: null };\n}\n\n// Determines the state of a hosting identity/router <-> service link.\n// hasTerminator is the authoritative signal that the host actually established its hosting\n// connection: a Bind policy makes a host \"expected\", but only a terminator proves it connected.\nfunction getServiceToEndpointLinkState(hostNode, serviceNode): LinkState {\n    const isRouter = !!(hostNode.type && String(hostNode.type).includes('Router'));\n    if (isRouter) {\n        if (hostNode.status === 'ERROR' || hostNode.online === 'No') {\n            return { state: 2, reason: 'router-down' };\n        }\n        return { state: 1, reason: null };\n    }\n    // Identity host (tunneler). Broken-detection uses the host's own connection state, since\n    // terminators can't be attributed to a specific host (see note in getEndpointGraphObj).\n    if (hostNode.status === 'Un-Registered') {\n        return { state: 2, reason: 'misconfigured' }; // never enrolled\n    }\n    if (hostNode.apiSession === 'No' || hostNode.routerConnection === 'No') {\n        return { state: 2, reason: 'tunneler-unreachable' }; // enrolled but unreachable (e.g. firewall)\n    }\n    if (hostNode.status === 'Registered' && hostNode.routerConnection === 'Yes') {\n        return { state: 1, reason: null }; // active/available\n    }\n    return { state: -1, reason: null };\n}\n\n// Applies a computed LinkState to a link, including its derived weight.\nfunction applyLinkState(lnk, ls: LinkState) {\n    lnk.status = ls.state;\n    lnk.statusReason = ls.reason;\n    lnk.weight = getWeight(ls.state);\n}\n\nfunction getWeight(linkState) {\n    return linkState === -1 ? 5 : 1;\n}\n\nclass RootJson {\n    nodes: any = [];\n    links: any = [];\n    addNode(newObject) {\n        const foundObj = this.nodes.find(function (nd) {\n            return nd.id === newObject.id;\n        });\n        if (!foundObj) {\n            this.nodes.push(newObject);\n        }\n    }\n    replaceNode(newObject) {\n        const indx = this.nodes.findIndex(nd => nd.id === newObject.id);\n        if (indx >= 0) {\n            this.nodes[indx] = newObject;\n        }\n    }\n    addLink(newObject) {\n        this.links.push(newObject);\n    }\n}\n","import {Inject, Injectable} from '@angular/core';\nimport {ZITI_DATA_SERVICE, ZitiDataService} from '../../../services/ziti-data.service';\n\nexport interface RouterFetchResult {\n  routers: any[];\n  routerTypes: Map<string, string>;\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class MapDataService {\n  constructor(@Inject(ZITI_DATA_SERVICE) private zitiDataService: ZitiDataService) {}\n\n  /**\n   * Fetch routers from both fabric and edge APIs, merge them together\n   * Returns the merged routers and a map of router types (edge-router vs transit-router)\n   */\n  async fetchRouters(): Promise<RouterFetchResult> {\n    const fabricUrl = '/routers?limit=1000';\n    const edgePaging = {\n      searchOn: 'name',\n      filter: '',\n      total: 1000,\n      page: 1,\n      sort: 'name',\n      order: 'asc'\n    };\n\n    // Load both APIs in parallel\n    const fabricPromise = this.zitiDataService.callHAControllers(fabricUrl, '/fabric/v1').catch(() => ({ data: [] }));\n    const edgePromise = this.zitiDataService.get('edge-routers', edgePaging, []).catch(() => ({ data: [] }));\n\n    const [fabricResult, edgeResult] = await Promise.all([fabricPromise, edgePromise]);\n\n    const fabricRouters = fabricResult?.data || [];\n    const edgeRouters = edgeResult?.data || [];\n\n    // Create a map of edge routers by ID for quick lookup\n    const edgeRouterMap = new Map(edgeRouters.map((r: any) => [r.id, r]));\n\n    const routerTypes = new Map<string, string>();\n\n    // Merge: Use fabric routers as base, enrich with edge router data (especially roleAttributes)\n    const mergedRouters = fabricRouters.map((fabricRouter: any) => {\n      const edgeRouter: any = edgeRouterMap.get(fabricRouter.id);\n      if (edgeRouter) {\n        // This is an edge router - track it\n        routerTypes.set(fabricRouter.id, 'edge-router');\n        // Merge: fabric router data + edge router role attributes and other properties\n        return {\n          ...fabricRouter,\n          roleAttributes: edgeRouter.roleAttributes || [],\n          // Keep other edge router properties that might be useful\n          ...edgeRouter,\n          _routerType: 'edge-router'\n        };\n      }\n      // This is a transit router (not in edge API)\n      routerTypes.set(fabricRouter.id, 'transit-router');\n      return {\n        ...fabricRouter,\n        _routerType: 'transit-router'\n      };\n    });\n\n    return {\n      routers: mergedRouters,\n      routerTypes\n    };\n  }\n\n  /**\n   * Fetch identities with optional filters\n   */\n  async fetchIdentities(filters: any[] = []): Promise<any[]> {\n    const paging = {\n      searchOn: 'name',\n      filter: '',\n      total: 1000,\n      page: 1,\n      sort: 'name',\n      order: 'asc'\n    };\n\n    const result = await this.zitiDataService.get('identities', paging, filters);\n    const allIdentities = result?.data || [];\n\n    // Filter out identities of type \"Router\" since those are already shown as red router markers\n    return allIdentities.filter((identity: any) => identity.type?.entity !== 'Router');\n  }\n\n  /**\n   * Fetch services with optional filters\n   */\n  async fetchServices(filters: any[] = []): Promise<any[]> {\n    const paging = {\n      searchOn: 'name',\n      filter: '',\n      total: 1000,\n      page: 1,\n      sort: 'name',\n      order: 'asc'\n    };\n\n    const result = await this.zitiDataService.get('services', paging, filters);\n    return result?.data || [];\n  }\n\n  /**\n   * Fetch circuits from fabric API\n   */\n  async fetchCircuits(): Promise<any[]> {\n    const url = '/circuits?limit=1000';\n\n    try {\n      const result = await this.zitiDataService.callHAControllers(url, '/fabric/v1');\n      return result?.data || [];\n    } catch (error) {\n      // Circuits feature unavailable - this might be expected if fabric API is not enabled\n      return [];\n    }\n  }\n\n  /**\n   * Fetch terminators from Edge API\n   */\n  async fetchTerminators(): Promise<any[]> {\n    try {\n      // Fetch from Edge API\n      const url = '/terminators?limit=1000&filter=identity';\n      const result = await this.zitiDataService.call(url);\n      return result?.data || [];\n    } catch (error) {\n      // Try without expansion\n      const paging = {\n        searchOn: 'address',\n        filter: '',\n        total: 1000,\n        page: 1,\n        sort: 'address',\n        order: 'asc'\n      };\n\n      try {\n        const result = await this.zitiDataService.get('terminators', paging, []);\n        return result?.data || [];\n      } catch (fallbackError) {\n        // Final fallback to Fabric API\n        try {\n          const url = '/terminators?limit=1000';\n          const result = await this.zitiDataService.callHAControllers(url, '/fabric/v1');\n          return result?.data || [];\n        } catch (fabricError) {\n          // Terminators feature unavailable\n          return [];\n        }\n      }\n    }\n  }\n\n  /**\n   * Fetch links from fabric API\n   */\n  async fetchLinks(): Promise<any[]> {\n    const url = '/links?limit=1000';\n\n    try {\n      const result = await this.zitiDataService.callHAControllers(url, '/fabric/v1');\n      return result?.data || [];\n    } catch (error) {\n      // Links feature unavailable - this might be expected if fabric API is not enabled\n      return [];\n    }\n  }\n}\n","/* eslint prefer-const: 1 */\nimport {\n  Component,\n  ViewChild,\n  Inject,\n  OnInit,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { Router } from '@angular/router';\nimport {\n  SETTINGS_SERVICE,\n  SettingsService,\n} from '../../../services/settings.service';\nimport {\n  ZITI_DATA_SERVICE,\n  ZitiDataService,\n} from '../../../services/ziti-data.service';\nimport { IdentityServicePathHelper } from './identity-service-path.helper';\nimport { MapDataService } from '../../../pages/geolocate/services/map-data.service';\nimport * as d3 from 'd3';\nimport _ from 'lodash';\nimport { Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { take, tap } from 'rxjs/operators';\nimport { MatIconModule } from '@angular/material/icon';\n\n@Component({\n    selector: 'app-identity-visualizer',\n    templateUrl: './identity-service-path.component.html',\n    styleUrls: ['./identity-service-path.component.scss'],\n    standalone: false\n})\nexport class IdentityServicePathComponent implements OnInit {\n  public d3;\n  isDarkMode = false;\n  refreshRotate = false;\n  closeRotate = true;\n  private lastRenderContext: {\n    bindIdnetities: any[];\n    serviceOb: any;\n    serviceConfigs: any[];\n    hostEdgeRouters: any[];\n  } | null = null;\n  private zoomBehavior: any = null;\n  private hasInitialFit = false;\n  private readonly viewBoxWidth = 1050;\n  private readonly viewBoxHeight = 500;\n  filterText = 'fetching services..';\n  noSearchResults = false;\n  autocompleteOptions = [];\n  fullScreen = false;\n  legendCollapsed = false;\n  serviceOptions: any;\n  endpointData;\n  networkGraph;\n  graphJsonObj;\n  services;\n  edgerouters;\n  endpoints = [];\n  selectedService = '';\n  serviceSelectError;\n  doEndpointHasAppwans = false;\n  doEndpointHasPublicRouters = false;\n  doEndpointHasServicesInPrivateNw = false;\n  isLoading = false;\n  countGrp2Nds = 0;\n  countGrp3Nds = 0;\n\n  // Fabric topology data\n  allRouters: any[] = [];\n  routerTypesMap: Map<string, string> = new Map();\n  allLinks: any[] = [];\n  allCircuits: any[] = [];\n  allTerminators: any[] = [];\n  fabricApiAvailable = true;\n\n  constructor(\n    private identityServicePathHelper: IdentityServicePathHelper,\n    private mapDataService: MapDataService,\n    @Inject(SETTINGS_SERVICE) public settingsService: SettingsService,\n    @Inject(ZITI_DATA_SERVICE) private zitiService: ZitiDataService,\n    private router: Router,\n    private dialogRef: MatDialogRef<IdentityServicePathComponent>,\n    @Inject(MAT_DIALOG_DATA) public data: any\n  ) {\n    this.endpointData = data.identity;\n  }\n\n  ngOnInit(): void {\n    this.getEndpointNetworkAsCode();\n    this.autocompleteOptions = [];\n    this.isLoading = true;\n    const bgCol = d3.color(d3.select('body').style(\"background-color\")).formatHex();\n    this.isDarkMode = bgCol =='#18191d' ? true: false;\n  }\n\n  getEndpointNetworkAsCode() {\n    console.log('[Visualizer] Endpoint identity data:', {\n      id: this.endpointData.id,\n      name: this.endpointData.name,\n      hasApiSession: this.endpointData.hasApiSession,\n      hasEdgeRouterConnection: this.endpointData.hasEdgeRouterConnection,\n      edgeRouterConnectionStatus: this.endpointData.edgeRouterConnectionStatus,\n      envInfo: this.endpointData.envInfo,\n    });\n    const pagesize = 500;\n    const services_paging = {\n      searchOn: 'name',\n      filter: '',\n      total: pagesize,\n      page: 1,\n      sort: 'name',\n      order: 'asc',\n    };\n\n    this.zitiService\n      .get(`identities/${this.endpointData.id}/services`, services_paging, [])\n      .then((result) => {\n        this.services = result.data;\n        this.closeRotate = false;\n\n        if (!this.services || this.services.length === 0) {\n          this.services = [];\n          this.serviceOptions = [];\n          this.serviceOptions.push(noServices());\n          this.selectedService = 'No services found for the selected identity';\n          this.isLoading = false;\n        } else {\n          const pages = Math.ceil(result.meta.pagination.totalCount / pagesize);\n          const promises = [];\n          for (let page = 2; page <= pages; page++) {\n            services_paging.page = page;\n            const tmp_promise = this.zitiService\n              .get(\n                `identities/${this.endpointData.id}/services`,\n                services_paging,\n                []\n              )\n              .then((pageResult) => {\n                pageResult.data.forEach((serv) => {\n                  this.services.push(serv);\n                });\n              });\n            promises.push(tmp_promise);\n          }\n          Promise.all(promises).then(() => {\n            const edgeRouterPromise = this.zitiService\n              .get(`identities/${this.endpointData.id}/edge-routers`, {}, [])\n              .then((result) => {\n                this.edgerouters = [];\n                result.data.forEach((rec) => {\n                  this.edgerouters.push(rec);\n                });\n              });\n\n            const fabricPromise = Promise.allSettled([\n              this.mapDataService.fetchRouters(),\n              this.mapDataService.fetchLinks(),\n              this.mapDataService.fetchCircuits(),\n              this.mapDataService.fetchTerminators(),\n            ]).then((results) => {\n              const [routersResult, linksResult, circuitsResult, terminatorsResult] = results;\n              const allFailed = results.every(r => r.status === 'rejected');\n              this.fabricApiAvailable = !allFailed;\n\n              if (routersResult.status === 'fulfilled') {\n                this.allRouters = routersResult.value.routers || [];\n                this.routerTypesMap = routersResult.value.routerTypes || new Map();\n              }\n              if (linksResult.status === 'fulfilled') {\n                this.allLinks = linksResult.value || [];\n              }\n              if (circuitsResult.status === 'fulfilled') {\n                this.allCircuits = circuitsResult.value || [];\n              }\n              if (terminatorsResult.status === 'fulfilled') {\n                this.allTerminators = terminatorsResult.value || [];\n              }\n            });\n\n            Promise.all([edgeRouterPromise, fabricPromise]).then(() => {\n              this.serviceOptions = createServiceOptions(this.services);\n              this.filterText =\n                this.serviceOptions.length === 0\n                  ? ''\n                  : this.serviceOptions[0].name;\n              this.selectedService =\n                this.serviceOptions.length === 0\n                  ? 'No services found for the selected identity'\n                  : this.serviceOptions[0].name;\n              this.autocompleteOptions = this.serviceOptions;\n              this.serviceChanged();\n            });\n          });\n        }\n      });\n\n    function createServiceOptions(_services) {\n      const options = [];\n      const serviceNames = [];\n      _services?.find((srvice) => {\n        if (!serviceNames.includes(srvice.name)) {\n          serviceNames.push(srvice.name);\n          const sd = new ServiceData();\n          sd.id = srvice.id;\n          sd.name = srvice.name;\n          options.push(sd);\n        }\n      });\n      return options;\n    }\n\n    function noServices() {\n      const sd = new ServiceData();\n      sd.id = '';\n      sd.name = 'NO SERVICES';\n      return sd;\n    }\n  } // end of getEndpointNetworkAsCode\n\n  filterSearchArray() {\n    this.autocompleteOptions = [];\n    this.autocompleteOptions = this.serviceOptions.filter((option) =>\n      option.name.toLowerCase().includes(this.selectedService.toLowerCase())\n    );\n  }\n\n  clearSearchFilter() {\n    this.filterText = 'You can filter services by typing here';\n    this.autocompleteOptions = this.serviceOptions;\n    this.selectedService = '';\n  }\n\n  autocompleteSearch(event) {\n    this.serviceChanged();\n  }\n\n  serviceChanged() {\n     // Service change implies new topology — re-fit on next render.\n     this.hasInitialFit = false;\n     this.isLoading = true;\n     const allPromises = [];\n     let serviceOb = null;\n     let service_configs = [];\n\n     serviceOb = this.services && this.services.find((rec) => {\n      return  (rec.name === this.selectedService);\n     });\n\n     if (!serviceOb) {\n       this.isLoading = false;\n       return;\n     }\n\n     const configs_url = this.getLinkForResource(serviceOb, 'configs');\n\n     const configPromise = this.zitiService\n      .get(configs_url, {}, [])\n      .then((configs) => {\n        service_configs = configs && configs.data ? configs.data : [];\n      });\n     const service_edge_router_policies_url = this.getLinkForResource(\n      serviceOb,\n      'service-edge-router-policies'\n     );\n     const service_policies_url = this.getLinkForResource(\n      serviceOb,\n      'service-policies'\n     ).replace('./', ''); // dial, Bind info\n\n    let bindPolicies = [];\n    let bindIdnetities = [];\n    const promise2 = this.zitiService\n      .get(service_policies_url, {}, [])\n      .then((policies) => {\n        const identityPromises = [];\n        _.isArray(policies.data) && policies.data.forEach((policy) => {\n          if (policy.type === 'Bind') {\n            const bindIdentitiesUrl = this.getLinkForResource(\n              policy,\n              'identities'\n            );\n            const promse = this.zitiService\n              .get(bindIdentitiesUrl.replace('./', ''), {}, [])\n              .then((res) => {\n                if (res && res.data.length > 0) {\n                  res.data.forEach((rs) => {\n                    this.addItemToArray(bindIdnetities, rs);\n                  });\n                } else {\n                  this.addItemToArray(bindIdnetities, res.data);\n                }\n              });\n            identityPromises.push(promse);\n          }\n        });\n        Promise.all(identityPromises).then(() => {\n          // Log bind identity data for debugging\n          bindIdnetities.forEach((bi) => {\n            console.log('[Visualizer] Bind identity:', {\n              id: bi.id,\n              name: bi.name,\n              hasApiSession: bi.hasApiSession,\n              hasEdgeRouterConnection: bi.hasEdgeRouterConnection,\n              edgeRouterConnectionStatus: bi.edgeRouterConnectionStatus,\n              envInfo: bi.envInfo,\n            });\n          });\n          // Fetch host-side edge routers for each bind identity\n          const hostRouterPromises = bindIdnetities.map((bindId) =>\n            this.zitiService\n              .get(`identities/${bindId.id}/edge-routers`, {}, [])\n              .then((res) => res?.data || [])\n              .catch(() => [])\n          );\n          Promise.all(hostRouterPromises).then((hostRouterResults) => {\n            const hostEdgeRouters = [];\n            hostRouterResults.forEach((routers) => {\n              routers.forEach((r) => {\n                if (!hostEdgeRouters.find((existing) => existing.id === r.id)) {\n                  hostEdgeRouters.push(r);\n                }\n              });\n            });\n\n            // Filter fabric data to selected service\n            const serviceTerminators = this.allTerminators.filter(\n              (t) => (t.serviceId || t.service?.id || t.service) === serviceOb.id\n            );\n            const serviceCircuits = this.allCircuits.filter(\n              (c) => c.service?.id === serviceOb.id\n            );\n\n            console.log('[Visualizer] Service:', { id: serviceOb.id, name: serviceOb.name });\n            console.log('[Visualizer] Endpoint ID:', this.endpointData.id);\n            console.log('[Visualizer] All circuits:', this.allCircuits.length);\n            console.log('[Visualizer] Service circuits:', serviceCircuits.length);\n\n            // Log circuits for this specific identity with full path details\n            const myCircuits = serviceCircuits.filter(c =>\n              (c.tags?.clientId || c.clientId || c.client?.id) === this.endpointData.id\n            );\n            console.log('[Visualizer] My circuits:', myCircuits.length);\n            myCircuits.forEach((c, i) => {\n              const pathNodes = c.path?.nodes || c.path || [];\n              console.log(`[Visualizer] My circuit ${i}:`, {\n                id: c.id,\n                clientId: c.tags?.clientId || c.clientId,\n                hostId: c.tags?.hostId,\n                pathNodeIds: pathNodes.map(n => n.id || n),\n                rawPathNodes: pathNodes,\n              });\n            });\n            console.log('[Visualizer] Edge routers:', this.edgerouters?.map(r => ({ id: r.id, name: r.name })));\n            if (serviceCircuits.length > 0) {\n              serviceCircuits.forEach((c, i) => {\n                console.log(`[Visualizer] Circuit ${i}:`, {\n                  id: c.id,\n                  serviceId: c.service?.id,\n                  clientId: c.tags?.clientId || c.clientId,\n                  hostId: c.tags?.hostId,\n                  pathNodes: c.path?.nodes || c.path,\n                });\n              });\n            } else {\n              // Log a sample circuit to see the data shape\n              if (this.allCircuits.length > 0) {\n                console.log('[Visualizer] Sample circuit (different service):', {\n                  id: this.allCircuits[0].id,\n                  serviceId: this.allCircuits[0].service?.id,\n                  serviceName: this.allCircuits[0].service?.name,\n                  tags: this.allCircuits[0].tags,\n                });\n              }\n            }\n\n            this.lastRenderContext = {\n              bindIdnetities,\n              serviceOb,\n              serviceConfigs: service_configs,\n              hostEdgeRouters,\n            };\n            this.startVisProcess(\n              bindIdnetities, serviceOb, service_configs,\n              hostEdgeRouters, serviceTerminators, serviceCircuits\n            );\n            this.isLoading = false;\n          });\n        });\n      });\n  }\n\n  async refreshFabricData(): Promise<void> {\n    if (this.refreshRotate) {\n      return;\n    }\n    this.refreshRotate = true;\n    try {\n      const results = await Promise.allSettled([\n        this.mapDataService.fetchRouters(),\n        this.mapDataService.fetchLinks(),\n        this.mapDataService.fetchCircuits(),\n        this.mapDataService.fetchTerminators(),\n      ]);\n      const [routersResult, linksResult, circuitsResult, terminatorsResult] = results;\n      const allFailed = results.every((r) => r.status === 'rejected');\n      this.fabricApiAvailable = !allFailed;\n\n      if (routersResult.status === 'fulfilled') {\n        this.allRouters = routersResult.value.routers || [];\n        this.routerTypesMap = routersResult.value.routerTypes || new Map();\n      }\n      if (linksResult.status === 'fulfilled') {\n        this.allLinks = linksResult.value || [];\n      }\n      if (circuitsResult.status === 'fulfilled') {\n        this.allCircuits = circuitsResult.value || [];\n      }\n      if (terminatorsResult.status === 'fulfilled') {\n        this.allTerminators = terminatorsResult.value || [];\n      }\n\n      if (this.lastRenderContext) {\n        const { bindIdnetities, serviceOb, serviceConfigs, hostEdgeRouters } = this.lastRenderContext;\n        const serviceTerminators = this.allTerminators.filter(\n          (t) => (t.serviceId || t.service?.id || t.service) === serviceOb.id\n        );\n        const serviceCircuits = this.allCircuits.filter(\n          (c) => c.service?.id === serviceOb.id\n        );\n        this.startVisProcess(\n          bindIdnetities, serviceOb, serviceConfigs,\n          hostEdgeRouters, serviceTerminators, serviceCircuits\n        );\n      }\n    } finally {\n      this.refreshRotate = false;\n    }\n  }\n\n  addItemToArray(bindIdnetities, ob) {\n    if (!bindIdnetities.find((item) => item.id === ob.id)) {\n      bindIdnetities.push(ob);\n    }\n    return bindIdnetities;\n  }\n\n  getLinkForResource(ob, resource) {\n    return ob['_links'][resource]['href'];\n  }\n\n  startVisProcess(\n    bindIdnetities, selectedServiceOb, serviceConfigs,\n    hostEdgeRouters = [], serviceTerminators = [], serviceCircuits = []\n  ) {\n    this.countGrp2Nds = 0;\n    this.countGrp3Nds = 0;\n    if (_.isEmpty(this.selectedService)) {\n      this.serviceSelectError = !_.isEmpty(this.selectedService);\n      return;\n    }\n    try {\n      // Use viewBox width for column positioning (matches SVG coordinate space)\n      const containerWidth = 1050;\n\n      this.graphJsonObj = this.identityServicePathHelper.getEndpointGraphObj(\n        this.endpointData,\n        bindIdnetities,\n        this.edgerouters,\n        selectedServiceOb,\n        serviceConfigs,\n        '',\n        hostEdgeRouters,\n        this.allRouters,\n        this.routerTypesMap,\n        this.allLinks,\n        serviceCircuits,\n        serviceTerminators,\n        this.fabricApiAvailable,\n        containerWidth\n      );\n    } catch (err) {\n      return;\n    }\n\n    let countGrp1Nds = 0;\n    this.doEndpointHasServicesInPrivateNw = false;\n    this.doEndpointHasPublicRouters = false;\n    this.doEndpointHasAppwans = false;\n    this.graphJsonObj.nodes.forEach((nd) => {\n      if (nd.group === '3') {\n        this.countGrp3Nds++;\n      }\n      if (nd.group.includes('2')) {\n        this.countGrp2Nds++;\n      }\n      if (nd.group === '1') {\n        countGrp1Nds++;\n      }\n    });\n\n    if (this.countGrp3Nds > 0) {\n      this.doEndpointHasServicesInPrivateNw = true; // show private/customer network box, will be decided with this variable.\n    }\n    if (this.countGrp2Nds > 0) {\n      this.doEndpointHasPublicRouters = true; // show public network box, will be decided with this variable.\n    }\n\n    if (countGrp1Nds > 0) {\n      this.doEndpointHasAppwans = true; // show private network box, will be decided with this variable.\n    }\n    this.initTopoView();\n  }\n\n  toggleModalSize() {\n    this.fullScreen = !this.fullScreen;\n  }\n\n  hide() {\n    this.dialogRef.close();\n  }\n\n  initTopoView() {\n    const vbWidth = this.viewBoxWidth;\n    const vbHeight = this.viewBoxHeight;\n    const colors = d3.scaleOrdinal(d3.schemeCategory10);\n    const tooltip = d3.select('#epTooltip');\n    // Hide is deferred so the cursor can travel from the node into the popover (to read/select\n    // its content); entering the popover cancels the hide, leaving it dismisses it.\n    let tooltipHideTimer: any = null;\n    tooltip.on('mouseenter', () => clearTimeout(tooltipHideTimer));\n    tooltip.on('mouseleave', () => tooltip.style('display', 'none'));\n\n    const svg = d3.select('#IdentityTopology');\n    const svgEl: any = svg.node();\n    let node, link;\n\n    svg\n      .attr('width', '100%')\n      .attr('height', '100%')\n      .attr('viewBox', '-20 -20 ' + (vbWidth + 40) + ' ' + vbHeight)\n      .attr('preserveAspectRatio', 'xMidYMin meet');\n\n    // Capture any pre-existing zoom transform (from previous render / user gestures)\n    // so we can re-apply it after recreating the content group.\n    const existingTransform = svgEl\n      ? d3.zoomTransform(svgEl)\n      : d3.zoomIdentity;\n\n    svg.selectAll('g').remove();\n\n    // Wrap all topology content in a <g> so zoom transforms have something to translate.\n    const contentG = svg.append('g').attr('class', 'topology-content');\n    contentG.attr('transform', existingTransform.toString());\n\n    const handleZoom = (e: any) => {\n      contentG.attr('transform', e.transform);\n    };\n\n    if (!this.zoomBehavior) {\n      this.zoomBehavior = d3.zoom().scaleExtent([0.1, 5]).on('zoom', handleZoom);\n    } else {\n      this.zoomBehavior.on('zoom', handleZoom);\n    }\n    svg.call(this.zoomBehavior);\n\n    const simulation: any = d3\n      .forceSimulation()\n      .force(\n        'link',\n        d3\n          .forceLink()\n          .id(function (d: any) {\n            return d.id;\n          })\n          .distance(100)\n          .strength(1)\n      )\n      .force('charge', d3.forceManyBody())\n      .force('center', d3.forceCenter(vbWidth / 2, vbHeight / 2));\n\n    const links = this.graphJsonObj.links;\n    const nodes = this.graphJsonObj.nodes;\n\n    link = contentG\n      .selectAll('g.line.line')\n      .data(links)\n      .enter()\n      .append('g')\n      .attr('class', 'link')\n      .attr('marker-end', 'url(#arrowhead)');\n\n    // Three link styles, distinguishable by pattern (color-blind-safe) and color. A single\n    // \"broken\" style covers every failure — which END is the problem is read from the node\n    // colors (an offline router vs an unreachable/un-enrolled endpoint), so the link needn't\n    // re-encode the cause:\n    //   active circuit -> green solid\n    //   available      -> gray dashed\n    //   broken         -> red dotted\n    const isBroken = (d) => d.status === 2;\n    link\n      .append('line')\n      .style('stroke-width', function (d) {\n        if (d.linkType === 'active-circuit') return 1.5;\n        if (isBroken(d)) return 2.25;\n        return 1.25;\n      })\n      .style('stroke-linecap', function (d) {\n        // Rounded caps turn the tight broken dash array into actual dots.\n        return isBroken(d) ? 'round' : 'butt';\n      })\n      .style('stroke', function (d) {\n        if (d.linkType === 'active-circuit') return '#00cd13';\n        if (isBroken(d)) return '#e6432e';\n        return '#8a8f9a';\n      })\n      .style('stroke-dasharray', function (d) {\n        if (d.linkType === 'active-circuit') return null; // solid\n        if (isBroken(d)) return '0.5,6'; // dotted\n        return '5,5'; // available: dashed\n      });\n\n    node = contentG\n      .selectAll('.node')\n      .data(nodes)\n      .enter()\n      .append('g')\n      .attr('class', 'node');\n\n    node\n      .append('image')\n      .attr('xlink:href', function (d) {\n        const routerImagePath = 'assets/images/visualizer/Routers.png';\n        const unregisteredEndpointImagePath =\n          'assets/images/visualizer/host_unregistered.png';\n        const endPointPath = 'assets/images/visualizer/host.png';\n\n        if (d.type.includes('Identity')) {\n          // Un-enrolled identities get the distinct \"unregistered\" icon; otherwise the normal\n          // host icon — the status dot below conveys online/offline/unknown.\n          if (d.connState === 'unenrolled' || d.status === 'Un-Registered') {\n            return unregisteredEndpointImagePath;\n          }\n          return endPointPath;\n        }\n        if (d.type.includes('Router')) {\n          // One base router icon; the status dot below carries online/offline (the baked dot in\n          // the PNG is covered by that overlay).\n          return routerImagePath;\n        }\n        if (d.group === '4') {\n          return 'assets/images/visualizer/service.png';\n        }\n        return '';\n      })\n      .attr('x', -25)\n      .attr('y', -25)\n      .attr('width', '40')\n      .attr('height', '40');\n\n    // Status dot for identities AND routers. Colors a single dot by the node's real state\n    // (no \"error\" — that isn't a value the API exposes). Routers use a larger dot positioned to\n    // cover the status dot baked into the router PNG.\n    const statusColor = (d: any): string => {\n      if (d.type.includes('Router')) {\n        return (d.online === 'No' || d.status === 'ERROR') ? '#8a8f9a' : '#08dc5a';\n      }\n      switch (d.connState) {\n        case 'online': return '#08dc5a';   // green\n        case 'unknown': return '#e6a700';   // amber — controller can't determine\n        case 'unenrolled': return '#ffffff'; // hollow (gray ring below)\n        case 'offline':\n        default: return '#8a8f9a';          // gray\n      }\n    };\n    // Positioned to sit directly over the dot baked into each icon PNG (≈ the icon's top-right),\n    // sized just large enough to cover it (the white halo masks the baked dot's soft glow).\n    node.filter((d: any) => d.type.includes('Identity') || d.type.includes('Router'))\n      .append('circle')\n      .attr('cx', (d: any) => d.type.includes('Router') ? 6 : 8)\n      .attr('cy', (d: any) => d.type.includes('Router') ? -20 : -19)\n      .attr('r', 5)\n      .attr('fill', (d: any) => statusColor(d))\n      // Un-enrolled identities render as a hollow ring (gray border); everything else gets a\n      // white separator ring against the icon.\n      .attr('stroke', (d: any) => (!d.type.includes('Router') && d.connState === 'unenrolled') ? '#8a8f9a' : 'white')\n      .attr('stroke-width', 2);\n\n    // Node labels: for compound pipe-delimited names (\"<networkId>|<identityId>|Human Name\")\n    // show only the last segment so the canvas stays readable; the full name remains in the\n    // hover tooltip.\n    const getDisplayLabel = (fullName: string | undefined): string => {\n      if (!fullName) return '';\n      const segments = fullName.split('|').map((s) => s.trim()).filter((s) => s.length > 0);\n      const candidate = segments.length > 0 ? segments[segments.length - 1] : fullName;\n      const maxLen = 28;\n      return candidate.length > maxLen\n        ? candidate.substring(0, maxLen) + '…'\n        : candidate;\n    };\n\n    node.each(function (this: any, d: any) {\n      const g = d3.select(this);\n      const displayName = getDisplayLabel(d.name);\n\n      const text = g.append('text')\n        .attr('x', 0)\n        .attr('y', 28)\n        .attr('fill', 'var(--tableText)')\n        .style('font-size', '9px')\n        .style('text-anchor', 'middle')\n        .text(displayName);\n\n      const bbox = (text.node() as SVGTextElement).getBBox();\n      g.insert('rect', 'text')\n        .attr('x', bbox.x - 2)\n        .attr('y', bbox.y - 1)\n        .attr('width', bbox.width + 4)\n        .attr('height', bbox.height + 2)\n        .attr('fill', 'var(--background)')\n        .attr('opacity', 0.8)\n        .attr('rx', 2);\n    });\n\n    // Column headers removed — node types are shown in the legend instead\n\n    simulation.nodes(nodes).on('tick', ticked);\n\n    simulation.force('link').links(links);\n    node.on('mouseover', (event, d) => {\n      const endpointUtlizationJson = {};\n      drawTooltip(event, d, endpointUtlizationJson);\n    });\n\n    node.on('mouseout', function () {\n      removeTooltip();\n    });\n\n    function ticked() {\n      node.attr('transform', function (d) {\n        return 'translate(' + d.posx + ',' + d.posy + ')';\n      });\n\n      link\n        .select('line')\n        .attr('x1', function (d) {\n          return d.source.posx;\n        })\n        .attr('y1', function (d) {\n          return d.source.posy;\n        })\n        .attr('x2', function (d) {\n          return d.target.posx;\n        })\n        .attr('y2', function (d) {\n          return d.target.posy;\n        });\n\n      link\n        .select('image')\n        .attr('x', function (d) {\n          const x1 = d.source.posx,\n            x2 = d.target.posx,\n            x = x1 - (x1 - x2) / 2;\n\n          return x - 8;\n        })\n        .attr('y', function (d) {\n          const y1 = d.source.posy,\n            y2 = d.target.posy,\n            y = y1 - (y1 - y2) / 2;\n\n          return y - 12;\n        });\n\n      link\n        .select('rect')\n        .attr('opacity', 1)\n        .attr('x', function (d) {\n          return d.source.posx;\n        })\n        .attr('y', function (d) {\n          return d.source.posy;\n        })\n        .selectAll('animate')\n        .each(function (this: any, d: any, i) {\n          if (i === 0) {\n            d3.select(this)\n              .attr('attributeName', function (d) {\n                return 'x';\n              })\n              .attr('from', function (d: any) {\n                const n = d.source.posx - 1;\n                return n;\n              })\n              .attr('to', function (d: any) {\n                return d.target.posx;\n              });\n          } else {\n            d3.select(this)\n              .attr('attributeName', function (d: any) {\n                return 'y';\n              })\n              .attr('from', function (d: any) {\n                return d.source.posy;\n              })\n              .attr('to', function (d: any) {\n                return d.target.posy;\n              });\n          }\n\n          d3.select(this)\n            .attr('attributeType', 'XML')\n            .attr('begin', '0.5s')\n            .attr('dur', function (d) {\n              return '1.0s';\n            })\n            .attr('repeatCount', 'indefinite');\n        });\n    } // end of ticked\n\n    function removeTooltip() {\n      if (tooltip) {\n        // Defer the hide so the user can move onto the popover; mouseenter (above) cancels it.\n        clearTimeout(tooltipHideTimer);\n        tooltipHideTimer = setTimeout(() => tooltip.style('display', 'none'), 220);\n      }\n    }\n\n    function drawTooltip(event, d, endpointUtlizationJson) {\n      clearTimeout(tooltipHideTimer);\n      document.getElementById('epTooltip').innerHTML = readKeyValues(\n        d,\n        endpointUtlizationJson\n      );\n      tooltip.style('display', 'block');\n      tooltip.style('white-space', 'pre-wrap');\n      const x = event.pageX + 'px';\n      const y = event.pageY + 'px';\n      tooltip.style('left', x);\n      tooltip.style('top', y);\n    }\n\n    // Builds a compact status \"card\" for a node's hover tooltip: a bold name, a prominent\n    // plain-language status line (with cause), and a few key facts. Makes the connectivity of\n    // customer-hosted tunnelers and routers immediately legible.\n    function readKeyValues(d, endpointUtlizationJson) {\n      const esc = (s) => String(s).replace(/[&<>\"]/g, (c) =>\n        ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;' }[c]));\n\n      const isRouter = !!(d.type && String(d.type).includes('Router'));\n      const isService = d.group === '4' || !!(d.type && String(d.type).includes('Service'));\n\n      // The status band is the single source of truth for connectivity/enrollment — it replaces\n      // any separate \"Enrolled\" row. `caption` is a short fragment, used only where it tells the\n      // operator something the label alone doesn't (i.e. what to go check).\n      // Status pill mirrors the node dot — the component's real state (online / offline /\n      // unknown / not-enrolled), never a synthesized \"error\". Path problems live on the links.\n      let cls = 'neutral';\n      let label = '';\n      if (isService) {\n        label = 'Service';\n      } else if (isRouter) {\n        // Routers only expose isOnline (no edgeRouterConnectionStatus).\n        if (d.online === 'No' || d.status === 'ERROR') { cls = 'offline'; label = 'Offline'; }\n        else { cls = 'ok'; label = 'Online'; }\n      } else {\n        switch (d.connState) {\n          case 'online': cls = 'ok'; label = 'Online'; break;\n          case 'unknown': cls = 'unknown'; label = 'Unknown'; break;\n          case 'unenrolled': cls = 'offline'; label = 'Not enrolled'; break;\n          case 'offline':\n          default: cls = 'offline'; label = 'Offline'; break;\n        }\n      }\n\n      // No role for the service node — the icon/name already make it obvious, and a \"Role: Service\"\n      // row would just repeat itself.\n      // Role is the policy action (Dial/Bind) the identity has for the service — NOT the host\n      // mechanism, which we can't know (tunneler vs SDK vs router all look the same here).\n      let role = '';\n      if (d.group === '1') role = 'Client (Dial)';\n      else if (d.group === '3') role = 'Host (Bind)';\n      else if (isRouter) role = d.routerType === 'transit-router' ? 'Transit router' : 'Edge router';\n\n      // Facts that add detail beyond the status pill. The pill summarizes overall state; these\n      // are the granular signals an operator uses to diagnose it (a host can have an API session\n      // yet no router connection). Only the pill's own inputs (Online/Type/Enrolled) are omitted.\n      // Rows are [label, value, optional hover-context]. Service rows are purpose-labeled and\n      // adapt to how the service is configured (intercept+host, host-only, intercept-only, or\n      // SDK-defined with no address config).\n      const rows: [string, string, string?][] = [];\n      if (isService) {\n        if (d.interceptSummary) {\n          rows.push(['Intercept', d.interceptSummary]);\n        }\n        if (d.hostSummary) {\n          rows.push(['Host', d.hostSummary]);\n        }\n        if (!d.interceptSummary && !d.hostSummary) {\n          // No intercept/host config. State the facts (the config types present, or none) rather\n          // than inferring \"SDK-defined\" — there's no property that actually tells us the host type.\n          rows.push(['Config types',\n            (d.configTypeNames && d.configTypeNames.length) ? d.configTypeNames.join(', ') : 'None']);\n        }\n        if (typeof d.encryptionRequired === 'boolean') {\n          rows.push(['Encryption', d.encryptionRequired ? 'Required' : 'Not required']);\n        }\n        if (d.terminatorStrategy) {\n          rows.push(['Terminators', d.terminatorStrategy]);\n        }\n        if (d.serviceRoleAttributes && d.serviceRoleAttributes.length) {\n          rows.push(['Attributes', d.serviceRoleAttributes.join(', ')]);\n        }\n        if (d.permissions && d.permissions.length) {\n          rows.push(['Your access', d.permissions.join(', ')]);\n        }\n      } else {\n        if (role) rows.push(['Role', role]);\n        if (isRouter) {\n          if (d.tunnelerEnabled === 'Yes' || d.tunnelerEnabled === 'No') {\n            rows.push(['Tunneler Enabled', d.tunnelerEnabled]);\n          }\n        } else {\n          if (d.routerConnection === 'Yes' || d.routerConnection === 'No') {\n            rows.push(['Router Connection', d.routerConnection]);\n          }\n          if (d.apiSession === 'Yes' || d.apiSession === 'No') {\n            rows.push(['API Session', d.apiSession]);\n          }\n          if (d.os) rows.push(['OS', d.os]);\n          if (d.mfaEnabled === true) rows.push(['MFA', 'Enabled']);\n        }\n      }\n\n      let info = \"<div class='tool-tip-container tooltip-card'>\";\n      info += '<div class=\"tooltip-header\">' + esc(d.name || '') + '</div>';\n      // The service node carries no connectivity state, so it gets no status pill.\n      if (!isService) {\n        info += '<div class=\"tt-status-pill tt-' + cls + '\">'\n          + '<span class=\"tt-status-dot\"></span>'\n          + '<span class=\"tt-status-label\">' + esc(label) + '</span>'\n          + '</div>';\n      }\n      rows.forEach(([k, v, t]) => {\n        info += '<div class=\"prop-row\"' + (t ? ' title=\"' + esc(t) + '\"' : '') + '>'\n          + '<span class=\"prop-label\">' + esc(k) + '</span>'\n          + '<span class=\"prop-value\">' + esc(v) + '</span>'\n          + '</div>';\n      });\n      return info + '</div>';\n    }\n\n    function isAnObject(o) {\n      return o instanceof Object && o.constructor === Object;\n    }\n\n    this.refreshRotate = false;\n\n    // After the first render only, fit the graph to the viewBox so big topologies don't\n    // overflow off-screen. Subsequent renders (refresh ticks) preserve the user's transform.\n    if (!this.hasInitialFit) {\n      setTimeout(() => {\n        this.fitToContent();\n        this.hasInitialFit = true;\n      }, 0);\n    }\n  } // end of initTopoView\n\n  fitToContent(): void {\n    if (!this.zoomBehavior) return;\n    const nodes = this.graphJsonObj?.nodes || [];\n    if (nodes.length === 0) return;\n\n    const xs = nodes\n      .map((n: any) => n.posx)\n      .filter((v: any) => typeof v === 'number' && !isNaN(v));\n    const ys = nodes\n      .map((n: any) => n.posy)\n      .filter((v: any) => typeof v === 'number' && !isNaN(v));\n    if (xs.length === 0 || ys.length === 0) return;\n\n    const padding = 60;\n    const minX = Math.min(...xs);\n    const maxX = Math.max(...xs);\n    const minY = Math.min(...ys);\n    const maxY = Math.max(...ys);\n    const contentWidth = (maxX - minX) + padding * 2;\n    const contentHeight = (maxY - minY) + padding * 2;\n    if (contentWidth <= 0 || contentHeight <= 0) return;\n\n    // Reserve room in the bottom-right for the legend so the auto-fit doesn't place nodes\n    // underneath it. When the legend is collapsed there's nothing to avoid.\n    const reserveRight = this.legendCollapsed ? 0 : 160;\n    const reserveBottom = this.legendCollapsed ? 0 : 90;\n    const availWidth = this.viewBoxWidth - reserveRight;\n    const availHeight = this.viewBoxHeight - reserveBottom;\n\n    const scale = Math.min(\n      availWidth / contentWidth,\n      availHeight / contentHeight,\n      1\n    );\n    // Center the content within the available (legend-free) area, which sits at the top-left,\n    // leaving the reserved margin on the right/bottom for the legend panel.\n    const tx = (availWidth - contentWidth * scale) / 2 - (minX - padding) * scale;\n    const ty = (availHeight - contentHeight * scale) / 2 - (minY - padding) * scale;\n\n    d3.select('#IdentityTopology')\n      .transition()\n      .duration(300)\n      .call(\n        this.zoomBehavior.transform,\n        d3.zoomIdentity.translate(tx, ty).scale(scale)\n      );\n  }\n\n  zoomIn(): void {\n    if (!this.zoomBehavior) return;\n    d3.select('#IdentityTopology')\n      .transition()\n      .duration(200)\n      .call(this.zoomBehavior.scaleBy, 1.4);\n  }\n\n  zoomOut(): void {\n    if (!this.zoomBehavior) return;\n    d3.select('#IdentityTopology')\n      .transition()\n      .duration(200)\n      .call(this.zoomBehavior.scaleBy, 1 / 1.4);\n  }\n\n  resetView(): void {\n    this.fitToContent();\n  }\n}\n\nclass ServiceData {\n  id;\n  name;\n}\n\n","<div [ngClass]=\"{ 'full-screen': fullScreen }\" class=\"modal solid\" id=\"IdentityVisualizer\">\n  <div class=\"tp-data-header\">\n    <div class=\"modaltitle\">Identity Service Path</div>\n    <div (click)=\"hide()\" class=\"buttonBall icon-close\" id=\"EscZEndpointClose\"></div>\n    <div (click)=\"toggleModalSize()\" class=\"buttonBall resize\" id=\"ResizeModalButton\"></div>\n  </div>\n  <div [ngClass]=\"isDarkMode==true?'darkMode':'lightMode'\" class=\"identity-topology-container\">\n    <div class=\"topology-toolbar\">\n      <div class=\"ep-topology-filter-container listBox row\">\n        <input\n          (keyup)=\"filterSearchArray()\"\n          [(ngModel)]=\"selectedService\"\n          [matAutocomplete]=\"auto\"\n          class=\"topology-filter-input\"\n          id=\"filterText\"\n          matInput\n          placeholder=\"Type to search identity accessible services.\"\n          />\n\n        @if (filterText) {\n          <div\n            (click)=\"clearSearchFilter()\"\n            class=\"clear-svc-icon icon-close\"\n            id=\"ClearSearchFilter\"\n          ></div>\n        }\n        <div [hidden]=\"!noSearchResults\" class=\"no-results-warning\">No Results Found</div>\n        <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"autocompleteSearch($event)\">\n          @for (option of autocompleteOptions; track option) {\n            <mat-option [value]=\"option.name\">\n              {{ option.name }}\n            </mat-option>\n          }\n        </mat-autocomplete>\n      </div>\n      <div class=\"topology-refresh-controls\">\n        <div\n          (click)=\"refreshFabricData()\"\n          [ngClass]=\"{ rotating: refreshRotate }\"\n          class=\"refresh-button\"\n          id=\"RefreshFabricButton\"\n          title=\"Refresh fabric data\"\n        >\n          <div class=\"refresh-icon\"></div>\n        </div>\n      </div>\n    </div>\n\n    <div class=\"topotip\" id=\"epTooltip\"></div>\n\n    <svg style='pointer-events:all' height=\"1000\" id=\"IdentityTopology\" width=\"1400\">\n    </svg>\n    <div class=\"topology-zoom-controls\">\n      <div (click)=\"zoomIn()\" class=\"zoom-btn\" title=\"Zoom in\" id=\"ZoomInButton\">+</div>\n      <div (click)=\"zoomOut()\" class=\"zoom-btn\" title=\"Zoom out\" id=\"ZoomOutButton\">&#8722;</div>\n      <div (click)=\"resetView()\" class=\"zoom-btn zoom-btn-text\" title=\"Fit to content\" id=\"FitToContentButton\">Fit</div>\n    </div>\n    @if (isLoading) {\n      <lib-loading-indicator [isLoading]=\"isLoading\"></lib-loading-indicator>\n    }\n\n    <div class=\"topology-legend\" [class.collapsed]=\"legendCollapsed\">\n      <div class=\"legend-header\" (click)=\"legendCollapsed = !legendCollapsed\"\n           [title]=\"legendCollapsed ? 'Show legend' : 'Hide legend'\">\n        <span class=\"legend-header-title\">Legend</span>\n        <span class=\"legend-header-toggle\" aria-hidden=\"true\">\n          <svg viewBox=\"0 0 16 16\" width=\"13\" height=\"13\">\n            <path d=\"M3.5 6 L8 10.5 L12.5 6\" fill=\"none\" stroke=\"currentColor\"\n                  stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n          </svg>\n        </span>\n      </div>\n      @if (!legendCollapsed) {\n      <div class=\"legend-body\">\n      <div class=\"legend-section\">\n        <div class=\"legend-section-title\">Nodes</div>\n        <div class=\"legend-item\" title=\"An endpoint identity — a client that dials the service or a tunneler that hosts it.\">\n          <div class=\"legend-icon-col\"><img class=\"legend-node-icon\" src=\"assets/images/visualizer/host.png\" /></div>\n          <div class=\"legend-text\">Identity</div>\n        </div>\n        <div class=\"legend-item\" title=\"A Ziti edge router that relays traffic between identities.\">\n          <div class=\"legend-icon-col\"><img class=\"legend-node-icon\" src=\"assets/images/visualizer/Routers.png\" /></div>\n          <div class=\"legend-text\">Edge Router</div>\n        </div>\n        <div class=\"legend-item\" title=\"The service being dialed and hosted.\">\n          <div class=\"legend-icon-col\"><img class=\"legend-node-icon\" src=\"assets/images/visualizer/service.png\" /></div>\n          <div class=\"legend-text\">Service</div>\n        </div>\n      </div>\n      <div class=\"legend-section\">\n        <div class=\"legend-section-title\">Status</div>\n        <div class=\"legend-item\" title=\"Connected to an edge router.\">\n          <div class=\"legend-icon-col\"><div class=\"legend-circle online\"></div></div>\n          <div class=\"legend-text\">Online</div>\n        </div>\n        <div class=\"legend-item\" title=\"Enrolled but not currently connected (e.g. powered off or idle).\">\n          <div class=\"legend-icon-col\"><div class=\"legend-circle offline\"></div></div>\n          <div class=\"legend-text\">Offline</div>\n        </div>\n        <div class=\"legend-item\" title=\"Identity-only: the controller can't currently determine the connection state.\">\n          <div class=\"legend-icon-col\"><div class=\"legend-circle unknown\"></div></div>\n          <div class=\"legend-text\">Unknown</div>\n        </div>\n        <div class=\"legend-item\" title=\"Identity has not completed enrollment.\">\n          <div class=\"legend-icon-col\"><div class=\"legend-circle notenrolled\"></div></div>\n          <div class=\"legend-text\">Not enrolled</div>\n        </div>\n      </div>\n      @if (fabricApiAvailable) {\n        <div class=\"legend-section\">\n          <div class=\"legend-section-title\">Path</div>\n          <div class=\"legend-item\" title=\"Live traffic is flowing over this hop right now.\">\n            <div class=\"legend-icon-col\"><div class=\"legend-line active-circuit\"></div></div>\n            <div class=\"legend-text\">Active Circuit</div>\n          </div>\n          <div class=\"legend-item\" title=\"Reachable and authorized, but no active circuit at the moment.\">\n            <div class=\"legend-icon-col\"><div class=\"legend-line available\"></div></div>\n            <div class=\"legend-text\">Available</div>\n          </div>\n          <div class=\"legend-item\" title=\"This hop can't carry traffic right now. The node colors show which end is the problem — an offline router, or an unreachable / un-enrolled endpoint.\">\n            <div class=\"legend-icon-col\"><div class=\"legend-line broken\"></div></div>\n            <div class=\"legend-text\">Unavailable</div>\n          </div>\n        </div>\n      }\n      </div>\n      }\n    </div>\n\n  </div>\n</div>\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\nimport {ConsoleEventsService} from \"../../services/console-events.service\";\n\n@Component({\n    selector: 'lib-side-modal',\n    templateUrl: './side-modal.component.html',\n    styleUrls: ['./side-modal.component.scss'],\n    standalone: false\n})\nexport class SideModalComponent implements OnInit {\n\n  @Input() showClose = false;\n  @Input() open = false;\n  @Output() openChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n  constructor(private consoleEvents: ConsoleEventsService) {}\n\n  ngOnInit(): void {}\n\n  close() {\n    this.open = false;\n    this.openChange.emit(this.open);\n  }\n}\n","<div class=\"side-modal-container\" [ngClass]=\"{'side-modal-open': open}\">\n  @if (showClose) {\n    <div class=\"close icon-close\" (click)=\"close()\"></div>\n  }\n  <ng-content></ng-content>\n</div>\n\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Inject, Injectable} from \"@angular/core\";\nimport {GrowlerModel} from \"../messaging/growler.model\";\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../services/ziti-data.service\";\nimport {GrowlerService} from \"../messaging/growler.service\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class OverridesService {\n\n    overrides: any = [];\n\n    constructor(\n        @Inject(ZITI_DATA_SERVICE) private zitiDataService: ZitiDataService,\n        private growlerService: GrowlerService\n    ) {}\n\n    loadOverrides(identity): Promise<any> {\n        return this.zitiDataService.get(`identities/${identity.id}/service-configs`, {}, []).then((result) => {\n            this.overrides = result.data;\n            return this.overrides;\n        });\n    }\n\n    loadServices(filter): Promise<any> {\n        const paging = {\n            total: 30,\n            page: 1,\n            sort: 'name',\n            order: 'asc'\n        };\n        const filters: any[] = [];\n        if (filter && filter !== '') {\n            const verb =\n                this.zitiDataService.dataServiceType === ZitiDataService.NODE_DATA_SERVICE_TYPE\n                    ? 'contains'\n                    : 'icontains';\n            filters.push({\n                columnId: 'name',\n                type: 'TEXTINPUT',\n                value: filter,\n                verb\n            });\n        }\n        return this.zitiDataService.get(`services`, paging, filters).then((result) => {\n            return result;\n        });\n    }\n\n    loadConfigs(filter): Promise<any> {\n        const paging = {\n            total: 30,\n            page: 1,\n            sort: 'name',\n            order: 'desc'\n        };\n        const filters: any[] = [];\n        if (filter && filter !== '') {\n            const verb =\n                this.zitiDataService.dataServiceType === ZitiDataService.NODE_DATA_SERVICE_TYPE\n                    ? 'contains'\n                    : 'icontains';\n            filters.push({\n                columnId: 'name',\n                type: 'TEXTINPUT',\n                value: filter,\n                verb\n            });\n        }\n        return this.zitiDataService.get(`configs`, paging, filters).then((result) => {\n            return result;\n        });\n    }\n\n    addOverride(identity, selectedServiceId, selectedConfigId): Promise<any> {\n        if (this.overrideExists(selectedServiceId, selectedConfigId)) {\n            const growlerData = new GrowlerModel(\n                'error',\n                'Error',\n                `Already Added`,\n                `Overrides has already been added to this identity`,\n            );\n            this.growlerService.show(growlerData);\n            return Promise.resolve();\n        }\n        const data = [{\n            serviceId: selectedServiceId,\n            configId: selectedConfigId\n        }];\n        return this.zitiDataService.saveSubdata('identities' , identity.id, 'service-configs', data).then(() => {\n            const growlerData = new GrowlerModel(\n                'success',\n                'Success',\n                `Override Added`,\n                `Successfully added override to identity`,\n            );\n            this.growlerService.show(growlerData);\n            return true;\n        }).catch((error) => {\n            const growlerData = new GrowlerModel(\n                'error',\n                'Error',\n                `Override Failed`,\n                `Failed to add override to identity`,\n            );\n            this.growlerService.show(growlerData);\n            return false;\n        });\n    }\n\n    overrideExists(selectedServiceId, selectedConfigId) {\n        let exists = false;\n        this.overrides.forEach((override) => {\n            if (override.serviceId === selectedServiceId && override.configId === selectedConfigId) {\n                exists = true;\n            }\n        })\n        return exists;\n    }\n\n    removeOverride(identity, override): Promise<any> {\n        const data = [{\n            serviceId: override.service.id,\n            configId: override.config.id\n        }];\n        return this.zitiDataService.deleteSubdata('identities' , identity.id, 'service-configs', data).then(() => {\n            const growlerData = new GrowlerModel(\n                'success',\n                'Success',\n                `Override Removed`,\n                `Successfully removed override from identity`,\n            );\n            this.growlerService.show(growlerData);\n        }).catch((error) => {\n            const growlerData = new GrowlerModel(\n                'error',\n                'Error',\n                `Removal Failed`,\n                `Failed to remove override from identity`,\n            );\n            this.growlerService.show(growlerData);\n        });\n    }\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n    selector: 'ng-template[libFilterSelectOption]',\n    standalone: false,\n})\nexport class FilterSelectOptionTemplateDirective {\n    constructor(public templateRef: TemplateRef<any>) {}\n}\n\n@Directive({\n    selector: 'ng-template[libFilterSelectTrigger]',\n    standalone: false,\n})\nexport class FilterSelectTriggerTemplateDirective {\n    constructor(public templateRef: TemplateRef<any>) {}\n}\n\n","import {\n    ContentChild,\n    Component,\n    EventEmitter,\n    forwardRef,\n    Input,\n    OnDestroy,\n    Output,\n    ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatSelect } from '@angular/material/select';\nimport { Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, takeUntil } from 'rxjs/operators';\nimport { FilterSelectOptionTemplateDirective, FilterSelectTriggerTemplateDirective } from './filter-select-templates.directive';\n\n@Component({\n    selector: 'lib-filter-select',\n    templateUrl: './filter-select.component.html',\n    styleUrls: ['./filter-select.component.scss'],\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => FilterSelectComponent),\n            multi: true,\n        },\n    ],\n    standalone: false,\n})\nexport class FilterSelectComponent implements ControlValueAccessor, OnDestroy {\n    @Input() id?: string;\n    @Input() placeholder = '';\n    /**\n     * Classes applied to the Material select overlay panel (useful for per-instance styling).\n     * Note: the panel is rendered in an overlay container, outside this component's DOM.\n     */\n    @Input() panelClass?: string | string[];\n\n    /** Array of raw option objects */\n    @Input() options: any[] = [];\n\n    /** Property name to use for labels/values when options are objects */\n    @Input() optionLabel = 'name';\n    @Input() optionValue = 'id';\n\n    /** Show a search input inside the dropdown panel */\n    @Input() searchable = true;\n    @Input() searchPlaceholder = 'Filter';\n\n    /**\n     * If true, filters `options` locally. If false, emits `filterChange` so the parent can do remote filtering.\n     */\n    @Input() localFilter = false;\n\n    /** If true, opening the control via keyboard focus will auto-open the panel (matches prior p-select UX) */\n    @Input() openOnFocus = false;\n\n    /** Show a clear (X) button to clear the current selection */\n    @Input() showClear = true;\n\n    /** Emits when selection changes */\n    @Output() selectionChange = new EventEmitter<any>();\n\n    /** Emits (debounced) as the user types in the search box */\n    @Output() filterChange = new EventEmitter<string>();\n\n    @ViewChild(MatSelect) matSelect?: MatSelect;\n    @ContentChild(FilterSelectOptionTemplateDirective) optionTemplate?: FilterSelectOptionTemplateDirective;\n    @ContentChild(FilterSelectTriggerTemplateDirective) triggerTemplate?: FilterSelectTriggerTemplateDirective;\n\n    /** Combined with ControlValueAccessor disabled state (e.g. disable mat-select when parent form is read-only). */\n    @Input() disableControl = false;\n\n    value: any = undefined;\n    disabled = false;\n\n    filterText = '';\n\n    /** Ensure our overlay panel always carries a stable class for global styling. */\n    get resolvedPanelClass(): string[] {\n        const base = ['lib-filter-select-panel'];\n        const provided = this.panelClass;\n        if (!provided) {\n            return base;\n        }\n        if (Array.isArray(provided)) {\n            return [...base, ...provided];\n        }\n        return [...base, provided];\n    }\n\n    private readonly destroyed$ = new Subject<void>();\n    private readonly filterText$ = new Subject<string>();\n\n    // ControlValueAccessor\n    private onChange: (value: any) => void = () => {};\n    private onTouched: () => void = () => {};\n\n    constructor() {\n        this.filterText$\n            .pipe(debounceTime(200), distinctUntilChanged(), takeUntil(this.destroyed$))\n            .subscribe((text) => {\n                this.filterChange.emit(text);\n            });\n    }\n\n    ngOnDestroy(): void {\n        this.destroyed$.next();\n        this.destroyed$.complete();\n    }\n\n    writeValue(value: any): void {\n        this.value = value;\n    }\n\n    registerOnChange(fn: (value: any) => void): void {\n        this.onChange = fn;\n    }\n\n    registerOnTouched(fn: () => void): void {\n        this.onTouched = fn;\n    }\n\n    setDisabledState(isDisabled: boolean): void {\n        this.disabled = isDisabled;\n    }\n\n    // Public API (keeps parity with existing p-select calls in the codebase)\n    show(): void {\n        this.matSelect?.open();\n    }\n\n    hide(): void {\n        this.matSelect?.close();\n    }\n\n    clear(evt?: Event): void {\n        if (evt) {\n            evt.stopPropagation();\n            evt.preventDefault();\n        }\n        this.value = undefined;\n        this.onChange(this.value);\n        this.selectionChange.emit(this.value);\n    }\n\n    /**\n     * Clears the search text. By default does NOT emit `filterChange` (callers can reload explicitly).\n     */\n    resetFilter(emit = false): void {\n        this.filterText = '';\n        if (emit) {\n            this.filterText$.next('');\n        }\n    }\n\n    handleFocus(): void {\n        this.onTouched();\n        if (this.openOnFocus) {\n            // Defer to next tick so focus processing finishes before opening.\n            setTimeout(() => this.show(), 0);\n        }\n    }\n\n    onMatSelectionChange(nextValue: any): void {\n        this.value = nextValue;\n        this.onChange(nextValue);\n        this.selectionChange.emit(nextValue);\n    }\n\n    onFilterTextChanged(text: string): void {\n        this.filterText = text ?? '';\n        if (!this.localFilter) {\n            this.filterText$.next(this.filterText);\n        }\n    }\n\n    clearFilter(evt: Event): void {\n        evt.stopPropagation();\n        evt.preventDefault();\n        this.resetFilter(true);\n    }\n\n    get displayedOptions(): any[] {\n        if (!this.localFilter) {\n            return this.options ?? [];\n        }\n        const q = (this.filterText || '').toLowerCase().trim();\n        if (!q) {\n            return this.options ?? [];\n        }\n        return (this.options ?? []).filter((o) => {\n            const label = String(this.getOptionLabel(o) ?? '').toLowerCase();\n            return label.includes(q);\n        });\n    }\n\n    get selectedOption(): any {\n        const opts = this.options ?? [];\n        return opts.find((o) => this.getOptionValue(o) === this.value);\n    }\n\n    get isValueEmpty(): boolean {\n        return this.value === undefined || this.value === null || this.value === '';\n    }\n\n    getOptionLabel(option: any): any {\n        if (option === undefined || option === null) {\n            return '';\n        }\n        if (typeof option === 'string' || typeof option === 'number') {\n            return option;\n        }\n        return option?.[this.optionLabel];\n    }\n\n    getOptionValue(option: any): any {\n        if (option === undefined || option === null) {\n            return undefined;\n        }\n        if (typeof option === 'string' || typeof option === 'number') {\n            return option;\n        }\n        return option?.[this.optionValue];\n    }\n\n    get selectDisabled(): boolean {\n        return this.disabled || this.disableControl;\n    }\n\n    trackByOption = (_: number, option: any) => this.getOptionValue(option);\n}\n","<mat-form-field class=\"lib-filter-select\" subscriptSizing=\"dynamic\">\n  <mat-select\n    [id]=\"id\"\n    [disabled]=\"selectDisabled\"\n    [placeholder]=\"placeholder\"\n    [value]=\"value\"\n    [panelClass]=\"resolvedPanelClass\"\n    (selectionChange)=\"onMatSelectionChange($event.value)\"\n    (focus)=\"handleFocus()\"\n    >\n    @if (triggerTemplate?.templateRef) {\n      <mat-select-trigger>\n        <ng-container\n                *ngTemplateOutlet=\"\n                    triggerTemplate.templateRef;\n                    context: { $implicit: selectedOption, option: selectedOption, value: value }\n                \"\n        ></ng-container>\n      </mat-select-trigger>\n    }\n\n    @if (searchable) {\n      <mat-option\n        class=\"lib-filter-select__search-option\"\n        >\n        <div\n          class=\"lib-filter-select__search\"\n          (click)=\"$event.stopPropagation()\"\n          (mousedown)=\"$event.stopPropagation()\"\n          >\n          <i class=\"pi pi-search lib-filter-select__search-icon\" aria-hidden=\"true\"></i>\n          <input\n            matInput\n            type=\"text\"\n            [placeholder]=\"searchPlaceholder\"\n            [(ngModel)]=\"filterText\"\n            [ngModelOptions]=\"{ standalone: true }\"\n            (ngModelChange)=\"onFilterTextChanged($event)\"\n            (keydown)=\"$event.stopPropagation()\"\n            />\n          @if (filterText && filterText.length > 0) {\n            <button\n              mat-icon-button\n              type=\"button\"\n              class=\"lib-filter-select__search-clear\"\n              (click)=\"clearFilter($event)\"\n              aria-label=\"Clear filter\"\n              >\n              <i class=\"pi pi-times\" aria-hidden=\"true\"></i>\n            </button>\n          }\n        </div>\n      </mat-option>\n    }\n\n    @for (option of displayedOptions; track trackByOption($index, option)) {\n      <mat-option\n        [value]=\"getOptionValue(option)\"\n        >\n        @if (optionTemplate?.templateRef) {\n          <ng-container\n            *ngTemplateOutlet=\"optionTemplate.templateRef; context: { $implicit: option, option: option }\"\n          ></ng-container>\n        } @else {\n          {{ getOptionLabel(option) }}\n        }\n      </mat-option>\n    }\n  </mat-select>\n\n  @if (showClear && !selectDisabled && !isValueEmpty) {\n    <button\n      mat-icon-button\n      matSuffix\n      type=\"button\"\n      (click)=\"clear($event)\"\n      aria-label=\"Clear selection\"\n      >\n      <i class=\"pi pi-times\" aria-hidden=\"true\"></i>\n    </button>\n  }\n</mat-form-field>\n\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, EventEmitter, Input, OnInit, Output, ViewChild} from '@angular/core';\nimport {OverridesService} from \"./overrides.service\";\nimport {isEmpty, debounce} from \"lodash\"\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\n\n@Component({\n    selector: 'lib-overrides',\n    templateUrl: './overrides.component.html',\n    styleUrls: ['./overrides.component.scss'],\n    standalone: false\n})\nexport class OverridesComponent implements OnInit {\n  @Input() identity: any = {};\n  @Output() close: EventEmitter<any> = new EventEmitter<any>();\n\n  services: any = [];\n  configs: any = [];\n  overrides: any = [];\n  selectedServiceId;\n  selectedConfigId;\n  showMore = false;\n\n  // NOTE: lodash debounce must preserve `this` binding; use arrow fns.\n  filterServicesDebounced = debounce((filterText: string) => this.getServices(filterText), 200);\n  filterConfigsDebounced = debounce((filterText: string) => this.getConfigs(filterText), 200);\n\n  @ViewChild('servicesList') servicesList: FilterSelectComponent;\n  @ViewChild('configList') configList: FilterSelectComponent;\n\n  constructor(public svc: OverridesService) {}\n\n  ngOnInit() {\n    this.loadOverrides();\n    this.getServices('');\n    this.getConfigs('');\n  }\n\n  getServices(filter = '') {\n    this.svc.loadServices(filter).then((result) => {\n      this.services = result.data;\n      //this.showMore = result.totalCount > result.limit;\n    });\n  }\n\n  getConfigs(filter = '') {\n    this.svc.loadConfigs(filter).then((result) => {\n      this.configs = result.data;\n    });\n  }\n\n  loadOverrides() {\n    this.svc.loadOverrides(this.identity).then((overrides) => {\n      this.overrides = overrides;\n    });\n  }\n\n  addOverride() {\n    this.svc.addOverride(this.identity, this.selectedServiceId, this.selectedConfigId).then((result) => {\n      if (!result) {\n        return;\n      }\n      this.loadOverrides();\n      this.selectedConfigId = undefined;\n      this.selectedServiceId = undefined;\n      this.servicesList.clear();\n      this.servicesList.resetFilter();\n      this.configList.clear();\n      this.configList.resetFilter();\n      this.getServices('');\n    });\n  }\n\n  removeOverride(override) {\n    this.svc.removeOverride(this.identity, override).then(() => {\n      this.loadOverrides();\n    });\n  }\n\n  get disableAddButton() {\n    return isEmpty(this.selectedServiceId) || isEmpty(this.selectedConfigId);\n  }\n}\n","<div id=\"OverrideModal\" class=\"overrides-wrapper\">\n  <div class=\"overrides-container sized large\">\n    <div class=\"form-title-container\">\n      <div class=\"form-title-back-button\" (click)=\"close.emit()\">\n        <div class=\"form-title-back-button-image\"></div>\n        <div class=\"form-title-back-button-line\"></div>\n      </div>\n      <span class=\"title\">IDENTITY OVERRIDES</span>\n    </div>\n    <div class=\"subtitle\">Manage the Service Config Identity Overrides</div>\n    @if (overrides.length > 0) {\n      <div class=\"darkened overrides-label\">Current Overrides</div>\n      <table id=\"OverrideList\" class=\"overrides-table\">\n        <colgroup>\n          <col />\n          <col />\n          <col class=\"overrides-table__col-remove\" />\n        </colgroup>\n        <thead>\n          <tr>\n            <th scope=\"col\">Service</th>\n            <th scope=\"col\">Configuration</th>\n            <th scope=\"col\" class=\"overrides-table__th-remove\" aria-label=\"Remove\"></th>\n          </tr>\n        </thead>\n        <tbody>\n          @for (override of overrides; track override) {\n            <tr>\n              <td\n                [matTooltip]=\"override.service.name\"\n                matTooltipShowDelay=\"300\"\n                >\n                {{override.service.name}}\n              </td>\n              <td\n                [matTooltip]=\"override.config.name\"\n                matTooltipShowDelay=\"300\"\n                >\n                {{override.config.name}}\n              </td>\n              <td class=\"overrides-table__cell-remove\">\n                <button\n                  type=\"button\"\n                  class=\"overrides-table__remove-btn\"\n                  (click)=\"removeOverride(override)\"\n                  [attr.aria-label]=\"'Remove override'\"\n                  >\n                  <span class=\"remove icon-minus\" aria-hidden=\"true\"></span>\n                </button>\n              </td>\n            </tr>\n          }\n        </tbody>\n      </table>\n    }\n    <div class=\"darkened\">ADD OVERRIDE CONFIG</div>\n    <div class=\"grid split override-list-container\">\n      <div>\n        <label for=\"ServiceList\">Service</label>\n        <lib-filter-select\n          #servicesList\n          id=\"ServiceList\"\n          [options]=\"services\"\n          [(ngModel)]=\"selectedServiceId\"\n          placeholder=\"Select a service\"\n          optionValue=\"id\"\n          optionLabel=\"name\"\n          [openOnFocus]=\"true\"\n          (filterChange)=\"filterServicesDebounced($event)\"\n        ></lib-filter-select>\n      </div>\n      <div>\n        <label for=\"ConfigList\">Configuration</label>\n        <lib-filter-select\n          #configList\n          id=\"ConfigList\"\n          [options]=\"configs\"\n          [(ngModel)]=\"selectedConfigId\"\n          placeholder=\"Select a config\"\n          optionValue=\"id\"\n          optionLabel=\"name\"\n          [openOnFocus]=\"true\"\n          (filterChange)=\"filterConfigsDebounced($event)\"\n        ></lib-filter-select>\n      </div>\n    </div>\n    <div class=\"buttons\">\n      <div\n        id=\"AssociateButton\"\n        class=\"button confirm\"\n        [ngClass]=\"{disabled: disableAddButton}\"\n        (click)=\"addOverride()\"\n        >\n        Add\n      </div>\n    </div>\n  </div>\n</div>","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, Inject, OnInit, OnDestroy} from '@angular/core';\nimport {Router, NavigationEnd, ActivatedRoute} from '@angular/router'\nimport {IdentitiesPageService} from \"./identities-page.service\";\nimport {DataTableFilterService, FilterObj} from \"../../features/data-table/data-table-filter.service\";\nimport {ListPageComponent} from \"../../shared/list-page-component.class\";\nimport {TabNameService} from \"../../services/tab-name.service\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {ConsoleEventsService} from \"../../services/console-events.service\";\nimport {QrCodeComponent} from \"../../features/qr-code/qr-code.component\";\nimport {ResetEnrollmentComponent} from \"../../features/reset-enrollment/reset-enrollment.component\";\nimport {IDENTITY_EXTENSION_SERVICE} from \"../../features/projectable-forms/identity/identity-form.service\";\nimport {ExtensionService} from \"../../features/extendable/extensions-noop.service\";\nimport { IdentityServicePathComponent } from \"../../features/visualizer/identity-service-path/identity-service-path.component\";\n\n@Component({\n    selector: 'lib-identities',\n    templateUrl: './identities-page.component.html',\n    styleUrls: ['./identities-page.component.scss'],\n    standalone: false\n})\nexport class IdentitiesPageComponent extends ListPageComponent implements OnInit, OnDestroy {\n\n  title = 'Identities'\n  tabs: { url: string, label: string }[] ;\n  isLoading = false;\n  formDataChanged = false;\n\n  constructor(\n      public override svc: IdentitiesPageService,\n      filterService: DataTableFilterService,\n      dialogForm: MatDialog,\n      private tabNames: TabNameService,\n      private router: Router,\n      consoleEvents: ConsoleEventsService,\n      @Inject(IDENTITY_EXTENSION_SERVICE) private extService: ExtensionService,\n  ) {\n    super(filterService, svc, consoleEvents, dialogForm, extService);\n  }\n\n  override ngOnInit() {\n    this.tabs = this.tabNames.getTabs('identities');\n    this.svc.refreshData = this.refreshData;\n    this.subscription.add(\n      this.router.events.subscribe((event: any) => {\n        if (event instanceof NavigationEnd) {\n          this.refreshData();\n        }\n      })\n    );\n    this.svc.getIdentityRoleAttributes();\n    super.ngOnInit();\n  }\n\n  headerActionClicked(action: string) {\n    switch(action) {\n      case 'add':\n        this.svc.openEditForm();\n        break;\n      case 'edit':\n        this.svc.openUpdate();\n        break;\n      case 'delete':\n        const selectedItems = this.rowData.filter((row) => {\n          return row.selected;\n        });\n        const label = selectedItems.length > 1 ? 'identities' : 'identity';\n        this.openBulkDelete(selectedItems, label);\n        break;\n      default:\n    }\n  }\n\n  closeModal(event?) {\n    this.svc.sideModalOpen = false;\n    if(event?.refresh) {\n      this.refreshData();\n      this.svc.getIdentityRoleAttributes();\n    }\n  }\n\n  dataChanged(event) {\n    this.formDataChanged = event;\n  }\n\n  tableAction(event: any) {\n    const extensionActionFound = this.handleExtensionActions(event);\n    this.trackMenuAction(event?.action, event?.item);\n    if (extensionActionFound) {\n      return;\n    }\n    switch(event?.action) {\n      case 'toggleAll':\n        this.itemToggled(event.item);\n        this.rowData.forEach((item) => {\n          if (item.typeId === 'Router') {\n            item.selected = false;\n          }\n        });\n        break;\n      case 'toggleItem':\n        this.itemToggled(event.item)\n        break;\n      case 'update':\n        this.svc.openEditForm(event?.item?.id);\n        break;\n      case 'create':\n        this.svc.openEditForm();\n        break;\n      case 'override':\n        this.svc.openOverridesModal(event.item);\n        break;\n      case 'delete':\n        this.deleteItem(event.item)\n        break;\n      case 'download-enrollment':\n        this.downloadJWT(event.item)\n        break;\n      case 'reset-enrollment':\n        this.resetEnrollment(event.item);\n        break;\n      case 'reissue-enrollment':\n        this.reissueEnrollment(event.item);\n        break;\n      case \"identity-service-path\":\n        this.openIdentityVisualizer(event.item);\n        break;\n      case \"qr-code\":\n        this.showQRCode(event.item);\n        break;\n      case 'download-all':\n        this.downloadAllItems();\n        break;\n      case 'download-selected':\n        this.svc.downloadItems(this.selectedItems);\n        break;\n      case 'reset-mfa':\n        this.isLoading = true;\n        this.svc.resetMFA(event.item).finally(() => {\n          this.isLoading = false;\n          this.refreshData();\n        });\n        break;\n      default:\n        break;\n    }\n  }\n\n  downloadJWT(item: any) {\n    const jwt = this.svc.getJWT(item);\n    this.svc.downloadJWT(jwt, item.name);\n  }\n\n  showQRCode(item: any) {\n    const data = {\n      jwt: this.svc.getJWT(item),\n      expiration: this.svc.getEnrollmentExpiration(item),\n      qrCodeSize: 500,\n      identity: item,\n      qrOnly: true,\n    };\n    this.dialogRef = this.dialogForm.open(QrCodeComponent, {\n      data: data,\n      autoFocus: false,\n    });\n  }\n\n  trackMenuAction(action: string, item: any) {\n    this.extService?.consoleActionTriggered?.emit({\n      action,\n      page: 'identity',\n      item,\n      type:'menu-action'\n    });\n  }\n\n  deleteItem(item: any) {\n    this.openBulkDelete([item], 'identity');\n  }\n\n  openIdentityVisualizer(identity) {\n    this.dialogRef = this.dialogForm.open(IdentityServicePathComponent, {\n      data: {\n        identity: identity,\n      },\n      autoFocus: false,\n    });\n  }\n\n  resetEnrollment(identity) {\n    this.dialogRef = this.dialogForm.open(ResetEnrollmentComponent, {\n      data: {\n        identity: identity,\n        type: 'reset',\n      },\n      autoFocus: false,\n    });\n    this.dialogRef.afterClosed().subscribe((result) => {\n      if(result) {\n        this.refreshData(undefined, true);\n      }\n    });\n  }\n\n  reissueEnrollment(identity) {\n    this.dialogRef = this.dialogForm.open(ResetEnrollmentComponent, {\n      data: {\n        identity: identity,\n        type: 'reissue',\n      },\n      autoFocus: false,\n    });\n    this.dialogRef.afterClosed().subscribe((result) => {\n      if(result) {\n        this.refreshData(undefined, true);\n      }\n    })\n  }\n\n  override ngOnDestroy() {\n    super.ngOnDestroy();\n  }\n\n  canDeactivate() {\n    if (this.formDataChanged && this.svc.sideModalOpen) {\n      return confirm('You have unsaved changes. Do you want to leave this page and discard your changes or stay on this page?');\n    }\n    return true;\n  }\n}\n","<div class=\"ziti-page-container ziti-identities-container\">\n  <lib-list-page-header [title]=\"title\"\n    [tabs]=\"tabs\"\n    [showAdd]=\"!itemsSelected\"\n    [blockCreate]=\"headerBlockCreate\"\n    [blockDelete]=\"headerBlockDelete\"\n  (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n  <ng-content select=\"[slot=list-page-subheader]\"></ng-content>\n  <lib-data-table [tableId]=\"'identities'\"\n    [noItemsReadonly]=\"headerBlockCreate\"\n    [accessDenied]=\"headerBlockRead\"\n    [rowData]=\"rowData\"\n    [isLoading]=\"isLoading\"\n    [columnDefinitions]=\"columnDefs\"\n    (actionRequested)=\"tableAction($event)\"\n    [startCount]=\"startCount\"\n    [endCount]=\"endCount\"\n    [totalCount]=\"totalCount\"\n    [currentPage]=\"filterService.currentPage\"\n    [emptyMsg]=\"'No Identities defined, Click the plus to add an Identity.'\"\n    [filterApplied]=\"filterApplied\"\n    [menuItems]=\"svc.menuItems\"\n    [headerActions]=\"svc.tableHeaderActions\"\n    [noItemsImage]=\"'No_Clients'\"\n    (gridReady)=\"gridReady($event)\"\n    >\n  </lib-data-table>\n</div>\n<lib-side-modal [(open)]=\"svc.sideModalOpen\" [showClose]=\"false\">\n  @if (svc.modalType === 'overrides' && svc.sideModalOpen) {\n    <lib-overrides\n      [identity]=\"svc.selectedIdentity\"\n      (close)=\"closeModal($event)\"\n    ></lib-overrides>\n  }\n</lib-side-modal>\n@if (isLoading) {\n  <lib-loading-indicator [isLoading]=\"isLoading\"></lib-loading-indicator>\n}\n","import {Component, Inject, OnInit, OnDestroy} from '@angular/core';\n\nimport {EdgeRoutersPageService} from \"./edge-routers-page.service\";\nimport {DataTableFilterService} from \"../../features/data-table/data-table-filter.service\";\nimport {ListPageComponent} from \"../../shared/list-page-component.class\";\nimport {TabNameService} from \"../../services/tab-name.service\";\n\nimport {invoke, isEmpty, defer, unset, cloneDeep, result} from 'lodash';\nimport moment from 'moment';\nimport {ConfirmComponent} from \"../../features/confirm/confirm.component\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {SettingsService} from \"../../services/settings.service\";\nimport {ConsoleEventsService} from \"../../services/console-events.service\";\nimport {EdgeRouter} from \"../../models/edge-router\";\nimport {EDGE_ROUTER_EXTENSION_SERVICE} from \"../../features/projectable-forms/edge-router/edge-router-form.service\";\nimport {ExtensionService} from \"../../features/extendable/extensions-noop.service\";\n\n@Component({\n    selector: 'lib-edge-routers',\n    templateUrl: './edge-routers-page.component.html',\n    styleUrls: ['./edge-routers-page.component.scss'],\n    standalone: false\n})\nexport class EdgeRoutersPageComponent extends ListPageComponent implements OnInit, OnDestroy {\n\n  title = 'Edge Routers'\n  tabs: { url: string, label: string }[] ;\n  isLoading = false;\n  edgeRouterRoleAttributes: any[] = [];\n  formDataChanged = false;\n\n  constructor(\n      public override svc: EdgeRoutersPageService,\n      filterService: DataTableFilterService,\n      dialogForm: MatDialog,\n      private tabNames: TabNameService,\n      consoleEvents: ConsoleEventsService,\n      @Inject(EDGE_ROUTER_EXTENSION_SERVICE) private extService: ExtensionService,\n  ) {\n    super(filterService, svc, consoleEvents, dialogForm);\n  }\n\n  override ngOnInit() {\n    this.tabs = this.tabNames.getTabs('routers');\n    this.svc.refreshData = this.refreshData;\n    this.getEdgeRouterRoleAttributes();\n    super.ngOnInit();\n  }\n\n  override ngOnDestroy() {\n    this.closeModal();\n    super.ngOnDestroy();\n  }\n\n  headerActionClicked(action: string) {\n    switch(action) {\n      case 'add':\n        this.svc.openEditForm();\n        break;\n      case 'edit':\n        this.svc.openUpdate();\n        break;\n      case 'delete':\n        const selectedItems = this.rowData.filter((row) => {\n          return row.selected;\n        });\n        const label = selectedItems.length > 1 ? 'routers' : 'router';\n        this.openBulkDelete(selectedItems, label);\n        break;\n      default:\n    }\n  }\n\n  closeModal(event?) {\n    this.svc.sideModalOpen = false;\n    if(event?.refresh) {\n      this.refreshData();\n      this.getEdgeRouterRoleAttributes();\n    }\n  }\n\n  dataChanged(event) {\n    this.formDataChanged = event;\n  }\n\n  tableAction(event: any) {\n    this.trackMenuAction(event?.action, event?.item);\n    if (this.extService?.listActions?.length > 0) {\n      let extensionFound = false;\n      this.extService?.listActions?.forEach((extAction) => {\n        if (extAction?.action === event?.action) {\n          extAction.callback(event.item);\n          extensionFound = true;\n        }\n      });\n      if (extensionFound) {\n        return;\n      }\n    }\n    switch(event?.action) {\n      case 'toggleAll':\n      case 'toggleItem':\n        this.itemToggled(event.item)\n        break;\n      case 'update':\n        this.svc.openEditForm(event?.item?.id);\n        break;\n      case 'create':\n        this.svc.openEditForm();\n        break;\n      case 'delete':\n        this.deleteItem(event.item)\n        break;\n      case 'download-enrollment':\n        this.downloadJWT(event.item)\n        break;\n      case 'download-all':\n        this.downloadAllItems();\n        break;\n      case 'download-selected':\n        this.svc.downloadItems(this.selectedItems);\n        break;\n      case 're-enroll':\n        this.svc.reenroll(event.item).then((result) => {\n          this.refreshData(this.svc.currentSort);\n        });\n        break;\n      default:\n        break;\n    }\n  }\n\n  trackMenuAction(action: string, item: any) {\n    this.extService?.consoleActionTriggered?.emit({\n      action,\n      page: 'edge-router',\n      item,\n      type:'menu-action'\n    });\n  }\n\n  downloadJWT(item: any) {\n    const jwt = this.svc.getJWT(item);\n    this.svc.downloadJWT(jwt, item.name);\n  }\n\n  deleteItem(item: any) {\n    this.openBulkDelete([item], 'router');\n  }\n\n  getEdgeRouterRoleAttributes() {\n    this.svc.getEdgeRouterRoleAttributes().then((result: any) => {\n      this.edgeRouterRoleAttributes = result.data;\n    });\n  }\n\n  canDeactivate() {\n    if (this.formDataChanged && this.svc.sideModalOpen) {\n      return confirm('You have unsaved changes. Do you want to leave this page and discard your changes or stay on this page?');\n    }\n    return true;\n  }\n}\n","<div class=\"ziti-page-container ziti-edge-routers-container\">\n  <lib-list-page-header [title]=\"title\"\n    [tabs]=\"tabs\"\n    [showAdd]=\"!itemsSelected\"\n    [blockCreate]=\"headerBlockCreate\"\n    [blockDelete]=\"headerBlockDelete\"\n  (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n\n  <lib-data-table [tableId]=\"'edge-routers'\"\n    [noItemsReadonly]=\"headerBlockCreate\"\n    [accessDenied]=\"headerBlockRead\"\n    [rowData]=\"rowData\"\n    [isLoading]=\"isLoading\"\n    [columnDefinitions]=\"columnDefs\"\n    (actionRequested)=\"tableAction($event)\"\n    [startCount]=\"startCount\"\n    [endCount]=\"endCount\"\n    [totalCount]=\"totalCount\"\n    [emptyMsg]=\"'No Edge Routers defined, Click the plus to add an Edge Router.'\"\n    [filterApplied]=\"filterApplied\"\n    [menuItems]=\"svc.menuItems\"\n    [headerActions]=\"svc.tableHeaderActions\"\n    [noItemsImage]=\"'No_Routers'\"\n    >\n  </lib-data-table>\n</div>\n@if (isLoading) {\n  <lib-loading-indicator [isLoading]=\"isLoading\"></lib-loading-indicator>\n}\n","import {Injectable, Inject, Component} from \"@angular/core\";\nimport {cloneDeep, isEmpty} from 'lodash';\nimport moment from 'moment';\nimport {DataTableFilterService, FilterObj} from \"../../features/data-table/data-table-filter.service\";\nimport {ListPageServiceClass} from \"../../shared/list-page-service.class\";\nimport {\n    TableColumnDefaultComponent\n} from \"../../features/data-table/column-headers/table-column-default/table-column-default.component\";\nimport {CallbackResults} from \"../../features/list-page-features/list-page-form/list-page-form.component\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../services/settings.service\";\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../services/ziti-data.service\";\nimport {CsvDownloadService} from \"../../services/csv-download.service\";\nimport {EdgeRouter} from \"../../models/edge-router\";\nimport {unset, forEach} from \"lodash\";\nimport {ITooltipAngularComp} from \"ag-grid-angular\";\nimport {ITooltipParams} from \"ag-grid-community\";\nimport {OSTooltipComponent} from \"../../features/data-table/tooltips/os-tooltip.component\";\nimport {GrowlerModel} from \"../../features/messaging/growler.model\";\nimport {GrowlerService} from \"../../features/messaging/growler.service\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {SettingsServiceClass} from \"../../services/settings-service.class\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../features/extendable/extensions-noop.service\";\nimport {ConfirmComponent} from \"../../features/confirm/confirm.component\";\nimport {Router} from \"@angular/router\";\nimport {TableCellNameComponent} from \"../../features/data-table/cells/table-cell-name/table-cell-name.component\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class TransitRoutersPageService extends ListPageServiceClass {\n\n    private paging = this.DEFAULT_PAGING;\n    public modalType = 'edge-router';\n\n    override CSV_COLUMNS = [\n        {label: 'Name', path: 'name'},\n        {label: 'Verified', path: 'isVerified'},\n        {label: 'Online', path: 'isOnline'},\n        {label: 'Created', path: 'createdAt'},\n        {label: 'Token', path: 'enrollmentToken'},\n        {label: 'No Traversal', path: 'noTraversal'},\n        {label: 'Fingerprint', path: 'fingerprint'},\n        {label: 'Disabled', path: 'disabled'},\n        {label: 'Tunneler Enabled', path: 'isTunnelerEnabled'},\n        {label: 'Unverified CertPem', path: 'unverifiedCertPem'},\n        {label: 'Unverified Fingerprint', path: 'unverifiedFingerprint'},\n        {label: 'ID', path: 'id'},\n    ];\n\n    selectedEdgeRouter: any = new EdgeRouter();\n    columnFilters: any = {\n        name: '',\n        os: '',\n        createdAt: '',\n    };\n\n    override menuItems = [\n        {name: 'Edit', action: 'update'},\n        {name: 'Download JWT', action: 'download-enrollment'},\n        {name: 'Reset Enrollment', action: 'reset-enrollment'},\n        {name: 'Re-Enroll', action: 're-enroll'},\n        {name: 'Delete', action: 'delete'},\n    ]\n\n    override tableHeaderActions = [\n        {name: 'Download All', action: 'download-all'},\n        {name: 'Download Selected', action: 'download-selected'},\n    ]\n\n    resourceType = 'transit-routers';\n\n    constructor(\n        @Inject(SETTINGS_SERVICE) settings: SettingsServiceClass,\n        filterService: DataTableFilterService,\n        @Inject(ZITI_DATA_SERVICE) private zitiService: ZitiDataService,\n        override csvDownloadService: CsvDownloadService,\n        private growlerService: GrowlerService,\n        private dialogForm: MatDialog,\n        @Inject(SHAREDZ_EXTENSION) private extService: ExtensionService,\n        protected override router: Router\n    ) {\n        super(settings, filterService, csvDownloadService, extService, router);\n    }\n\n    validate = (formData): Promise<CallbackResults> => {\n        return Promise.resolve({ passed: true});\n    }\n\n    initTableColumns(): any {\n        this.initMenuActions();\n\n        const enrollmentTokenFormatter = (row) => {\n            const token = row?.data?.enrollmentToken;\n            if (token) {\n                if (moment(row?.data?.enrollmentExpiresAt).isBefore()) {\n                    return 'Enrollment Expired';\n                } else {\n                    return token;\n                }\n            } else {\n                return '';\n            }\n        };\n\n        const columnFilters = this.columnFilters;\n\n\n        let tableColumns = [\n            {\n                colId: 'name',\n                field: 'name',\n                headerName: 'Name',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: this.headerComponentParams,\n                cellRenderer: TableCellNameComponent,\n                cellRendererParams: { pathRoot: this.basePath, showRouterIcons: true },\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.openEditForm(data?.data?.id);\n                },\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: true,\n                filter: true,\n                sortColumn: this.sort.bind(this),\n                sortDir: 'asc'\n            },\n            {\n                colId: 'verified',\n                field: 'isVerified',\n                headerName: 'Verified',\n                width: 100,\n                sortable: true,\n                headerComponent: TableColumnDefaultComponent,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n            },\n            {\n                colId: 'online',\n                field: 'isOnline',\n                headerName: 'Online',\n                width: 100,\n                headerComponent: TableColumnDefaultComponent,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n            },\n            {\n                colId: 'createdAt',\n                field: 'createdAt',\n                headerName: 'Created At',\n                headerComponent: TableColumnDefaultComponent,\n                valueFormatter: this.createdAtFormatter,\n                resizable: true,\n                sortable: true,\n                sortColumn: this.sort.bind(this),\n                cellClass: 'nf-cell-vert-align tCol',\n            },\n            {\n                colId: 'enrollmentToken',\n                field: 'enrollmentToken',\n                headerName: 'Token',\n                headerComponent: TableColumnDefaultComponent,\n                valueFormatter: enrollmentTokenFormatter,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n            },\n            {\n                colId: 'jwt',\n                field: 'enrollmentJwt',\n                headerName: 'JWT',\n                headerComponent: TableColumnDefaultComponent,\n                cellRenderer: 'cellTokenComponent',\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n            },\n            this.ID_COLUMN_DEF\n        ];\n\n        if (this.extService.processTableColumns) {\n            tableColumns = this.extService.processTableColumns(tableColumns);\n        }\n\n        return tableColumns;\n    }\n\n    getData(filters?: FilterObj[], sort?: any, page?: any): Promise<any> {\n        // we can customize filters or sorting here before moving on...\n        this.paging.page = page || this.paging.page;\n        return super.getTableData('transit-routers', this.paging, filters, sort)\n            .then((results: any) => {\n                return this.processData(results);\n            });\n    }\n\n    private processData(results: any) {\n        if (!isEmpty(results?.data)) {\n            //pre-process data before rendering\n            results.data = this.addActionsPerRow(results);\n        }\n        return results;\n    }\n\n    private addActionsPerRow(results: any): any[] {\n        return results.data.map((row) => {\n            row.actionList = ['update', 're-enroll', 'delete'];\n            if (this.hasEnrolmentToken(row)) {\n                row.actionList.push('download-enrollment');\n            }\n            this.addListItemExtensionActions(row);\n            return row;\n        });\n    }\n\n    hasEnrolmentToken(item) {\n        return !isEmpty(item?.enrollmentJwt);\n    }\n\n\n    getJWT(identity: any) {\n        return identity.enrollmentJwt;\n    }\n\n    downloadJWT(jwt, name) {\n        const element = document.createElement('a');\n        element.setAttribute('href', 'data:application/ziti-jwt;charset=utf-8,' + encodeURIComponent(jwt));\n        element.setAttribute('download', name+\".jwt\");\n        element.style.display = 'none';\n        document.body.appendChild(element);\n        element.click();\n        document.body.removeChild(element);\n    }\n\n    reenroll(router: any) {\n        const data = {\n            appendId: 'ReenrollRouter',\n            title: 'Re-Enroll Router',\n            message: `<p>If the router is currently connected, it will be disconnected until the enrollment process is completed with the newly generated JWT. <p> Are you sure you want to re-enroll the selected router?`,\n            confirmLabel: 'Yes',\n            cancelLabel: 'Oops, no get me out of here',\n            showCancelLink: true\n        };\n        this.dialogRef = this.dialogForm.open(ConfirmComponent, {\n            data: data,\n            autoFocus: false,\n        });\n        return this.dialogRef.afterClosed().toPromise().then((result) => {\n            if (result?.confirmed) {\n                return this.zitiService.post(`transit-routers/${router.id}/re-enroll`, {}, true).then((result) => {\n                    const growlerData = new GrowlerModel(\n                        'success',\n                        'Success',\n                        `Re-enroll Confirmed`,\n                        `Router re-enroll was sent. A new enrollment token is now available`,\n                    );\n                    this.growlerService.show(growlerData);\n                });\n            } else {\n                return Promise.resolve();\n            }\n        });\n    }\n\n    openUpdate(entity?: any) {\n        //Deprecated: No-Op\n    }\n}\n","import {Component, Inject, OnInit, OnDestroy} from '@angular/core';\n\nimport {TransitRoutersPageService} from \"./transit-routers-page.service\";\nimport {DataTableFilterService} from \"../../features/data-table/data-table-filter.service\";\nimport {ListPageComponent} from \"../../shared/list-page-component.class\";\nimport {TabNameService} from \"../../services/tab-name.service\";\n\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {ConsoleEventsService} from \"../../services/console-events.service\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../features/extendable/extensions-noop.service\";\n\n@Component({\n    selector: 'lib-edge-routers',\n    templateUrl: './transit-routers-page.component.html',\n    styleUrls: ['./transit-routers-page.component.scss'],\n    standalone: false\n})\nexport class TransitRoutersPageComponent extends ListPageComponent implements OnInit, OnDestroy {\n\n  title = 'Transit Routers'\n  tabs: { url: string, label: string }[] ;\n  isLoading = false;\n  edgeRouterRoleAttributes: any[] = [];\n  formDataChanged = false;\n\n  constructor(\n      public override svc: TransitRoutersPageService,\n      filterService: DataTableFilterService,\n      dialogForm: MatDialog,\n      private tabNames: TabNameService,\n      consoleEvents: ConsoleEventsService,\n      @Inject(SHAREDZ_EXTENSION) private extService: ExtensionService,\n  ) {\n    super(filterService, svc, consoleEvents, dialogForm, extService);\n  }\n\n  override ngOnInit() {\n    this.tabs = this.tabNames.getTabs('routers');\n    this.svc.refreshData = this.refreshData;\n    super.ngOnInit();\n  }\n\n  override ngOnDestroy() {\n    this.closeModal();\n    super.ngOnDestroy();\n  }\n\n  headerActionClicked(action: string) {\n    switch(action) {\n      case 'add':\n        this.svc.openEditForm();\n        break;\n      case 'edit':\n        this.svc.openUpdate();\n        break;\n      case 'delete':\n        const selectedItems = this.rowData.filter((row) => {\n          return row.selected;\n        });\n        const label = selectedItems.length > 1 ? 'transit routers' : 'transit router';\n        this.openBulkDelete(selectedItems, label);\n        break;\n      default:\n    }\n  }\n\n  closeModal(event?) {\n    this.svc.sideModalOpen = false;\n    if(event?.refresh) {\n      this.refreshData();\n    }\n  }\n\n  dataChanged(event) {\n    this.formDataChanged = event;\n  }\n\n  tableAction(event: any) {\n    this.trackMenuAction(event?.action, event?.item);\n    if (this.extService?.listActions?.length > 0) {\n      let extensionFound = false;\n      this.extService?.listActions?.forEach((extAction) => {\n        if (extAction?.action === event?.action) {\n          extAction.callback(event.item);\n          extensionFound = true;\n        }\n      });\n      if (extensionFound) {\n        return;\n      }\n    }\n    switch(event?.action) {\n      case 'toggleAll':\n      case 'toggleItem':\n        this.itemToggled(event.item)\n        break;\n      case 'update':\n        this.svc.openEditForm(event?.item?.id);\n        break;\n      case 'create':\n        this.svc.openEditForm();\n        break;\n      case 'delete':\n        this.deleteItem(event.item)\n        break;\n      case 'download-enrollment':\n        this.downloadJWT(event.item)\n        break;\n      case 'download-all':\n        this.downloadAllItems();\n        break;\n      case 'download-selected':\n        this.svc.downloadItems(this.selectedItems);\n        break;\n      case 're-enroll':\n        this.svc.reenroll(event.item).then((result) => {\n          this.refreshData(this.svc.currentSort);\n        });\n        break;\n      default:\n        break;\n    }\n  }\n\n  trackMenuAction(action: string, item: any) {\n    this.extService?.consoleActionTriggered?.emit({\n      action,\n      page: 'transit-router',\n      item,\n      type:'menu-action'\n    });\n  }\n  downloadJWT(item: any) {\n    const jwt = this.svc.getJWT(item);\n    this.svc.downloadJWT(jwt, item.name);\n  }\n\n  deleteItem(item: any) {\n    this.openBulkDelete([item], 'transit router');\n  }\n\n  canDeactivate() {\n    if (this.formDataChanged && this.svc.sideModalOpen) {\n      return confirm('You have unsaved changes. Do you want to leave this page and discard your changes or stay on this page?');\n    }\n    return true;\n  }\n}\n","<div class=\"ziti-page-container ziti-transit-routers-container\">\n  <lib-list-page-header [title]=\"title\"\n    [tabs]=\"tabs\"\n    [showAdd]=\"!itemsSelected\"\n    [blockCreate]=\"headerBlockCreate\"\n    [blockDelete]=\"headerBlockDelete\"\n  (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n\n  <lib-data-table [tableId]=\"'transit-routers'\"\n    [noItemsReadonly]=\"headerBlockCreate\"\n    [accessDenied]=\"headerBlockRead\"\n    [rowData]=\"rowData\"\n    [isLoading]=\"isLoading\"\n    [columnDefinitions]=\"columnDefs\"\n    (actionRequested)=\"tableAction($event)\"\n    [startCount]=\"startCount\"\n    [endCount]=\"endCount\"\n    [totalCount]=\"totalCount\"\n    [emptyMsg]=\"'No Transit Routers defined, Click the plus to add a Transit Router.'\"\n    [filterApplied]=\"filterApplied\"\n    [menuItems]=\"svc.menuItems\"\n    [headerActions]=\"svc.tableHeaderActions\"\n    [noItemsImage]=\"'No_Routers'\"\n    >\n  </lib-data-table>\n</div>\n@if (isLoading) {\n  <lib-loading-indicator [isLoading]=\"isLoading\"></lib-loading-indicator>\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Injectable, Inject, InjectionToken} from \"@angular/core\";\nimport {isEmpty, isString, keys, map, some, defer, cloneDeep, filter, forEach, isNil, isBoolean, set, debounce} from 'lodash';\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../services/ziti-data.service\";\nimport {GrowlerService} from \"../../messaging/growler.service\";\nimport {GrowlerModel} from \"../../messaging/growler.model\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../../services/settings.service\";\nimport {ExtensionService} from \"../../extendable/extensions-noop.service\";\nimport {Service} from \"../../../models/service\";\nimport {SchemaService} from \"../../../services/schema.service\";\nimport {Subscription} from \"rxjs\";\nimport {ConfigEditorComponent} from \"../../config-editor/config-editor.component\";\nimport {ValidationService} from \"../../../services/validation.service\";\nimport {Router} from \"@angular/router\";\n\nexport const SERVICE_EXTENSION_SERVICE = new InjectionToken<any>('SERVICE_EXTENSION_SERVICE');\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class ServiceFormService {\n\n    paging = {\n        filter: \"\",\n        noSearch: true,\n        order: \"asc\",\n        page: 1,\n        searchOn: \"name\",\n        sort: \"name\",\n        total: 100\n    }\n\n    formData: any = {};\n    selectedConfig: any = {};\n    configData: any;\n    selectedConfigId: any = '';\n    configs: any = [];\n    configTypes: any = [];\n    filteredConfigs: any = [];\n    configsLoading = false;\n    showCfgPreviewOption = false;\n    selectedConfigName: any = '';\n    selectedConfigTypeId: any = '';\n    selectedConfigType: any = {};\n    addedConfigs: any = [];\n    addedTerminatorNames: any = [];\n    addedTerminators: any = [];\n    configJsonView = false;\n    hideConfigJSON = false;\n    configErrors: any = {};\n    terminatorErrors: any = {};\n    newConfigName: string = '';\n    terminatorHost: string = '';\n    terminatorPort: string = '';\n    selectedSchema: any = {};\n    items: any = [];\n    routers: any = [];\n    configDataLabel = 'Configuration Form';\n    attachLabel = 'Create and Attach';\n    errors: any = {};\n    selectedRouterId: string = '';\n    selectedRouter: any;\n    selectedBindingId: string = '';\n    terminatorProtocol = 'udp';\n    saveDisabled = false;\n    associatedConfigs: any = [];\n    associatedConfigsMap: any = {};\n    associatedTerminators: any = [];\n    associatedTerminatorNames: any = [];\n    associatedTerminatorsMap: any = {};\n    associatedTerminatorsTotal = 0;\n    associatedTerminatorsFilter = '';\n    associatedServicePolicies: any = [];\n    associatedServicePolicyNames: any = [];\n    associatedServicePoliciesMap: any = {};\n    associatedServicePoliciesTotal = 0;\n    associatedServicePoliciesFilter = '';\n    associatedConfigsLoading = false;\n    associatedServicePoliciesLoading = false;\n    associatedTerminatorsLoading = false;\n\n    headerComponentParams = {\n        filterType: 'TEXTINPUT',\n        enableSorting: true\n    };\n\n    lColorArray = [\n        'white',\n        'white',\n        'white',\n    ]\n\n    bColorArray = [\n        'var(--formBase)',\n        'var(--formGroup)',\n        'var(--formSubGroup)'\n    ]\n\n    subscription: Subscription = new Subscription();\n\n    configEditor: ConfigEditorComponent;\n    getAssociatedServicePoliciesDebounced = debounce(this.getAssociatedServicePolicies.bind(this), 300);\n    getAssociatedTerminatorsDebounced = debounce(this.getAssociatedTerminators.bind(this), 300);\n\n    constructor(\n        @Inject(SETTINGS_SERVICE) public settingsService: SettingsService,\n        @Inject(ZITI_DATA_SERVICE) private zitiService: ZitiDataService,\n        private growlerService: GrowlerService,\n        @Inject(SERVICE_EXTENSION_SERVICE)private extService: ExtensionService,\n        private schemaSvc: SchemaService,\n        private validationService: ValidationService,\n        private router: Router\n    ) {}\n\n    resetFormData() {\n        this.selectedConfigName = '';\n        this.selectedConfigTypeId = '';\n        this.associatedConfigsMap = {};\n        this.configData = {};\n        this.associatedConfigs = [];\n        this.errors = {};\n        this.newConfigName = '';\n    }\n\n    save(formData): Promise<any> {\n        const isUpdate = !isEmpty(formData.id);\n        const data: any = this.getServiceDataModel(formData, isUpdate);\n        let prom;\n        if (isUpdate) {\n            prom = this.zitiService.patch('services', data, formData.id, true);\n        } else {\n            prom = this.zitiService.post('services', data, true);\n        }\n\n        return prom.then(async (result: any) => {\n            const id = isUpdate ? formData.id : (result?.data?.id || result?.id);\n            let svc = await this.zitiService.getSubdata('services', id, '').then((svcData) => {\n                return svcData.data;\n            });\n            return this.extService.formDataSaved(svc).then((formSavedResult: any) => {\n                if (!formSavedResult) {\n                    return svc;\n                }\n                const growlerData = new GrowlerModel(\n                    'success',\n                    'Success',\n                    `Services ${isUpdate ? 'Updated' : 'Created'}`,\n                    `Successfully ${isUpdate ? 'updated' : 'created'} Service: ${formData.name}`,\n                );\n                this.growlerService.show(growlerData);\n                return svc;\n            }).catch((result) => {\n                return false;\n            });\n        }).catch((resp) => {\n            const errorMessage = this.zitiService.getErrorMessage(resp);\n            const growlerData = new GrowlerModel(\n                'error',\n                'Error',\n                `Error ${isUpdate ? 'Updating' : 'Creating'} Service`,\n                errorMessage,\n            );\n            this.growlerService.show(growlerData);\n            throw resp;\n        })\n    }\n\n    getAssociatedServicePolicies(nameFilter?) {\n        const paging = this.zitiService.DEFAULT_PAGING;\n        paging.total = 5;\n        this.associatedServicePoliciesLoading = true;\n        const filters: any[] = [];\n        if (!isEmpty(nameFilter)) {\n            paging.noSearch = false;\n            filters.push({\n                columnId: 'name',\n                value: nameFilter,\n                label: nameFilter,\n                filterName: 'Service Policy Name',\n                type: 'TEXTINPUT',\n                verb: 'icontains'\n            });\n        }\n        this.associatedServicePoliciesFilter = nameFilter;\n        this.zitiService.getSubdata('services', this.formData.id, 'service-policies', paging, undefined, filters).then((result: any) => {\n            this.associatedServicePolicies = result.data;\n            this.associatedServicePoliciesTotal = result.meta?.pagination.totalCount || 0;\n            this.associatedServicePolicyNames = this.associatedServicePolicies.map((policy) => {\n                this.associatedServicePoliciesMap[policy.name] = policy;\n                policy.href = '/service-policies/' + policy.id;\n                return policy.name;\n            });\n            if (this.associatedServicePoliciesTotal > 5) {\n                let roleAttributes = cloneDeep(this.formData.roleAttributes);\n\n                roleAttributes = map(roleAttributes, (attribute) => {\n                    return ('%23' + attribute);\n                });\n                roleAttributes.push('%40' + this.formData.id);\n                let urlParam = '';\n                roleAttributes.forEach((param, index) => {\n                    if (index > 0) {\n                        urlParam += ',';\n                    }\n                    urlParam += param\n                });\n                const searchFilter = {\n                    columnId: 'serviceRoles',\n                    value: roleAttributes,\n                    label: '@' + this.formData.name,\n                    filterName: 'Service Attributes',\n                    type: 'ATTRIBUTE'\n                };\n                localStorage.setItem('search_filters', JSON.stringify([searchFilter]));\n                this.associatedServicePolicies.push({\n                    name: 'view all results ',\n                    href: '/service-policies?serviceRoles=' + urlParam,\n                    linkClass: 'preview-more-results',\n                    //iconClass: 'icon-open',\n                    skipSort: true\n                });\n            }\n        }).finally(() => {\n            this.associatedServicePoliciesLoading = false;\n        });\n    }\n\n    getAssociatedTerminators(nameFilter?) {\n        this.associatedTerminatorsLoading = true;\n        this.associatedTerminatorsFilter = nameFilter;\n        const paging = this.zitiService.DEFAULT_PAGING;\n        paging.total = 5;\n        paging.sort = 'createdAt';\n        const filters: any[] = [];\n        if (!isEmpty(nameFilter)) {\n            paging.noSearch = false;\n            filters.push({\n                columnId: 'service.name',\n                value: nameFilter,\n                label: nameFilter,\n                filterName: 'Service Name',\n                type: 'TEXTINPUT',\n                verb: 'icontains'\n            });\n        }\n        this.zitiService.getSubdata('services', this.formData.id, 'terminators', paging, undefined, filters).then((result: any) => {\n            this.associatedTerminators = result.data;\n            this.associatedTerminatorsTotal = result.meta?.pagination.totalCount || 0;\n            this.associatedTerminatorNames = map(this.associatedTerminators, (terminator) => {\n                this.associatedTerminatorsMap[terminator.id] = terminator.binding + ':      ' + terminator.address;\n                terminator.name = terminator.router.name + ':       ' + terminator.address;\n                terminator.href = '/terminators/' + terminator.id;\n                return terminator.binding + ':      ' + terminator.address;\n            });\n            if (this.associatedTerminatorsTotal > 5) {\n                const searchFilter = {\n                    columnId: 'service',\n                    value: this.formData.id,\n                    label: this.formData.name,\n                    filterName: 'Service',\n                    type: 'TEXTINPUT',\n                    verb: '='\n                };\n                localStorage.setItem('search_filters', JSON.stringify([searchFilter]));\n                this.associatedTerminators.push({\n                    name: 'view all results ',\n                    href: '/terminators?service=' + this.formData.id,\n                    linkClass: 'preview-more-results',\n                    //iconClass: 'icon-open',\n                    skipSort: true\n                });\n            }\n        }).finally(() => {\n            this.associatedTerminatorsLoading = false;\n        });\n    }\n\n    previewConfig(configName, router) {\n        this.showCfgPreviewOption = true;\n        const selectedConfig = this.associatedConfigsMap[configName];\n        router.navigate(['/configs/' + selectedConfig.id]);\n        return;\n    }\n\n    previewPolicy(policyName, router) {\n        this.showCfgPreviewOption = true;\n        const selectedPolicy = this.associatedServicePoliciesMap[policyName];\n        router.navigate(['/service-policies/' + selectedPolicy.id]);\n        return;\n    }\n\n    previewTerminator(policyName, router) {\n        this.showCfgPreviewOption = true;\n        const selectedTerminator = this.associatedTerminatorsMap[policyName];\n        router.navigate(['/terminators/' + selectedTerminator.id]);\n        return;\n    }\n\n    addTerminators(serviceId) {\n        const promises = [];\n        this.addedTerminators.forEach((terminator) => {\n            terminator.service = serviceId\n            promises.push(this.zitiService.post('terminators', terminator));\n        });\n    }\n\n    getServiceDataModel(formData, isUpdate) {\n        const saveModel = new Service();\n        const modelProperties = keys(saveModel);\n        modelProperties.forEach((prop) => {\n            switch(prop) {\n                default:\n                    saveModel[prop] = formData[prop];\n            }\n        });\n        return saveModel;\n    }\n\n    getConfigTypes() {\n        this.zitiService.get('config-types', this.paging, []).then((result: any) => {\n            this.configTypes = result.data;\n        });\n    }\n\n    getConfigs(filters = [], page = 1) {\n        this.configsLoading = true;\n        const paging = cloneDeep(this.paging);\n        if (filters.length > 0) {\n            paging.noSearch = false;\n        }\n        return this.zitiService.get('configs', paging, filters).then((result: any) => {\n            this.configs = result.data;\n            this.configTypeChanged();\n        }).finally(() => {\n            this.configsLoading = false;\n        });\n    }\n\n    getRouters() {\n        this.zitiService.get('edge-routers', this.paging, []).then((result: any) => {\n            this.routers = result.data;\n        });\n    }\n\n    getAssociatedConfigs(nameFilter?) {\n        this.associatedConfigsLoading = true;\n        this.zitiService.getSubdata('services', this.formData.id, 'configs').then((result: any) => {\n            this.associatedConfigs = result.data;\n            this.associatedConfigsMap = {};\n            this.addedConfigs = this.associatedConfigs.map((cfg) => {\n                this.associatedConfigsMap[cfg.name] = cfg;\n                cfg.href = '/configs/' + cfg.id;\n                return cfg;\n            });\n        }).finally(() => {\n            this.associatedConfigsLoading = false;\n        });\n    }\n\n    createConfig(configData) {\n        return this.zitiService.post('configs', configData, true).then((result) => {\n            return result;\n        }).catch((response) => {\n            let msg;\n            if (isString(response?.error)) {\n                msg = response?.error;\n            } else {\n                msg = response?.error?.error?.cause?.reason;\n            }\n            const growlerData = new GrowlerModel(\n                'error',\n                'Error',\n                `Error Creating New Config`,\n                msg,\n            );\n            this.growlerService.show(growlerData);\n        });\n    }\n\n    configTypeChanged(resetData?) {\n        this.filteredConfigs = this.configs.filter((config) => {\n            return config.configTypeId === this.selectedConfigTypeId;\n        });\n        const defaultOptions = [\n            {\n                name: 'Add a New Config',\n                id: 'add-new'\n            }\n        ];\n        this.filteredConfigs = [...defaultOptions, ...this.filteredConfigs];\n        this.configTypes.forEach((configType) => {\n            if (this.selectedConfigTypeId === configType.id) {\n                this.selectedConfigType = configType;\n            }\n        });\n        if (this.selectedConfigId !== 'preview') {\n            this.selectedConfigId = !isEmpty(this.selectedConfigTypeId) ? 'add-new' : '';\n        }\n        this.configChanged(resetData);\n    }\n\n    updatedAddedConfigs() {\n        this.addedConfigs = [];\n        this.configs.forEach((availableConfig) => {\n            const cfgExists = some(this.formData.configs, configId => {\n                return availableConfig.id == configId;\n            });\n            if (cfgExists) {\n                availableConfig.href = '/configs/' + availableConfig.id;\n                this.addedConfigs.push(availableConfig);\n                this.addedConfigs = [...this.addedConfigs];\n            }\n        })\n    }\n\n    toggleJSONView() {\n        this.configJsonView = !this.configJsonView;\n        this.configDataLabel = this.configJsonView ? 'JSON Configuration' : 'Configuration Form';\n        if (this.configJsonView) {\n            //this.configSubscriptions.unsubscribe();\n        }\n    }\n\n    async attachConfig(addedConfigId) {\n        let configId;\n        if (this.selectedConfigId === 'add-new') {\n            if (!this.validateConfig()) {\n                return;\n            }\n            const newConfig: any = {\n                configTypeId: this.selectedConfigTypeId,\n                data: this.configData,\n                name: this.newConfigName\n            }\n            newConfig.data = this.validationService.redefineObject(newConfig.data);\n            configId = await this.createConfig(newConfig)\n                .then((result) => {\n                    const cfg = result?.data;\n                    newConfig.id = result?.id ? result.id : result?.data?.id;\n                    newConfig.href = '/configs/' + newConfig.id;\n                    this.associatedConfigsMap[newConfig.name] = {data: newConfig.data, name: newConfig.name, configTypeId: newConfig.configTypeId};\n                    return newConfig.id;\n                })\n                .catch((result) => {\n                    const errorField = result?.error?.error?.cause?.field;\n                    if (!isEmpty(errorField)) {\n                        this.configErrors[errorField] = true;\n                    }\n                    const errorMessage = result?.error?.error?.cause?.reason;\n                    const growlerData = new GrowlerModel(\n                        'error',\n                        'Error',\n                        `Error Creating Config`,\n                        errorMessage,\n                    );\n                    this.growlerService.show(growlerData);\n                    return undefined;\n                });\n            if (!isEmpty(configId)) {\n                this.saveDisabled = false;\n                this.formData.configs.push(configId);\n                this.addedConfigs.push(newConfig);\n                this.addedConfigs = [...this.addedConfigs];\n                this.getConfigs();\n                const growlerData = new GrowlerModel(\n                    'success',\n                    'Success',\n                    `New Config Attached`,\n                    `New Config ${this.newConfigName} has been created and attached to the service`,\n                );\n                this.growlerService.show(growlerData);\n                this.newConfigName = '';\n                this.selectedConfigTypeId = '';\n                this.selectedConfigId = '';\n                this.configData = {};\n                this.configEditor?.getConfigDataFromForm();\n                return;\n            }\n        } else {\n            let configAdded = false;\n            this.formData.configs.forEach((configId) => {\n                if (configId === addedConfigId) {\n                    configAdded = true;\n                }\n            });\n            if (!configAdded) {\n                let newConfig;\n                this.configs.forEach((config) => {\n                    if (config.id === addedConfigId) {\n                        newConfig = config;\n                    }\n                });\n                if (newConfig) {\n                    newConfig.href = '/configs/' + newConfig.id;\n                    this.addedConfigs.push(newConfig);\n                    this.addedConfigs = [...this.addedConfigs];\n                }\n                this.formData.configs.push(addedConfigId);\n                this.selectedConfigTypeId = '';\n                this.selectedConfigId = '';\n                this.saveDisabled = false;\n            } else {\n                const growlerData = new GrowlerModel(\n                    'warning',\n                    'Info',\n                    `Config Already Attached`,\n                    'Config has already been attached to this service',\n                );\n                this.growlerService.show(growlerData);\n            }\n        }\n    }\n\n    removeConfig(configToRemove) {\n        if (configToRemove.id) {\n            const newConfigs = filter(this.formData.configs, configId => {\n                return configId !== configToRemove.id;\n            });\n            const newConfigItems = filter(this.addedConfigs, (config) => {\n                return config.name !== configToRemove.name;\n            });\n            this.formData.configs = newConfigs;\n            this.addedConfigs = newConfigItems;\n            if (this.selectedConfigId === 'preview' && configToRemove.name === this.selectedConfigName) {\n                this.selectedConfigId = '';\n                this.selectedConfigTypeId = '';\n            }\n        }\n    }\n\n    async configChanged(resetData = true) {\n        let selectedConfig: any = {};\n        this.configData = resetData ? undefined : this.configData;\n        let data;\n        let attachLabel = 'Attach to Service';\n        if (this.selectedConfigId === 'preview') {\n            this.selectedSchema = await this.zitiService.schema(this.selectedConfigType.schema);\n        } else if (this.selectedConfigId === 'add-new') {\n            data = {};\n            this.selectedSchema = await this.zitiService.schema(this.selectedConfigType.schema);\n            attachLabel = 'Create and Attach';\n            //this.createForm(dynamicForm);\n            this.saveDisabled = true;\n        } else if (this.selectedConfigId) {\n            attachLabel = 'Attach to Service';\n            this.filteredConfigs.forEach((config) => {\n                if (this.selectedConfigId === config.id) {\n                    selectedConfig = config;\n                }\n            });\n            data = selectedConfig?.data || {};\n            this.saveDisabled = true;\n        } else {\n            this.saveDisabled = false;\n        }\n        if (this.selectedConfigId !== 'preview') {\n            if (!this.configData) {\n                this.configData = data;\n            } else {\n                defer(() => {\n                    this.configData = cloneDeep(data);\n                });\n            }\n        }\n        //this.updateConfigData();\n        this.attachLabel = attachLabel;\n    }\n\n    validate() {\n        this.errors = {};\n        if (isEmpty(this.formData.name)) {\n            this.errors['name'] = true;\n        }\n        return isEmpty(this.errors);\n    }\n\n    validateConfig() {\n        this.configErrors = {};\n        this.configEditor?.validateConfig(this.selectedConfigType?.schema, true);\n        if (isEmpty(this.newConfigName)) {\n            this.configErrors['name'] = true;\n        }\n        return isEmpty(this.configErrors);\n    }\n\n    get showServicePoliciesFilter() {\n        return !isEmpty(this.associatedServicePoliciesFilter) || this.associatedServicePoliciesTotal > 5;\n    }\n\n    get showTerminatorsFilter() {\n        return !isEmpty(this.associatedTerminatorsFilter) || this.associatedTerminatorsTotal > 5;\n    }\n\n    _apiData = {};\n    set apiData(data) {\n        this._apiData = data;\n    }\n\n    get apiData() {\n        const data: any = {\n            name: this.formData?.name || '',\n            roleAttributes: this.formData?.roleAttributes || [],\n            configs: this.formData?.configs || [],\n            encryptionRequired: this.formData?.encryptionRequired,\n            terminatorStrategy: this.formData?.terminatorStrategy || '',\n            maxIdleTimeMillis: this.formData?.maxIdleTimeMillis || 0,\n            tags: this.formData?.tags || {}\n        }\n        return data;\n    }\n\n    openTerminatorEditForm(id) {\n        this.router.navigate(['terminator/' + id])\n    }\n\n    sort(sortBy, ordering= 'asc') {\n        const terminatorSort = {sortBy, ordering};\n        this.getAssociatedTerminators();\n    }\n\n    hasSelectedText() {\n        let text = '';\n        if (window.getSelection) {\n            text = window.getSelection().toString();\n        }\n        return text?.length > 0;\n    }\n}\n","export class ServicePolicy {\n    name = '';\n    serviceRoles: any[] = [];\n    identityRoles: any[] = [];\n    postureCheckRoles: any[] = [];\n    semantic = 'AnyOf';\n    type = 'Bind';\n    tags: any = {};\n};","import {Injectable, Inject, InjectionToken} from \"@angular/core\";\nimport {isEmpty, unset, keys} from 'lodash';\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../services/ziti-data.service\";\nimport {GrowlerService} from \"../../messaging/growler.service\";\nimport {GrowlerModel} from \"../../messaging/growler.model\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../../services/settings.service\";\nimport {ExtensionService} from \"../../extendable/extensions-noop.service\";\n\nimport {sortBy, sortedUniq} from 'lodash';\n\nimport {ServicePolicy} from \"../../../models/service-policy\";\n\nexport const SERVICE_POLICY_EXTENSION_SERVICE = new InjectionToken<any>('SERVICE_POLICY_EXTENSION_SERVICE');\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class ServicePolicyFormService {\n\n    associatedIdentities: any = [];\n    associatedIdentityNames: any = [];\n    associatedPostureChecks: any = [];\n    associatedPostureCheckNames: any = [];\n    associatedServices: any = [];\n    associatedServiceNames: any = [];\n\n    serviceNamedAttributesMap: any = {};\n    identityNamedAttributesMap: any = {};\n    postureNamedAttributesMap: any = {};\n\n    identityNamedAttributes: any = [];\n    serviceNamedAttributes: any = [];\n    postureNamedAttributes: any = [];\n\n    serviceRoleAttributes: any = [];\n    identityRoleAttributes: any = [];\n    postureRoleAttributes: any = [];\n\n    constructor(\n        @Inject(SETTINGS_SERVICE) public settingsService: SettingsService,\n        @Inject(ZITI_DATA_SERVICE) private zitiService: ZitiDataService,\n        private growlerService: GrowlerService,\n        @Inject(SERVICE_POLICY_EXTENSION_SERVICE)private extService: ExtensionService\n    ) {}\n\n    save(formData): Promise<any> {\n        const isUpdate = !isEmpty(formData.id);\n        const data: any = this.getServicePolicyDataModel(formData, isUpdate);\n        const svc = isUpdate ? this.zitiService.patch.bind(this.zitiService) : this.zitiService.post.bind(this.zitiService);\n        return svc('service-policies', data, formData.id).then(async (result: any) => {\n            const id = result?.data?.id || formData.id;\n            let router = await this.zitiService.getSubdata('service-policies', id, '').then((routerData) => {\n                return routerData.data;\n            });\n            return this.extService.formDataSaved(router).then((formSavedResult: any) => {\n                const returnVal = {\n                    data: router,\n                    close: this.extService.closeAfterSave\n                };\n                const growlerData = new GrowlerModel(\n                    'success',\n                    'Success',\n                    `Service Policy ${isUpdate ? 'Updated' : 'Created'}`,\n                    `Successfully ${isUpdate ? 'updated' : 'created'} Service Policy: ${formData.name}`,\n                );\n                this.growlerService.show(growlerData);\n                return returnVal;\n            }).catch((result) => {\n                return false;\n            });\n        }).catch((resp) => {\n            const errorMessage = this.zitiService.getErrorMessage(resp);\n            const growlerData = new GrowlerModel(\n                'error',\n                'Error',\n                `Error ${isUpdate ? 'Updating' : 'Creating'} Service Policy`,\n                errorMessage,\n            );\n            this.growlerService.show(growlerData);\n            throw resp;\n        })\n    }\n\n    getAssociatedServicesByRole(id) {\n        this.zitiService.getSubdata('service-policies', id, 'services',this.zitiService.DEFAULT_PAGING).then((result: any) => {\n            this.associatedServices = result.data;\n            this.associatedServiceNames = this.associatedServices.map((svc) => {\n                return svc.name;\n            });\n        });\n    }\n\n    getAssociatedIdentitiesById(id) {\n        return this.zitiService.getSubdata('service-policies', id, 'identities',this.zitiService.DEFAULT_PAGING).then((result: any) => {\n            this.associatedIdentities = result.data;\n            this.associatedIdentityNames = this.associatedIdentities.map((ident) => {\n                return ident.name;\n            });\n        });\n    }\n\n    getAssociatedPostureChecksById(id) {\n        this.zitiService.getSubdata('service-policies', id, 'posture-checks').then((result: any) => {\n            this.associatedPostureChecks = result.data;\n            this.associatedPostureCheckNames = this.associatedPostureChecks.map((postureCheck) => {\n                return postureCheck.name;\n            });\n        });\n    }\n\n    getAssociatedServicesByAttribute(roleAttributes, namedAttributes, semantic = 'AnyOf') {\n        this.associatedServiceNames = [];\n        if (isEmpty(roleAttributes)) {\n            this.associatedServiceNames = [...namedAttributes];\n            return Promise.resolve([]);\n        }\n        const filters = this.zitiService.getRoleFilter(roleAttributes, semantic);\n        const paging = this.zitiService.DEFAULT_PAGING;\n        paging.noSearch = false;\n        return this.zitiService.get('services', paging, filters).then((result: any) => {\n            this.associatedServices = result.data;\n            this.associatedServiceNames = this.associatedServices.map((svc) => {\n                return svc.name;\n            });\n            this.associatedServiceNames = [...this.associatedServiceNames, ...namedAttributes];\n            this.associatedServiceNames = sortBy(this.associatedServiceNames);\n            this.associatedServiceNames = sortedUniq(this.associatedServiceNames);\n            this.associatedServiceNames = this.associatedServiceNames.filter(item => item !== undefined);\n            return this.associatedServices;\n        });\n    }\n\n    getAssociatedIdentitiesByAttribute(roleAttributes, namedAttributes, semantic = 'AnyOf') {\n        this.associatedIdentityNames = [];\n        if (isEmpty(roleAttributes)) {\n            this.associatedIdentityNames = [...namedAttributes];\n            return;\n        }\n        const filters = this.zitiService.getRoleFilter(roleAttributes, semantic);\n        const paging = this.zitiService.DEFAULT_PAGING;\n        paging.noSearch = false;\n        this.zitiService.get('identities', paging, filters).then((result: any) => {\n            this.associatedIdentities = result.data;\n            this.associatedIdentityNames = this.associatedIdentities.map((svc) => {\n                return svc.name;\n            });\n            this.associatedIdentityNames = [...this.associatedIdentityNames, ...namedAttributes];\n            this.associatedIdentityNames = sortBy(this.associatedIdentityNames);\n            this.associatedIdentityNames = sortedUniq(this.associatedIdentityNames);\n            this.associatedIdentityNames = this.associatedIdentityNames.filter(item => item !== undefined);\n        });\n    }\n\n    getAssociatedPostureChecksByAttribute(roleAttributes, namedAttributes, semantic = 'AnyOf') {\n        this.associatedPostureCheckNames = [];\n        if (isEmpty(roleAttributes)) {\n            this.associatedPostureCheckNames = [...namedAttributes];\n            return;\n        }\n        const filters = this.zitiService.getRoleFilter(roleAttributes, semantic);\n        const paging = this.zitiService.DEFAULT_PAGING;\n        paging.noSearch = false;\n        this.zitiService.get('posture-checks', paging, filters).then((result: any) => {\n            this.associatedPostureChecks = result.data;\n            this.associatedPostureCheckNames = this.associatedPostureChecks.map((postureCheck) => {\n                return postureCheck.name;\n            });\n            this.associatedPostureCheckNames = [...this.associatedPostureCheckNames, ...namedAttributes];\n            this.associatedPostureCheckNames = sortedUniq(this.associatedPostureCheckNames);\n        });\n    }\n\n    getServicePolicyDataModel(formData, isUpdate) {\n        const saveModel = new ServicePolicy();\n        const modelProperties = keys(saveModel);\n        modelProperties.forEach((prop) => {\n            switch(prop) {\n                default:\n                    saveModel[prop] = formData[prop];\n            }\n        });\n        return saveModel;\n    }\n\n    copyToClipboard(val) {\n        navigator.clipboard.writeText(val);\n        const growlerData = new GrowlerModel(\n            'success',\n            'Success',\n            `Text Copied`,\n            `API call URL copied to clipboard`,\n        );\n        this.growlerService.show(growlerData);\n    }\n\n    getSelectedRoles(roleAttributes, namedAttributes, namedAttributeMap) {\n        const prependedRoleAttributes = roleAttributes.map((attr) => {\n            return '#' + attr;\n        })\n        const prependedNamedAttributes = namedAttributes.map((attr) => {\n            return '@' + namedAttributeMap[attr];\n        })\n        return [...prependedRoleAttributes, ...prependedNamedAttributes];\n    }\n\n    public getServiceRoleAttributes() {\n        return this.zitiService.get('service-role-attributes', {}, []).then((result) => {\n            this.serviceRoleAttributes = result.data;\n            return result;\n        });\n    }\n\n    private identityNamedAttributesRequestId = 0;\n\n    public getIdentityNamedAttributes(filter?: string) {\n        const requestId = ++this.identityNamedAttributesRequestId;\n        const paging = {searchOn: 'name', filter: filter || '', total: 100, page: 1, sort: 'name', order: 'asc'};\n        const filters = [];\n        if (!isEmpty(filter)) {\n            filters.push({filterName: 'name', columnId: 'name', value: filter || '%', label: '', type: 'TEXTINPUT'});\n        }\n        return this.zitiService.get('identities', paging, filters).then((result) => {\n            if (requestId !== this.identityNamedAttributesRequestId) {\n                return this.identityNamedAttributes;\n            }\n            const namedAttributes = result.data.map((identity) => {\n                this.identityNamedAttributesMap[identity.name] = identity.id;\n                return identity.name;\n            });\n            this.identityNamedAttributes = namedAttributes;\n            return namedAttributes;\n        });\n    }\n\n    private serviceNamedAttributesRequestId = 0;\n\n    public getServiceNamedAttributes(filter?: string) {\n        const requestId = ++this.serviceNamedAttributesRequestId;\n        const paging = {searchOn: 'name', filter: filter || '', total: 100, page: 1, sort: 'name', order: 'asc'};\n        const filters = [];\n        if (!isEmpty(filter)) {\n            filters.push({filterName: 'name', columnId: 'name', value: filter || '%', label: '', type: 'TEXTINPUT'});\n        }\n        return this.zitiService.get('services', paging, filters).then((result) => {\n            if (requestId !== this.serviceNamedAttributesRequestId) {\n                return this.serviceNamedAttributes;\n            }\n            const namedAttributes = result.data.map((service) => {\n                this.serviceNamedAttributesMap[service.name] = service.id;\n                return service.name;\n            });\n            this.serviceNamedAttributes = namedAttributes;\n            return namedAttributes;\n        });\n    }\n\n    public getIdentityRoleAttributes() {\n        return this.zitiService.get('identity-role-attributes', {}, []).then((result) => {\n            this.identityRoleAttributes = result.data;\n            return result;\n        });\n    }\n\n    private postureNamedAttributesRequestId = 0;\n\n    public getPostureNamedAttributes(filter?: string) {\n        const requestId = ++this.postureNamedAttributesRequestId;\n        const paging = {searchOn: 'name', filter: filter || '', total: 100, page: 1, sort: 'name', order: 'asc'};\n        const filters = [];\n        if (!isEmpty(filter)) {\n            filters.push({filterName: 'name', columnId: 'name', value: filter || '%', label: '', type: 'TEXTINPUT'});\n        }\n        return this.zitiService.get('posture-checks', paging, filters).then((result) => {\n            if (requestId !== this.postureNamedAttributesRequestId) {\n                return this.postureNamedAttributes;\n            }\n            const namedAttributes = result.data.map((postureCheck) => {\n                this.postureNamedAttributesMap[postureCheck.name] = postureCheck.id;\n                return postureCheck.name;\n            });\n            this.postureNamedAttributes = namedAttributes;\n            return namedAttributes;\n        });\n    }\n\n    /**\n     * The policy response includes serviceRolesDisplay/identityRolesDisplay/postureCheckRolesDisplay\n     * alongside the raw #role/@id arrays, resolving every referenced name for free (no extra\n     * request) even when that entity falls outside the paged named-attribute fetch above.\n     */\n    public mergeRolesDisplayIntoMaps(formData: any): void {\n        this.mergeDisplayIntoMap(formData?.serviceRolesDisplay, this.serviceNamedAttributesMap);\n        this.mergeDisplayIntoMap(formData?.identityRolesDisplay, this.identityNamedAttributesMap);\n        this.mergeDisplayIntoMap(formData?.postureCheckRolesDisplay, this.postureNamedAttributesMap);\n    }\n\n    private mergeDisplayIntoMap(displays: any, namedAttributesMap: any): void {\n        if (!Array.isArray(displays)) {\n            return;\n        }\n        displays.forEach((entry: any) => {\n            const role = entry?.role;\n            const id = typeof role === 'string' && role.charAt(0) === '@' ? role.slice(1) : undefined;\n            if (!id) {\n                return;\n            }\n            let displayName = entry?.name;\n            if (!displayName || typeof displayName !== 'string') {\n                return;\n            }\n            if (displayName.charAt(0) === '@') {\n                displayName = displayName.slice(1);\n            }\n            if (!namedAttributesMap[displayName]) {\n                namedAttributesMap[displayName] = id;\n            }\n        });\n    }\n\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Injectable, Inject} from \"@angular/core\";\nimport {cloneDeep, isEmpty} from 'lodash';\nimport moment from 'moment';\nimport {DataTableFilterService, FilterObj} from \"../../features/data-table/data-table-filter.service\";\nimport {ListPageServiceClass} from \"../../shared/list-page-service.class\";\nimport {\n    TableColumnDefaultComponent\n} from \"../../features/data-table/column-headers/table-column-default/table-column-default.component\";\nimport {CallbackResults} from \"../../features/list-page-features/list-page-form/list-page-form.component\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../services/settings.service\";\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../services/ziti-data.service\";\nimport {CsvDownloadService} from \"../../services/csv-download.service\";\nimport {Service} from \"../../models/service\";\nimport {unset} from \"lodash\";\nimport {GrowlerModel} from \"../../features/messaging/growler.model\";\nimport {GrowlerService} from \"../../features/messaging/growler.service\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {SettingsServiceClass} from \"../../services/settings-service.class\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../features/extendable/extensions-noop.service\";\nimport {Router} from \"@angular/router\";\nimport {TableCellNameComponent} from \"../../features/data-table/cells/table-cell-name/table-cell-name.component\";\nimport {ServicePolicyFormService} from \"../../features/projectable-forms/service-policy/service-policy-form.service\";\nimport {SERVICE_EXTENSION_SERVICE} from \"../../features/projectable-forms/service/service-form.service\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class ServicesPageService extends ListPageServiceClass {\n\n    private paging = this.DEFAULT_PAGING;\n    public modalType = 'service';\n\n    override CSV_COLUMNS = [\n        {label: 'Name', path: 'name'},\n        {label: 'ID', path: 'id'},\n        {label: 'Encryption Required', path: 'encryptionRequired'},\n        {label: 'Terminator Strategy', path: 'terminatorStrategy'},\n        {label: 'Created At', path: 'createdAt'},\n    ]\n\n    serviceType = '';\n    selectedService: any = new Service();\n    columnFilters: any = {\n        name: '',\n        os: '',\n        createdAt: '',\n    };\n    roleAttributes: any[] = [];\n    selectedRoleAttributes: any[] = [];\n    override menuItems = [\n        {name: 'Edit', action: 'update'},\n        {name: 'Delete', action: 'delete'},\n    ]\n\n    override tableHeaderActions = [\n        {name: 'Download All', action: 'download-all'},\n        {name: 'Download Selected', action: 'download-selected'},\n    ]\n\n    resourceType = 'services';\n    override basePath = '/services/advanced';\n\n    constructor(\n        @Inject(SETTINGS_SERVICE) settings: SettingsServiceClass,\n        filterService: DataTableFilterService,\n        @Inject(ZITI_DATA_SERVICE) private zitiService: ZitiDataService,\n        override csvDownloadService: CsvDownloadService,\n        private growlerService: GrowlerService,\n        private dialogForm: MatDialog,\n        @Inject(SERVICE_EXTENSION_SERVICE) protected override extensionService: ExtensionService,\n        protected override router: Router,\n        private servicePolicyService: ServicePolicyFormService\n    ) {\n        super(settings, filterService, csvDownloadService, extensionService, router);\n    }\n\n    validate = (formData): Promise<CallbackResults> => {\n        return Promise.resolve({ passed: true});\n    }\n\n    initTableColumns(): any {\n        const rolesRenderer = (row) => {\n            let roles = '';\n            row?.data?.roleAttributes?.forEach((attr) => {\n                roles += '<div class=\"hashtag\">'+attr+'</div>';\n            });\n            return roles;\n        }\n        const self = this;\n        const serviceRolesHeaderComponentParams = {\n            filterType: 'ATTRIBUTE',\n            enableSorting: true,\n            appendAttributeHash: false,\n            getRoleAttributes: () => {\n                return self.roleAttributes;\n            },\n            getNamedAttributes: () => {\n                return [];\n            },\n            getSelectedRoleAttributes: () => {\n                return self.selectedRoleAttributes;\n            },\n            getSelectedNamedAttributes: () => {\n                return [];\n            },\n            setSelectedRoleAttributes: (attributes) => {\n                self.selectedRoleAttributes = attributes;\n            },\n            setSelectedNamedAttributes: (attributes) => {\n                // no-op\n            },\n            getNamedAttributesMap: () => {\n                return {};\n            }\n        };\n        return [\n            {\n                colId: 'name',\n                field: 'name',\n                headerName: 'Name',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: this.headerComponentParams,\n                cellRenderer: TableCellNameComponent,\n                cellRendererParams: { pathRoot: '/services/advanced' },\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.serviceType = 'advanced';\n                    this.openAdvanced(data.data.id);\n                },\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: true,\n                filter: true,\n                sortColumn: this.sort.bind(this),\n                sortDir: 'asc',\n                width: 300,\n            },\n            {\n                colId: 'roleAttributes',\n                field: 'roleAttributes',\n                headerName: 'Roles',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: serviceRolesHeaderComponentParams,\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.serviceType = '';\n                    this.openAdvanced(data.data.id);\n                },\n                resizable: true,\n                cellRenderer: this.rolesRenderer,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: false,\n                filter: false,\n            },\n            {\n                colId: 'createdAt',\n                field: 'createdAt',\n                headerName: 'Created At',\n                headerComponent: TableColumnDefaultComponent,\n                valueFormatter: this.createdAtFormatter,\n                resizable: true,\n                sortable: true,\n                sortColumn: this.sort.bind(this),\n                cellClass: 'nf-cell-vert-align tCol',\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.serviceType = '';\n                    this.openAdvanced(data.data.id);\n                },\n            },\n            this.ID_COLUMN_DEF\n        ];\n    }\n\n    getData(filters?: FilterObj[], sort?: any, page?: any): Promise<any> {\n        // we can customize filters or sorting here before moving on...\n        this.paging.page = page || this.paging.page;\n        return super.getTableData('services', this.paging, filters, sort)\n            .then((results: any) => {\n                return this.processData(results);\n            });\n    }\n\n    private processData(results: any) {\n        if (!isEmpty(results?.data)) {\n            //pre-process data before rendering\n            results.data = this.addActionsPerRow(results);\n        }\n        if (!isEmpty(results?.meta?.pagination)) {\n            this.totalCount = results.meta?.pagination.totalCount;\n        }\n        return results;\n    }\n\n    private addActionsPerRow(results: any): any[] {\n        return results.data.map((row) => {\n            row.actionList = ['update', 'delete'];\n            return row;\n        });\n    }\n\n    public getServiceRoleAttributes() {\n        return this.zitiService.get('service-role-attributes', {}, []).then((result: any) => {\n            this.roleAttributes = result.data;\n            return result;\n        });\n    }\n\n    public getIdentityNamedAttributes() {\n        return this.zitiService.get('identities', {}, []).then((result) => {\n            const namedAttributes = result.data.map((identity) => {\n                return identity.name;\n            });\n            return namedAttributes;\n        });\n    }\n\n    public getIdentityRoleAttributes() {\n        return this.zitiService.get('identity-role-attributes', {}, []);\n    }\n\n    public openSelection() {\n        this.router.navigateByUrl('/services/select');\n    }\n\n    public openAdvanced(id = '') {\n        this.router.navigateByUrl(`/services/advanced/${id}`);\n    }\n\n    public openUpdate(item?: any) {\n        this.modalType = 'service';\n        if (item) {\n            this.selectedService = item;\n            this.selectedService.badges = [];\n            unset(this.selectedService, '_links');\n        } else {\n            this.selectedService = new Service();\n        }\n        this.sideModalOpen = true;\n    }\n\n    getAllServicesAndOrphans(selectedItems) {\n        const promises = [];\n        const selected = [];\n        const allItem = {\n            name: 'All',\n            id: 'all',\n            associatedConfigs: [],\n            associatedServicePolicies: []\n        };\n\n        selectedItems.forEach((service: any) => {\n            const serviceItem = {\n                name: service.name,\n                id: service.id,\n                associatedConfigs: [],\n                associatedServicePolicies: []\n            }\n            const svcCfgAssociationPromises = [];\n            const allCfgAssociationsPromise = new Promise((resolve, reject) => {\n                this.zitiService.getSubdata('services', service.id, 'configs').then((result) => {\n                    const configs = result.data;\n                    configs.forEach((config) => {\n                        const cfgProm = this.zitiService.getSubdata('configs', config.id, 'services').then((result) => {\n                            const associatedServices = result.data;\n                            const isOrphan = !associatedServices.some((svc) => {\n                                return svc.id !== service.id;\n                            });\n                            if (isOrphan) {\n                                serviceItem.associatedConfigs.push(config);\n                            }\n                        }).catch(() => {\n                            reject();\n                        });\n                        svcCfgAssociationPromises.push(cfgProm);\n                    });\n                    Promise.all(svcCfgAssociationPromises).then(() => {\n                        serviceItem.associatedConfigs = serviceItem.associatedConfigs.map((config) => {\n                            const cfg = {\n                                name: config.name,\n                                id: config.id\n                            }\n                            if (!this.isConfigAdded(cfg, allItem)) {\n                                allItem.associatedConfigs.push(cfg);\n                            }\n                            return cfg;\n                        });\n                        resolve(serviceItem.associatedConfigs);\n                    })\n                }).catch(() => {\n                    reject();\n                });\n            });\n            promises.push(allCfgAssociationsPromise);\n            const svcPolAssociationPromises = [];\n            const allSvcAssociationsPromise = new Promise((resolve, reject) => {\n                this.zitiService.getSubdata('services', service.id, 'service-policies').then((result) => {\n                    const policies = result.data;\n                    policies.forEach((pol) => {\n                        let roleAttributes = pol.serviceRoles.filter((attr) => {\n                            return attr.charAt('0') === '#';\n                        });\n                        roleAttributes = roleAttributes.map((attr) => {\n                            return attr.substring(1);\n                        });\n                        const prom = this.servicePolicyService.getAssociatedServicesByAttribute(roleAttributes, []).then((result) => {\n                            const isOrphan = !result.some((svc) => {\n                                return svc.id !== service.id;\n                            });\n                            if (isOrphan) {\n                                serviceItem.associatedServicePolicies.push(pol);\n                            }\n                        }).catch(() => {\n                            reject();\n                        });\n                        svcPolAssociationPromises.push(prom);\n                    });\n                    Promise.all(svcPolAssociationPromises).then(() => {\n                        serviceItem.associatedServicePolicies = serviceItem.associatedServicePolicies.map((pol) => {\n                            const policy = {\n                                name: pol.name,\n                                id: pol.id\n                            }\n                            if (!this.isServicePolicyAdded(policy, allItem)) {\n                                allItem.associatedServicePolicies.push(policy);\n                            }\n                            return policy;\n                        });\n                        resolve(serviceItem.associatedServicePolicies);\n                    });\n                }).catch(() => {\n                    reject();\n                });\n            });\n            promises.push(allSvcAssociationsPromise);\n            selected.push(serviceItem);\n        });\n        return Promise.all(promises).then(() => {\n            return {selectedItems: selected, allItem: allItem};\n        });\n    }\n\n    isConfigAdded(configToAdd, allItem) {\n        return allItem.associatedConfigs.some((config) => {\n            return config.id === configToAdd.id;\n        });\n    }\n\n    isServicePolicyAdded(policyToAdd, allItem) {\n        return allItem.associatedServicePolicies.some((policy) => {\n            return policy.id === policyToAdd.id;\n        });\n    }\n\n    removeAllServicesAndOrphans(allItems) {\n        const promises = [];\n        allItems.forEach((service) => {\n            const prom = this.dataService.delete('services', service.id);\n            promises.push(prom);\n            service.associatedConfigs.forEach((config) => {\n                const cfgPromise = this.dataService.delete('configs', config.id);\n                promises.push(cfgPromise);\n            });\n            service.associatedServicePolicies.forEach((policy) => {\n                const svcPolPromise = this.dataService.delete('service-policies', policy.id);\n                promises.push(svcPolPromise);\n            });\n        });\n        return Promise.all(promises);\n    }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {isEmpty} from 'lodash';\nimport {Router} from \"@angular/router\";\n\n@Component({\n    selector: 'lib-preview-list',\n    templateUrl: './preview-list.component.html',\n    styleUrls: ['./preview-list.component.scss'],\n    standalone: false\n})\nexport class PreviewListComponent {\n  //@Input() hideOption: string;\n  @Input() public label = '';\n  @Input() public clickable = false;\n  @Input() isLoading = false;\n  @Input() allNames = [];\n  @Input() items = [];\n  @Input() allowRemove = false\n  @Input() tooltip = '';\n  @Input() showfilter = true;\n  @Input() localFilter = true;\n  @Output() itemSelected = new EventEmitter<string>();\n  @Output() itemRemoved = new EventEmitter<string>();\n  @Output() filterChanged = new EventEmitter<string>();\n  public previewItems = [];\n  private hideOption = 'asdf';\n  filterFor = '';\n\n  constructor(private router: Router) {}\n\n  ngOnInit() {\n    this.setPreviewItems();\n  }\n\n  ngOnChanges() {\n    this.setPreviewItems();\n    this.sort();\n  }\n\n  setPreviewItems() {\n    this.previewItems = [];\n    if (!isEmpty(this.allNames)) {\n      this.previewItems.push(...this.allNames);\n      this.previewItems = this.previewItems.filter((item) => item !== this.hideOption);\n    } else {\n      this.previewItems.push(...this.items);\n    }\n    this.sort();\n  }\n\n  onKeydownEvent() {\n    if (!this.localFilter) {\n      this.filterChanged.emit(this.filterFor);\n      return;\n    }\n    this.previewItems = [];\n    for (let i = 0; i < this.allNames.length; i++) {\n      if (!isEmpty(this.allNames)) {\n        if (this.allNames[i].indexOf(this.filterFor) >= 0) {\n          this.previewItems.push(this.allNames[i]);\n        }\n      } else {\n        if (this.items[i].name.indexOf(this.filterFor) >= 0) {\n          this.previewItems.push(this.items[i]);\n        }\n      }\n    }\n    this.sort();\n  }\n\n  sort() {\n    this.previewItems.sort((item1, item2) =>  {\n      if (item1.skipSort) {\n        return item1.name;\n      } else if (item2.skipSort) {\n        return  item2.name;\n      } else if (item1.name) {\n        return item1.name.localeCompare(item2.name)\n      } else {\n        return item1.localeCompare(item2)\n      }\n    });\n  }\n\n  selected(item: string) {\n    if (!this.clickable)  {\n      return;\n    }\n    this.itemSelected.emit(item);\n  }\n\n  remove(item) {\n    this.itemRemoved.emit(item);\n  }\n\n  linkClicked(event, item) {\n    if (!this.clickable) {\n      return;\n    }\n    this.router.navigateByUrl(item.href);\n    event.preventDefault();\n  }\n\n  getHrefVal(href) {\n    let hrefVal = href;\n    if(hrefVal?.indexOf('/') === 0) {\n      hrefVal = hrefVal.slice(1);\n    }\n    return './' + hrefVal;\n  }\n}\n","<div class=\"listBox row\">\n  @if (showfilter) {\n    <input (keyup)=\"onKeydownEvent()\" [(ngModel)]=\"filterFor\" placeholder=\"Type to Filter\"/>\n  }\n  <div class=\"text row\">\n    @if (previewItems.length <= 0) {\n      <div class=\"listText\">\n        <span class=\"preview-name preview-placeholder no-items-preview\">no items to display...</span>\n      </div>\n    }\n    @for (item of previewItems; track item) {\n      <div (click)=\"selected(item)\" [ngClass]=\"{ clickable: clickable }\" class=\"listText\">\n        @if (allowRemove) {\n          <div class=\"icon-clear\" (click)=\"remove(item)\"></div>\n        }\n        @if (!item.href) {\n          <span class=\"preview-name\" matTooltip=\"{{tooltip}}\" matTooltipPosition=\"below\" matTooltipShowDelay=\"1000\">{{ item.name || item }}</span>\n        }\n        @if (item.href) {\n          <a [href]=\"getHrefVal(item.href)\" (click)=\"linkClicked($event, item)\" class=\"{{item.linkClass ? item.linkClass : ''}}\" matTooltip=\"{{tooltip}}\" matTooltipShowDelay=\"1000\" matTooltipPosition=\"below\">\n            @if (item.name) {\n              <span class=\"preview-name\">{{ item.name }}@if (item.iconClass) {\n                <div class=\"preview-item-icon {{item.iconClass}}\" (click)=\"remove(item)\"></div>\n              }</span>\n            }\n          </a>\n        }\n      </div>\n    }\n  </div>\n</div>\n@if (isLoading) {\n  <div class=\"spinner-container\">\n    <span class=\"spinner\"></span>\n  </div>\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, Inject, OnInit} from '@angular/core';\nimport {DialogRef} from \"@angular/cdk/dialog\";\nimport {MAT_DIALOG_DATA, MatDialogRef} from \"@angular/material/dialog\";\n\nimport {isEmpty, isNil} from \"lodash\";\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../services/ziti-data.service\";\nimport {SERVICE_EXTENSION_SERVICE} from \"../projectable-forms/service/service-form.service\";\nimport {ServicesPageService} from \"../../pages/services/services-page.service\";\nimport {GrowlerModel} from \"../messaging/growler.model\";\nimport {GrowlerService} from \"../messaging/growler.service\";\n\n@Component({\n    selector: 'preview-selections',\n    templateUrl: './preview-selections.component.html',\n    styleUrls: ['./preview-selections.component.scss'],\n    standalone: false\n})\nexport class PreviewSelectionsComponent implements OnInit {\n\n  allItem = {\n    name: 'All',\n    id: 'all',\n    associatedConfigs: [],\n    associatedServicePolicies: []\n  };\n  dataObj: any = {\n    appendId: '',\n    title: '',\n    subtitle: '',\n    selectedItems: [],\n    deleteConfirmed: false\n  }\n\n  allConfigs = [];\n  allServicePolicies = [];\n\n  allConfigsCount = 0;\n  allServicePoliciesCount = 0;\n\n  selectedItem: any = {\n    associatedConfigs: [],\n    associatedServicePolicies: []\n  };\n  infoMessage = undefined;\n  state = '';\n  isLoading = true;\n\n  selectedItems = [];\n  constructor(\n      private dialogRef: MatDialogRef<PreviewSelectionsComponent>,\n      @Inject(MAT_DIALOG_DATA) public data: any,\n      @Inject(ZITI_DATA_SERVICE) private zitiService: ZitiDataService,\n      private servicePageService: ServicesPageService,\n      private growlerService: GrowlerService,\n  ) {\n    this.dataObj = data;\n  }\n\n  ngOnInit() {\n    this.initSelectedServicesTemp();\n  }\n\n  initSelectedServicesTemp() {\n    this.isLoading = true;\n    this.servicePageService.getAllServicesAndOrphans(this.dataObj.selectedItems).then((result) => {\n      const {selectedItems, allItem} = result;\n      this.selectedItems = selectedItems;\n      this.allItem = allItem;\n      this.previewItem(this.allItem);\n      this.isLoading = false;\n      this.data.itemsToDelete = selectedItems;\n      this.allConfigsCount = allItem.associatedConfigs.length;\n      this.allServicePoliciesCount = allItem.associatedServicePolicies.length;\n    }).catch(() => {\n      const growlerData = new GrowlerModel(\n          'error',\n          'Error',\n          `Failed to get service associations`,\n          `Unable to retrieve orphaned configs and service policies`,\n      );\n      this.growlerService.show(growlerData);\n      this.isLoading = false;\n      this.infoMessage = 'Unable to retrieve orphaned configs and service policies';\n      this.state = 'ERROR';\n    });\n  }\n\n  previewItem(item: any) {\n    this.selectedItems.forEach((selectedItem: any) => {\n      selectedItem.selected = item.name === selectedItem.name;\n    });\n    this.selectedItem = item;\n  }\n\n  confirm() {\n    this.dialogRef.close({confirmed: true});\n  }\n\n  return() {\n    this.dialogRef.close({confirmed: false});\n  }\n\n  cancel() {\n    this.dialogRef.close({confirmed: false});\n  }\n}\n","<div class=\"preview-selections-container confirm-modal-container\" [ngClass]=\"{'error-state': state === 'ERROR', 'loading-state': isLoading}\">\n  <div class=\"close icon-close\" (click)=\"cancel()\"></div>\n  <div class=\"preview-selections-body\">\n    <div class=\"preview-selections-content\">\n      <div class=\"preview-selections-title-container\">\n        <div class=\"confirm-modal-icon\" style=\"background-image: url(&quot;assets/svgs/Confirm_Trash.svg&quot;);\"></div>\n        <span class=\"preview-selections-title\">Orphaned Configs & Service Policies</span>\n        <span class=\"preview-selections-subtitle\">Preview of all associated entities that will be orphaned and deleted once the selected services are deleted</span>\n      </div>\n      @if (infoMessage) {\n        <div class=\"preview-selections-info-message\" [ngClass]=\"{'error-message': state === 'ERROR'}\">{{infoMessage}}</div>\n      }\n      <div class=\"preview-selections-main\">\n        <div class=\"preview-selections-left-side\">\n          <lib-form-field-container\n            [showHeader]=\"true\"\n            [title]=\"'Services To Delete'\"\n            [class]=\"'hide-overflow bold-header-title'\"\n            [count]=\"selectedItems.length\"\n            >\n            <div class=\"selected-items-container\">\n              <div class=\"selected-items\">\n                <div class=\"selected-items-category\">\n                  <ul>\n                    <li class=\"selected-items-item header-item\" (click)=\"previewItem(allItem)\" [ngClass]=\"{'selected': selectedItem.id === 'all'}\">\n                      <span class=\"selected-item-name\">{{allItem.name}}</span>\n                      <div class=\"associated-count-container\">\n                        <div class=\"associated-count-header-group\">\n                          <div\n                            class=\"associated-header-icon icon-configuration\"\n                            matTooltip=\"Configs\"\n                            matTooltipPosition=\"below\"\n                            matTooltipShowDelay=\"500\"\n                          ></div>\n                          <span class=\"associated-configs-count\">{{allItem.associatedConfigs.length}}</span>\n                        </div>\n                        <div class=\"count-divider header-divider\"></div>\n                        <div class=\"associated-count-header-group\">\n                          <div\n                            class=\"associated-header-icon icon-Policies\"\n                            matTooltip=\"Service Policies\"\n                            matTooltipPosition=\"below\"\n                            matTooltipShowDelay=\"500\"\n                          ></div>\n                          <span class=\"associated-policies-count\">{{allItem.associatedServicePolicies.length}}</span>\n                        </div>\n                      </div>\n                    </li>\n                    <div class=\"selected-items-divider\"></div>\n                    @for (item of selectedItems; track item) {\n                      <li class=\"selected-items-item\" (click)=\"previewItem(item)\" [ngClass]=\"{'selected': item.selected}\">\n                        <span class=\"selected-item-name\">{{item.name}}</span>\n                        <div class=\"associated-count-container\">\n                          <div class=\"associated-count-list-group\">\n                            <span class=\"associated-configs-header-count\">{{allItem.associatedConfigs.length}}</span>\n                            <span class=\"associated-configs-count\">{{item.associatedConfigs.length}}</span>\n                          </div>\n                          <div class=\"count-divider\"></div>\n                          <div class=\"associated-count-list-group\">\n                            <span class=\"associated-configs-header-count\">{{allItem.associatedServicePolicies.length}}</span>\n                            <span class=\"associated-policies-count\">{{item.associatedServicePolicies.length}}</span>\n                          </div>\n                        </div>\n                      </li>\n                    }\n                  </ul>\n                </div>\n              </div>\n            </div>\n          </lib-form-field-container>\n        </div>\n        <div class=\"preview-selections-divider\"></div>\n        <div class=\"preview-selections-right-side\">\n          <div class=\"preview-selections-lists-title\">\n            <div class=\"resource-type\"> Selected Service </div>\n            <div class=\"icon-next preview-selections-breadcrumb\"></div>\n            <div class=\"selected-attribute\"> {{selectedItem.name}} </div>\n          </div>\n          <div class=\"preview-selections-lists\">\n            <lib-form-field-container\n              [title]=\"'Orphaned Configs'\"\n              [titleIcon]=\"'icon-configuration'\"\n              [count]=\"selectedItem.associatedConfigs.length\"\n              [class]=\"'hide-overflow'\"\n              [helpText]=\"'List of orphaned Configs that will be deleted.'\"\n              >\n              <lib-preview-list\n                [clickable]=\"false\"\n                [items]=\"selectedItem.associatedConfigs\"\n                [allowRemove]=\"false\"\n              ></lib-preview-list>\n            </lib-form-field-container>\n            <lib-form-field-container\n              [title]=\"'Orphaned Service Policies'\"\n              [titleIcon]=\"'icon-Policies'\"\n              [count]=\"selectedItem.associatedServicePolicies.length\"\n              [class]=\"'hide-overflow'\"\n              [helpText]=\"'List of all orphaned Service Policies that will be deleted.'\"\n              >\n              <lib-preview-list\n                [clickable]=\"false\"\n                [items]=\"selectedItem.associatedServicePolicies\"\n                [allowRemove]=\"false\"\n              ></lib-preview-list>\n            </lib-form-field-container>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  <div class=\"preview-selections-buttons-container\">\n    <button class=\"button save secondary-button\" (click)=\"return()\">Return</button>\n    @if (dataObj.deleteConfirmed && state !== 'ERROR') {\n      <button class=\"button save confirm\" (click)=\"confirm()\" [disabled]=\"isLoading\">Delete All</button>\n    }\n  </div>\n</div>\n\n@if (isLoading) {\n  <lib-loading-indicator [isLoading]=\"isLoading\"></lib-loading-indicator>\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, Inject, OnInit, OnDestroy} from '@angular/core';\nimport {ServicesPageService} from \"../services/services-page.service\";\nimport {DataTableFilterService} from \"../../features/data-table/data-table-filter.service\";\nimport {TabNameService} from \"../../services/tab-name.service\";\nimport {ConsoleEventsService} from \"../../services/console-events.service\";\nimport {ListPageComponent} from \"../../shared/list-page-component.class\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {ConfirmComponent} from \"../../features/confirm/confirm.component\";\nimport {PreviewSelectionsComponent} from \"../../features/preview-selections/preview-selections.component\";\nimport {GrowlerModel} from \"../../features/messaging/growler.model\";\nimport {GrowlerService} from \"../../features/messaging/growler.service\";\nimport {ServicePolicyFormService} from \"../../features/projectable-forms/service-policy/service-policy-form.service\";\nimport semver from 'semver';\nimport {SETTINGS_SERVICE, SettingsService} from \"../../services/settings.service\";\nimport {Subscription} from \"rxjs\";\nimport {isEmpty} from \"lodash\";\nimport {IDENTITY_EXTENSION_SERVICE} from \"../../features/projectable-forms/identity/identity-form.service\";\nimport {ExtensionService} from \"../../features/extendable/extensions-noop.service\";\nimport {SERVICE_EXTENSION_SERVICE} from \"../../features/projectable-forms/service/service-form.service\";\n\n@Component({\n    selector: 'lib-services',\n    templateUrl: './services-page.component.html',\n    styleUrls: ['./services-page.component.scss'],\n    standalone: false\n})\nexport class ServicesPageComponent extends ListPageComponent implements OnInit, OnDestroy  {\n\n  serviceType = '';\n  formDataChanged = false;\n  isLoading: boolean;\n  tabs: { url: string; label: string }[];\n  title = 'Services';\n  confirmData: any = {};\n  version: '';\n\n  constructor(\n      public override svc: ServicesPageService,\n      filterService: DataTableFilterService,\n      dialogForm: MatDialog,\n      private tabNames: TabNameService,\n      consoleEvents: ConsoleEventsService,\n      private growlerService: GrowlerService,\n      @Inject(SETTINGS_SERVICE) private settingsService: SettingsService,\n      @Inject(SERVICE_EXTENSION_SERVICE) protected override extensionService: ExtensionService,\n  ) {\n    super(filterService, svc, consoleEvents, dialogForm, extensionService);\n    let userLang = navigator.language || 'en-us';\n    userLang = userLang.toLowerCase();\n  }\n\n  override ngOnInit() {\n    super.ngOnInit();\n    this.tabs = this.tabNames.getTabs('services');\n    this.svc.getServiceRoleAttributes();\n  }\n\n  headerActionClicked(action: string) {\n    switch(action) {\n      case 'add':\n        this.svc.openSelection();\n        break;\n      case 'edit':\n        this.svc.openAdvanced();\n        break;\n      case 'delete':\n        const selectedItems = this.rowData.filter((row) => {\n          return row.selected;\n        });\n        const label = selectedItems.length > 1 ? 'services' : 'service';\n        this.openBulkDelete(selectedItems, label);\n        break;\n      default:\n    }\n  }\n\n  tableAction(event: any) {\n    this.trackMenuAction(event?.action, event?.item);\n    const extensionActionFound = this.handleExtensionActions(event);\n    if (extensionActionFound) {\n      return;\n    }\n    switch(event?.action) {\n      case 'toggleAll':\n      case 'toggleItem':\n        this.itemToggled(event.item);\n        break;\n      case 'update':\n        this.svc.openAdvanced(event.item.id);\n        break;\n      case 'create':\n        this.svc.openSelection();\n        break;\n      case 'delete':\n        this.deleteItem(event.item)\n        break;\n      case 'download-all':\n        this.downloadAllItems();\n        break;\n      case 'download-selected':\n        this.svc.downloadItems(this.selectedItems);\n        break;\n      default:\n        break;\n    }\n  }\n\n  trackMenuAction(action: string, item: any) {\n    this.extensionService?.consoleActionTriggered?.emit({\n      action,\n      page: 'service',\n      item,\n      type:'menu-action'\n    });\n  }\n  deleteItem(item: any) {\n    this.openBulkDelete([item], 'service');\n  }\n\n  dataChanged(event) {\n    this.formDataChanged = event;\n  }\n\n  get showCardList() {\n    return this.svc.sideModalOpen && this.svc.serviceType === '';\n  }\n\n  closeModal(event?) {\n    if (event?.data === 'cards') {\n      this.svc.serviceType = '';\n      return;\n    }\n    this.svc.serviceType = '';\n    this.svc.sideModalOpen = false;\n    if(event?.refresh) {\n      this.refreshData();\n    }\n  }\n\n  serviceTypeSelected(event) {\n    this.svc.serviceType = event;\n  }\n\n  override openBulkDelete(selectedItems: any[], entityTypeLabel = 'item(s)', ) {\n    const selectedIds = selectedItems.map((row) => {\n      return row.id;\n    });\n    const selectedNames = selectedItems.map((item) => {\n      return item.name;\n    });\n    const countLabel = selectedItems.length > 1 ? selectedItems.length : '';\n    this.selectedItems = selectedItems;\n    const showSecondaryConfirm = !isEmpty(this.settingsService?.zitiSemver) && semver.gte(this.settingsService?.zitiSemver, '1.1.8')\n    this.confirmData = {\n      appendId: 'DeleteServices',\n      title: 'Delete Services',\n      message: `Are you sure you would like to delete the following ${countLabel} ${entityTypeLabel}?`,\n      bulletList: selectedNames,\n      showSecondaryConfirm: showSecondaryConfirm,\n      secondaryConfirmLabel: 'Delete all orphaned associated configs and service policies?',\n      secondaryConfirmed: false,\n      secondaryInfoLabel: `Choosing this option will also delete any associated configs and/or service policies that ONLY make reference to these selected services`,\n      confirmLabel: 'Yes',\n      cancelLabel: 'Oops, no get me out of here',\n      secondaryActionLabel: 'Preview Deletions',\n      confirmLabelAlt: 'Delete All',\n      imageUrl: 'assets/svgs/Confirm_Trash.svg',\n      secondaryAction: this.openPreviewSelections.bind(this),\n      showCancelLink: true,\n    };\n    this.dialogRef = this.dialogForm.open(ConfirmComponent, {\n      data: this.confirmData,\n      autoFocus: false,\n    });\n    this.dialogRef.afterClosed().subscribe((result) => {\n      if (result?.confirmed) {\n        if (this.confirmData.secondaryConfirmed) {\n          this.svc.getAllServicesAndOrphans(this.selectedItems).then((result) => {\n            this.svc.removeAllServicesAndOrphans(result.selectedItems).then(() => {\n              const growlerData = new GrowlerModel(\n                  'success',\n                  'Success',\n                  `Services Deleted`,\n                  `Successfully deleted selected services and entities`,\n              );\n              this.growlerService.show(growlerData);\n              this.refreshData(this.svc.currentSort);\n            }).catch(() => {\n              const growlerData = new GrowlerModel(\n                  'error',\n                  'Error',\n                  `Failed to delete services`,\n                  `An error occured when deleting the selected services, configs, and service policies`,\n              );\n              this.growlerService.show(growlerData);\n            });\n          }).catch(() => {\n            const growlerData = new GrowlerModel(\n                'error',\n                'Error',\n                `Failed to get service associations`,\n                `Unable to retrieve orphaned configs and service policies`,\n            );\n            this.growlerService.show(growlerData);\n            return {selectedItems: undefined, allItem: undefined, success: true};\n          });\n        } else {\n          this.svc.removeItems(selectedIds).then(() => {\n            this.refreshData(this.svc.currentSort);\n          });\n        }\n      }\n    });\n  }\n\n  openPreviewSelections() {\n    const data = {\n      selectedItems: this.selectedItems,\n      itemsToDelete: this.selectedItems,\n      deleteConfirmed: this.confirmData.secondaryConfirmed\n    };\n    const dialogRef = this.dialogForm.open(PreviewSelectionsComponent, {\n      data: data,\n      autoFocus: false,\n    });\n    dialogRef.afterClosed().subscribe((result) => {\n      if (result?.confirmed) {\n        this.svc.removeAllServicesAndOrphans(data.itemsToDelete).then(() => {\n          const growlerData = new GrowlerModel(\n              'success',\n              'Success',\n              `Services Deleted`,\n              `Successfully deleted selected services and entities`,\n          );\n          this.growlerService.show(growlerData);\n          this.refreshData(this.svc.currentSort);\n        });\n        this.dialogRef.close();\n      }\n    });\n  }\n}\n","<div class=\"ziti-page-container ziti-services-container\">\n  <lib-list-page-header [title]=\"'Services'\"\n    [tabs]=\"tabs\"\n    [showAdd]=\"!itemsSelected\"\n    [blockCreate]=\"headerBlockCreate\"\n    [blockDelete]=\"headerBlockDelete\"\n  (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n\n  <lib-data-table [tableId]=\"'services'\"\n    [noItemsReadonly]=\"headerBlockCreate\"\n    [accessDenied]=\"headerBlockRead\"\n    [rowData]=\"rowData\"\n    [isLoading]=\"isLoading\"\n    [columnDefinitions]=\"columnDefs\"\n    (actionRequested)=\"tableAction($event)\"\n    [startCount]=\"startCount\"\n    [endCount]=\"endCount\"\n    [totalCount]=\"totalCount\"\n    [currentPage]=\"filterService.currentPage\"\n    [emptyMsg]=\"'No Services defined, Click the plus to add a service.'\"\n    [filterApplied]=\"filterApplied\"\n    [menuItems]=\"svc.menuItems\"\n    [headerActions]=\"svc.tableHeaderActions\"\n    >\n  </lib-data-table>\n</div>\n@if (isLoading) {\n  <lib-loading-indicator [isLoading]=\"isLoading\"></lib-loading-indicator>\n}\n","import { Inject } from \"@angular/core\";\nimport { HttpClient } from \"@angular/common/http\";\nimport { Router } from \"@angular/router\";\nimport { InjectionToken } from '@angular/core';\nimport { SETTINGS_SERVICE } from \"./settings.service\";\nimport { SettingsServiceClass } from \"./settings-service.class\";\nimport { GrowlerService } from \"../features/messaging/growler.service\";\nimport { isEmpty } from 'lodash';\n\nexport const ZAC_LOGIN_SERVICE = new InjectionToken<any>('ZAC_LOGIN_SERVICE');\n\n\nexport abstract class LoginServiceClass {\n\n    public checkingControllerOrigin = false;\n    public originIsController;\n    public loginDialogOpen = false;\n    public isCertBasedAuth = false;\n    public certBasedAttempted = false;\n    public serviceUrl = '';\n    public loginInProgress = false;\n    public callbackRoute = '/callback';\n\n    // MFA (TOTP) secondary auth state - populated mid-login by services that support it\n    public pendingMfa = false;\n    public mfaAuthQueries: any[] = [];\n\n    completeMfaAuth(code: string): Promise<any> {\n        return Promise.reject('MFA authentication is not supported by this login service');\n    }\n\n    cancelMfaAuth(): void {\n        this.pendingMfa = false;\n        this.mfaAuthQueries = [];\n    }\n\n    abstract init();\n    abstract login(prefix: string, url: string, username: string, password: string, doNav?, type?, token?, isTest?);\n    abstract observeLogin(serviceUrl: string, username: string, password: string, doNav?, type?, token?, isTest?);\n    abstract clearSession();\n    abstract checkOriginForController(): Promise<any>;\n    abstract logout();\n\n    constructor(\n        protected httpClient: HttpClient,\n        @Inject(SETTINGS_SERVICE) protected settingsService: SettingsServiceClass,\n        protected router: Router,\n        protected growlerService: GrowlerService\n    ) { }\n\n    public getHttpOptions() {\n        const options: any = {\n            headers: {\n                accept: '*',\n            },\n            params: {},\n            responseType: 'text' as const,\n        };\n        return options;\n    }\n\n    decodeJwt(token: string): any {\n        if (isEmpty(token)) {\n            return {};\n        }\n        const parts = token.split('.');\n        if (parts.length !== 3) {\n            throw new Error('Invalid JWT token');\n        }\n\n        const payload = parts[1];\n        const decoded = atob(payload.replace(/-/g, '+').replace(/_/g, '/'));\n        return JSON.parse(decoded);\n    }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Injector} from \"@angular/core\";\nimport {SettingsService, SETTINGS_SERVICE} from \"./services/settings.service\";\nimport {ZAC_LOGIN_SERVICE, LoginServiceClass} from \"./services/login-service.class\";\n\nexport function onAppInit(injector: Injector): () => Promise<any> {\n    const loginService = injector.get(ZAC_LOGIN_SERVICE, LoginServiceClass);\n    const settingsService = injector.get(SETTINGS_SERVICE, SettingsService);\n    settingsService.init()\n    return () => loginService.init();\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, EventEmitter, Input, Output} from '@angular/core';\n\n@Component({\n    selector: 'lib-form-field-toggle',\n    templateUrl: './form-field-toggle.component.html',\n    styleUrls: ['./form-field-toggle.component.scss'],\n    standalone: false\n})\nexport class FormFieldToggleComponent {\n\n  @Input() label = 'Show More Options';\n  @Input() orientation = 'row';\n  @Input() labelOn = 'ON';\n  @Input() labelOff = 'OFF';\n  @Input() toggleOn = false;\n  @Output() toggleOnChange = new EventEmitter<boolean>();\n\n  enterKeyPressed(event) {\n    this.toggleSwitch();\n  }\n\n  toggleSwitch() {\n    this.toggleOn = !this.toggleOn;\n    this.toggleOnChange.emit(this.toggleOn);\n  }\n\n}\n","<div class=\"form-field-toggle-container\" tabindex=0 (keyup.space)=\"enterKeyPressed($event)\" (click)=\"toggleSwitch()\">\n  @if (orientation === 'row') {\n    <span class=\"form-field-label\">{{label}}</span>\n  }\n  <div class=\"form-field-line\"></div>\n  <div\n    [ngClass]=\"{ on: toggleOn }\"\n    class=\"toggle\"\n    >\n    <span [hidden]=\"!toggleOn\" class=\"on-label\">{{labelOn}}</span>\n    <span [hidden]=\"toggleOn\" class=\"off-label\">{{labelOff}}</span>\n    <div class=\"switch\"></div>\n  </div>\n</div>","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges} from '@angular/core';\nimport {forEach, isEmpty, map, unset, debounce, cloneDeep, set} from \"lodash\";\n\n@Component({\n    selector: 'lib-custom-tags',\n    templateUrl: './custom-tags.component.html',\n    styleUrls: ['./custom-tags.component.scss'],\n    standalone: false\n})\nexport class CustomTagsComponent implements OnInit, OnChanges {\n\n  @Input() tags: any = {};\n  /** View-only: no add/remove/edit; show name/value as text (e.g. global admin_readonly). */\n  @Input() readOnly = false;\n  @Output() tagsChange: EventEmitter<any> = new EventEmitter<any>();\n\n  tagsArray: any = [];\n  newTagName = '';\n  newTagValue = '';\n  errors: any = {};\n  object = Object;\n\n  newTag = {name: '', value: '', initName: '', initVal: '', showNewTag: true, errors: {}};\n\n  tagNameChangedDebounced = debounce(this.tagNameChanged, 350);\n  tagValueChangedDebounced = debounce(this.tagValueChanged, 350);\n  updateTagsArrayDebounced = debounce(this.updateTagsArray, 350);\n  updateTagsObjectDebounced = debounce(this.updateTagsObject, 350);\n\n  constructor() {}\n\n  ngOnInit() {\n    this.updateTagsArray({});\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    this.updateTagsArray({});\n  }\n\n  updateTagsArray(event?: any) {\n    this.tagsArray = map(this.tags, (value, key) => {\n      return {name: key, value: value, initName: key, initVal: value, errors: {}}\n    });\n    this.tagsChange.emit(this.tags);\n    event?.srcElement?.focus();\n  }\n\n  updateTagsObject(event?: any) {\n    this.tagsArray.forEach((tag) => {\n      if (tag.initName !== tag.name) {\n        unset(this.tags, tag.initName);\n        tag.initName = tag.name;\n      }\n      if (isEmpty(tag.name) && isEmpty(tag.value)) {\n        unset(this.tags, tag.name);\n      }\n      this.tags[tag.name] = tag.value;\n    });\n    this.tagsChange.emit(this.tags);\n  }\n\n  addTag(event?) {\n    if (this.readOnly) {\n      return;\n    }\n    this.validate();\n    set(this.tagsArray, `[${this.tagsArray.length - 1}].showNewTag`, false);\n    const newTag = cloneDeep(this.newTag);\n    this.tagsArray = [...this.tagsArray, newTag];\n    this.updateTagsObject();\n    event?.stopPropagation();\n    event?.preventDefault();\n  }\n\n  removeTag(tagName: string) {\n    if (this.readOnly) {\n      return;\n    }\n    unset(this.tags, tagName);\n    this.updateTagsArray({});\n    set(this.tagsArray, `[${this.tagsArray.length - 1}].showNewTag`, true);\n  }\n\n  enterKeyPressed(event) {\n    this.addTag();\n    event.stopPropagation();\n    event.preventDefault();\n  }\n\n  tagNameChanged(tag: any, event?) {\n    this.updateTagsObjectDebounced(event);\n  }\n\n  tagValueChanged(tag: any, event?) {\n    this.updateTagsObjectDebounced(event);\n  }\n\n  validate(event?) {\n    this.tagsArray.forEach((tag) => {\n      const errors = {};\n      if (isEmpty(tag.name)) {\n        errors['name'] = true;\n      }\n      if (isEmpty(tag.value)) {\n        errors['value'] = true;\n      }\n      tag.errors = errors;\n    });\n  }\n\n}\n","<div id=\"TagExtended\" (clickOutside)=\"validate($event)\" [class.custom-tags-readonly]=\"readOnly\">\n  @if (!readOnly) {\n    <div class=\"add-button-container add-vlan-button add-config-open\" (click)=\"addTag($event)\">\n      <div class=\"icon-add addIcon\"></div>\n      <span class=\"add-icon-label\">New Tag</span>\n    </div>\n  }\n  @if (tagsArray.length >= 1) {\n    <div class=\"grid tags\">\n      <label>Name</label><label>Value</label>\n    </div>\n  }\n  <div id=\"NewTags\" >\n    @if (tagsArray.length <= 0) {\n      <div class=\"no-tags-container\">\n        No tags to display...\n      </div>\n    }\n    @for (tag of tagsArray; track tag) {\n      <div class=\"grid tags\">\n          <input\n            maxlength=\"100\"\n            placeholder=\"enter tag name...\"\n            [(ngModel)]=\"tag['name']\"\n          [ngClass]=\"{invalid: tag.errors.name}\"\n            (keyup.enter)=\"enterKeyPressed($event)\"\n            (keyup)=\"tagNameChanged(tag, $event)\"\n            (change)=\"validate($event)\"\n            [disabled]=\"readOnly\"\n            >\n          <input\n            placeholder=\"enter tag value...\"\n            type=\"text\"\n            maxlength=\"100\"\n            [(ngModel)]=\"tag['value']\"\n            (keyup.enter)=\"enterKeyPressed($event)\"\n            (keyup)=\"tagValueChanged(tag, $event)\"\n            (change)=\"validate($event)\"\n            [disabled]=\"readOnly\"\n            >\n          @if (!readOnly) { \n          <div class=\"tag-actions\">\n            <div class=\"removeIcon icon-clear\" (click)=\"removeTag(tag.name)\"></div>\n          </div>\n          }\n      </div>\n    }\n  </div>\n</div>\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {\n  Component,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output,\n  OnChanges,\n  SimpleChanges,\n  AfterViewInit,\n  Inject\n} from '@angular/core';\nimport {ProjectableForm} from \"../projectable-form.class\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../../services/settings.service\";\n\nimport {has, isEmpty, isNil, forOwn, cloneDeep, set, unset} from 'lodash';\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../services/ziti-data.service\";\nimport {GrowlerService} from \"../../messaging/growler.service\";\nimport {IDENTITY_EXTENSION_SERVICE, IdentityFormService} from './identity-form.service';\nimport {MatDialog, MatDialogRef} from \"@angular/material/dialog\";\nimport {IdentitiesPageService} from \"../../../pages/identities/identities-page.service\";\nimport {ExtensionService} from \"../../extendable/extensions-noop.service\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {Identity} from \"../../../models/identity\";\nimport {Location} from \"@angular/common\";\nimport moment from \"moment/moment\";\nimport {FilterObj} from \"../../data-table/data-table-filter.service\";\nimport {ConfirmComponent} from \"../../confirm/confirm.component\";\nimport {GrowlerModel} from \"../../messaging/growler.model\";\n\n@Component({\n    selector: 'lib-identity-form',\n    templateUrl: './identity-form.component.html',\n    styleUrls: ['./identity-form.component.scss'],\n    providers: [\n        {\n            provide: MatDialogRef,\n            useValue: {}\n        }\n    ],\n    standalone: false\n})\nexport class IdentityFormComponent extends ProjectableForm implements OnInit, OnChanges, AfterViewInit {\n  @Input() identityRoleAttributes: any[] = [];\n  @Output() close: EventEmitter<any> = new EventEmitter<any>();\n\n  override entityType = 'identities';\n  override entityClass = Identity;\n\n  isEditing = false;\n  enrollmentExpiration: any;\n  expirationDate: string = '';\n  jwt: any;\n  jwtExpired;\n  associatedServicePolicies: any = [];\n  associatedServicePolicyNames: any = [];\n  associatedServices: any = [];\n  associatedServiceNames: any = [];\n  servicesLoading = false;\n  servicePoliciesLoading = false;\n  authPolicies: any = [];\n\n  formView = 'simple';\n  enrollmentType = 'ott';\n  enrollmentCA;\n  enrollmentUPDB = '';\n  settings: any = {};\n  testResult: string = '';\n  testResultOpen = false;\n\n  cas = [];\n  dialogRef: any;\n\n  constructor(\n      @Inject(SETTINGS_SERVICE) protected override settingsService: SettingsService,\n      public svc: IdentityFormService,\n      public identitiesService: IdentitiesPageService,\n      @Inject(ZITI_DATA_SERVICE) override zitiService: ZitiDataService,\n      growlerService: GrowlerService,\n      @Inject(IDENTITY_EXTENSION_SERVICE) extService: ExtensionService,\n      protected override router: Router,\n      protected override route: ActivatedRoute,\n      location: Location,\n      protected override dialogForm: MatDialog,\n  ) {\n    super(growlerService, extService, zitiService, router, route, location, settingsService, dialogForm);\n    this.identityRoleAttributes = [];\n    this.getAuthPolicies();\n  }\n\n  override ngOnInit(): void {\n    super.ngOnInit();\n    this.settingsService.settingsChange.subscribe((results:any) => {\n      this.settings = results;\n    });\n    this.subscription.add(this.extService.formDataChanged.subscribe((results:any) => {\n      if (!this.entityId || this.entityId === 'create') {\n        return;\n      }\n      this.isLoading = true;\n      this.zitiService.getSubdata(this.entityType, this.entityId, '').then((entity: any) => {\n        this.formData = entity?.data || this.formData || new this.entityClass();\n        this.initData = cloneDeep(this.formData);\n        this._dataChange = false;\n        this.entityUpdated();\n      }).finally(() => {\n        this.isLoading = false;\n      });\n    }))\n  }\n\n  override ngAfterViewInit() {\n    super.ngAfterViewInit();\n    if (!this.useStrictReadonlyForm) {\n      this.nameFieldInput?.nativeElement?.focus();\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    this.isEditing = !isEmpty(this.formData.id);\n  }\n\n  override entityUpdated() {\n    super.entityUpdated();\n    this.updateBadges();\n    this.initEnrollmentType();\n    this.getIdentityRoleAttributes();\n    this.getAssociatedServices();\n    this.getAssociatedServicePolicies();\n    this.getCertificateAuthorities();\n    this.loadTags();\n    unset(this.formData, '_links');\n    this.initData = cloneDeep(this.formData);\n    this.extService.updateFormData(this.formData);\n  }\n\n  updateBadges() {\n    if (this.formData.id) {\n      this.formData.badges = [];\n      const hasERConnectionProp = has(this.formData, 'edgeRouterConnectionStatus')\n      if (hasERConnectionProp) {\n        if (this.formData.edgeRouterConnectionStatus === 'online') {\n          this.formData.badges.push({label: 'Online', class: 'online', circle: 'true'});\n        } else if (this.formData.edgeRouterConnectionStatus === 'offline') {\n          this.formData.badges.push({label: 'Offline', class: 'offline', circle: 'false'});\n        } else {\n          this.formData.badges.push({label: 'Connection Status Unknown', class: 'unknown', circle: 'false'});\n        }\n      } else if (this.formData.hasApiSession || this.formData.hasEdgeRouterConnection) {\n        this.formData.badges.push({label: 'Online', class: 'online', circle: 'true'});\n      } else {\n        this.formData.badges.push({label: 'Offline', class: 'offline', circle: 'false'});\n      }\n      if (this.formData.enrollment?.ott) {\n        this.formData.badges.push({label: 'Unregistered', class: 'unreg'});\n      }\n      if (this.formData.disabled) {\n        this.formData.badges.push({label: 'Disabled', class: 'unreg'});\n      }\n      this.jwt = this.identitiesService.getJWT(this.formData);\n      this.enrollmentExpiration = this.identitiesService.getEnrollmentExpiration(this.formData);\n      this.updateExpirationDate();\n    }\n  }\n\n  refreshIdentity(waitForEnrollmentChange = false) {\n    const previousExpiration = this.enrollmentExpiration;\n    this.isLoading = true;\n    this.pollRefreshIdentity(previousExpiration, waitForEnrollmentChange, 10, 500)\n      .finally(() => {\n        this.isLoading = false;\n      });\n  }\n\n  private pollRefreshIdentity(\n    previousExpiration: any,\n    waitForChange: boolean,\n    attemptsLeft: number,\n    delayMs: number,\n  ): Promise<void> {\n    return this.svc.refreshIdentity(this.formData.id).then((result) => {\n      const data = result?.data;\n      const newExpiration = this.identitiesService.getEnrollmentExpiration(data);\n      const changed = !waitForChange || !previousExpiration || newExpiration !== previousExpiration;\n      if (changed || attemptsLeft <= 1) {\n        this.formData = data;\n        this.enrollmentExpiration = newExpiration;\n        this.updateExpirationDate();\n        this.jwt = this.identitiesService.getJWT(this.formData);\n        this.updateBadges();\n        this.initData = cloneDeep(this.formData);\n        this.extService.updateFormData(this.formData);\n        return Promise.resolve();\n      }\n      return new Promise<void>((resolve) => setTimeout(resolve, delayMs))\n        .then(() => this.pollRefreshIdentity(previousExpiration, waitForChange, attemptsLeft - 1, delayMs));\n    });\n  }\n\n  initEnrollmentType() {\n    if (this.formData?.enrollment?.ott) {\n      this.enrollmentType = 'ott';\n    } else if (this.formData?.enrollment?.updb) {\n      this.enrollmentType = 'updb';\n    } else if (this.formData?.enrollment?.ottca) {\n      this.enrollmentType = 'CA';\n    } else if (isEmpty(this.formData?.enrollment)) {\n      this.enrollmentType = 'none';\n    }\n  }\n\n  getIdentityRoleAttributes() {\n      this.getRoleAttributes('identity-role-attributes').then((attributes) => {\n          this.identityRoleAttributes = attributes;\n      });\n  }\n\n  roleAttributesChanged(roleAttributes: any[]) {\n    this.formData.roleAttributes = roleAttributes;\n    this.extService.emitEvent?.({\n      type: 'attributesChanged',\n      data: {\n        entityType: 'identity',\n        identityId: this.formData?.id,\n        roleAttributes: this.formData?.roleAttributes || [],\n      },\n    });\n  }\n\n  getAssociatedServices() {\n    this.zitiService.getSubdata('identities', this.formData.id, 'services', this.zitiService.DEFAULT_PAGING).then((result: any) => {\n      this.associatedServices = result.data;\n      this.associatedServiceNames = this.associatedServices.map((svc) => {\n        return svc.name;\n      });\n    });\n  }\n\n  getAssociatedServicePolicies() {\n    this.zitiService.getSubdata('identities', this.formData.id, 'service-policies', this.zitiService.DEFAULT_PAGING).then((result: any) => {\n      this.associatedServicePolicies = result.data;\n      this.associatedServicePolicyNames = this.associatedServicePolicies.map((policy) => {\n        return policy.name;\n      });\n    });\n  }\n\n  getCertificateAuthorities() {\n    const paging = {\n      filter: \"\",\n      noSearch: true,\n      order: \"asc\",\n      page: 1,\n      searchOn: \"name\",\n      sort: \"name\",\n      total: 100\n    }\n    this.zitiService.get('cas', paging, []).then((result: any) => {\n      this.cas = [...result.data];\n      if (this.cas.length > 0) {\n        this.enrollmentCA = this.cas[0].id;\n      }\n    });\n  }\n\n  getAuthPolicies() {\n    const paging = {\n      filter: \"\",\n      noSearch: true,\n      order: \"asc\",\n      page: 1,\n      searchOn: \"name\",\n      sort: \"name\",\n      total: 100\n    }\n    this.zitiService.get('auth-policies', paging, []).then((result: any) => {\n      this.authPolicies = [...result.data];\n    });\n  }\n\n  get hasAuthenticator() {\n    return this.identitiesService.hasAuthenticator(this.formData);\n  }\n\n  get hasEnrolmentToken() {\n    return this.identitiesService.hasEnrolmentToken(this.formData);\n  }\n\n  headerActionRequested(action) {\n    switch(action.name) {\n      case 'save':\n        this.save();\n        break;\n      case 'close':\n        this.closeForm();\n        break;\n      case 'toggle-view':\n        this.formView = action.data;\n        break;\n      case 'delete':\n        this.deleteEntity();\n        break;\n    }\n  }\n\n  multiActionRequested(action) {\n    switch(action.id) {\n      case 'save':\n        this.save();\n        break;\n      case 'delete':\n        this.deleteEntity();\n        break;\n    }\n  }\n\n  updateEnrollment() {\n    switch (this.enrollmentType) {\n      case 'ott':\n        this.formData.enrollment = {ott: true}\n        break;\n      case 'CA':\n        this.formData.enrollment = {ottca: this.enrollmentCA};\n        break;\n      case 'updb':\n        this.formData.enrollment = {updb: this.enrollmentUPDB};\n        break;\n      case 'none':\n        this.formData.enrollment = {};\n        break;\n      default:\n        this.formData.enrollment = {ott: true}\n        break;\n    }\n  }\n\n  save(event?) {\n    if (!this.canSaveByPermissions()) {\n      return;\n    }\n    this.formData.name = this.formData.name.trim();\n    if(!this.validate()) {\n      return;\n    }\n    const tagVals = this.getTagValues();\n    if (!isEmpty(tagVals)) {\n      forOwn(tagVals, (value, key) => {\n        this.formData.tags[key] = value;\n      });\n    }\n    this.isLoading = true;\n    this.svc.save(this.formData).then((result) => {\n      if (this.isModal) {\n        this.closeModal(true, true);\n        return;\n      }\n      this.initData = this.formData;\n      this._dataChange = false;\n      this.returnToListPage();\n    }).finally(() => {\n      this.isLoading = false;\n    });\n  }\n\n  validate(identity?) {\n    this.errors = {};\n    if (isEmpty(this.formData.name)) {\n      this.errors['name'] = true;\n    }\n    if (this.enrollmentType === 'CA' && (isEmpty(this.enrollmentCA) || isNil(this.enrollmentCA))) {\n      this.errors['enrollmentCA'] = true;\n    }\n    if (this.enrollmentType === 'updb' && (isEmpty(this.enrollmentUPDB) || isNil(this.enrollmentUPDB))) {\n      this.errors['enrollmentUPDB'] = true;\n    }\n    return isEmpty(this.errors);\n  }\n\n  get enrollmentTypeTitle() {\n    return this.enrollmentType === 'CA' ? 'CERTIFICATE AUTHORITY' : (this.enrollmentType === 'updb' && !this.isEditing) ? 'UPDB USERNAME' : undefined;\n  }\n  get apiCallURL() {\n    return this.settings.selectedEdgeController + '/edge/management/v1/identities' + (this.formData.id ? `/${this.formData.id}` : '');\n  }\n\n  get apiData() {\n    const data: any = {\n      name: this.formData?.name || '',\n      type: this.formData?.type?.name || this.formData?.type || '',\n      appData: this.formData?.appData || '',\n      isAdmin: this.formData?.isAdmin || '',\n      roleAttributes: this.formData?.roleAttributes || '',\n      authPolicyId: this.formData?.authPolicyId || '',\n      externalId: this.formData?.externalId || '',\n      defaultHostingCost: this.formData?.defaultHostingCost || '0',\n      defaultHostingPrecedence: this.formData?.defaultHostingPrecedence || 'defaultHostingPrecedence',\n      tags: this.formData?.tags\n    };\n    if (!this.isEditing) {\n      data.enrollment = this.formData.enrollment || {ott: true};\n    }\n    return data;\n  }\n\n  _apiData = {};\n  set apiData(data) {\n    this._apiData = data;\n  }\n\n  serviceSelected(serviceName) {\n    let service: any = {};\n    this.associatedServices.forEach((svc) => {\n      if(svc.name === serviceName) {\n        service = svc;\n      }\n    });\n    this.svc.testService(this.formData.id, service.id).then((result) => {\n      this.testResult = result;\n      this.testResultOpen = true;\n    });\n  }\n\n  selectedRange\n  disableDurationType = 'indefinite';\n  identityDisabled = false;\n  disableDuration =  new Date();\n  minDate = new Date();\n\n  toggleDisableIdentity() {\n    this.identityDisabled = !this.identityDisabled;\n  }\n\n  toggleIsAdmin() {\n    if (this.useStrictReadonlyForm) {\n      return;\n    }\n    this.formData.isAdmin = !this.formData.isAdmin;\n  }\n\n  // Date/time selection is handled by reusable <lib-date-time-picker>.\n\n  get identityType() {\n    return this.isEditing ? this.formData.type.name : this.formData.type;\n  }\n\n  set identityType(type) {\n    if (this.isEditing) {\n      set(this.formData, 'type.name', type);\n    } else {\n      set(this.formData, 'type', type);\n    }\n  }\n\n  get entityDisabled() {\n    return this.formData?.disabled;\n  }\n\n  get showResetToken() {\n    return this.formData?.authenticators?.cert?.id || this.formData?.authenticators?.updb?.id;\n  }\n\n  updateExpirationDate() {\n    this.expirationDate = moment(this.enrollmentExpiration).local().format('M/D/YY h:mm a');\n    this.jwtExpired = this.getJwtExpired();\n  }\n\n  getJwtExpired() {\n    return moment(this.enrollmentExpiration).isBefore();\n  }\n\n  disableIdentity() {\n    if (this.useStrictReadonlyForm) {\n      return;\n    }\n    const localDate = moment(this.disableDuration).local();\n    const minutesDifference = localDate.diff(moment(), 'minutes');\n    const confirmData = {\n      appendId: 'DisableIdentity',\n      title: 'Disable Identity',\n      message: `Are you sure you would like to disable this identity ${this.disableDurationType === 'indefinite' ? 'indefinitely' : `until: <br>${localDate}`}?`,\n      confirmLabel: 'Yes',\n      cancelLabel: 'Oops, no get me out of here',\n      showCancelLink: true,\n      imageUrl: 'assets/svgs/Growl_Warning.svg',\n    };\n    this.dialogRef = this.dialogForm.open(ConfirmComponent, {\n      data: confirmData,\n      autoFocus: false,\n    });\n    this.dialogRef.afterClosed().subscribe({\n      next: (result) => {\n        if (!result?.confirmed) {\n          return;\n        }\n        this.zitiService.post(`/identities/${this.formData.id}/disable`, {durationMinutes: minutesDifference}).then((result) => {\n          const growlerData = new GrowlerModel(\n              'success',\n              'Success',\n              `Identity Disabled`,\n              `Successfully disabled identity`,\n          );\n          this.growlerService.show(growlerData);\n          this.refreshIdentity();\n        }).catch((error) => {\n          const errorMessage = this.zitiService.getErrorMessage(error);\n          const growlerData = new GrowlerModel(\n              'error',\n              'Error',\n              `Failed to Disabled`,\n              `Unable to disable identity: \"${errorMessage}\"`,\n          );\n          this.growlerService.show(growlerData);\n          this.refreshIdentity();\n        });\n      },\n    })\n  }\n\n  enableIdentity() {\n    if (this.useStrictReadonlyForm) {\n      return;\n    }\n    const confirmData = {\n      appendId: 'EnableIdentity',\n      title: 'Enable Identity',\n      message: `Are you sure you would like to enable this identity?`,\n      confirmLabel: 'Yes',\n      cancelLabel: 'Oops, no get me out of here',\n      showCancelLink: true,\n      imageUrl: 'assets/svgs/Growl_Warning.svg',\n    };\n    this.dialogRef = this.dialogForm.open(ConfirmComponent, {\n      data: confirmData,\n      autoFocus: false,\n    });\n    this.dialogRef.afterClosed().subscribe({\n      next: (result) => {\n        if (!result?.confirmed) {\n          return;\n        }\n        this.zitiService.post(`/identities/${this.formData.id}/enable`, {durationMinutes: 0}).then((result) => {\n          const growlerData = new GrowlerModel(\n              'success',\n              'Success',\n              `Identity Enabled`,\n              `Successfully enabled identity`,\n          );\n          this.growlerService.show(growlerData);\n          this.refreshIdentity();\n        }).catch((error) => {\n          const errorMessage = this.zitiService.getErrorMessage(error);\n          const growlerData = new GrowlerModel(\n              'error',\n              'Error',\n              `Failed to Enable`,\n              `Unable to enable identity: \"${errorMessage}\"`,\n          );\n          this.growlerService.show(growlerData);\n          this.refreshIdentity();\n        });\n      },\n    })\n  }\n\n  closeTestResult() {\n    this.testResultOpen = false;\n  }\n\n  clear(): void {\n  }\n}\n","<div class=\"projectable-form-wrapper\"\n  (keyup.enter)=\"save($event)\"\n  (keyup.escape)=\"closeModal(false)\"\n  [class.projectable-form-hidden]=\"!dataInit\"\n  >\n  <lib-form-header\n    [data]=\"formData\"\n    [title]=\"formData.id ? 'Edit Identity: ' : 'Create New Identity'\"\n    [moreActions]=\"moreActions\"\n    [multiActions]=\"multiActions\"\n    (actionRequested)=\"headerActionRequested($event)\"\n    (multiActionRequested)=\"multiActionRequested($event)\"\n    [(formView)]=\"formView\"\n    [class.is-scrolled]=\"isScrolled\"\n    [saveDisabled]=\"formPermissionSaveDisabled\"\n    [saveTooltip]=\"formPermissionSaveTooltip\"\n    [strictReadonlyUi]=\"useStrictReadonlyForm\"\n  ></lib-form-header>\n  <ng-content select=\"[slot=tabs-slot]\"></ng-content>\n  <div class=\"identity-form-container projectable-form-container\" #formContainer>\n    @if (formView === 'simple') {\n      <div class=\"projectable-form-main-column form-group-row\">\n        <div class=\"form-group-column three-fifths\">\n          <lib-form-field-container [title]=\"'Identity Name'\" [label]=\"useStrictReadonlyForm ? '' : 'REQUIRED'\">\n              <input\n                class=\"form-field-input\"\n                placeholder=\"Name this identity\"\n                [ngClass]=\"{error: errors['name']}\"\n                [(ngModel)]=\"formData.name\"\n                autofocus\n                #nameFieldInput\n                [disabled]=\"useStrictReadonlyForm\"\n                />\n          </lib-form-field-container>\n          <lib-form-field-container\n            [title]=\"'Select or create Identity attributes'\"\n            [label]=\"useStrictReadonlyForm ? '' : 'OPTIONAL'\"\n            [contentStyle]=\"'z-index: 99999999'\"\n            [helpText]=\"'Attributes are tags applied to an resource. Apply the same tag to other Identities to form a group of Identities.'\"\n            >\n            <lib-tag-selector\n              [(selectedRoleAttributes)]=\"formData.roleAttributes\"\n              (selectedRoleAttributesChange)=\"roleAttributesChanged($event)\"\n              [availableRoleAttributes]=\"identityRoleAttributes\"\n              [placeholder]=\"'Add attributes to group Identities'\"\n              [disableField]=\"useStrictReadonlyForm\"\n              [disableCreate]=\"useStrictReadonlyForm\"\n            ></lib-tag-selector>\n          </lib-form-field-container>\n          <ng-content select=\"[slot=column-1-slot-1]\"></ng-content>\n          @if (canReadRelated('auth-policies')) {\n          <lib-form-field-container\n            [title]=\"'Auth Policy'\"\n            [label]=\"useStrictReadonlyForm ? '' : 'OPTIONAL'\"\n            [helpText]=\"'Authentication Policies restrict the authentication methods available to identities.'\"\n            >\n            <select\n              [(ngModel)]=\"formData.authPolicyId\"\n              id=\"authPolicyId\"\n              class=\"form-field-dropdown\"\n              [disabled]=\"useStrictReadonlyForm\"\n              >\n              <option value=\"\">Select an Authentication Policy</option>\n              @for (policy of authPolicies; track policy) {\n                <option\n                  [value]=\"policy.id\"\n                  >\n                  {{ policy.name }}\n                </option>\n              }\n            </select>\n            <div class=\"form-field-label-container\" style=\"gap: var(--paddingMedium)\">\n              <div class=\"form-field-header\">\n                <div class=\"form-field-title-container\">\n                  <span class=\"form-field-title\">External ID</span>\n                </div>\n                <span class=\"form-field-label\">{{ useStrictReadonlyForm ? '' : 'OPTIONAL' }}</span>\n              </div>\n              <input\n                class=\"form-field-input\"\n                placeholder=\"Optional External ID\"\n                [(ngModel)]=\"formData.externalId\"\n                [disabled]=\"useStrictReadonlyForm\"\n                />\n            </div>\n          </lib-form-field-container>\n          }\n          <ng-content select=\"[slot=column-1-slot-2]\"></ng-content>\n          <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n          <div [hidden]=\"!showMore\" class=\"form-group-column\">\n            <lib-form-field-container\n              [title]=\"'Enrollment Type'\"\n              [title2]=\"enrollmentTypeTitle\"\n              [layout]=\"'row'\"\n              class=\"form-field-advanced\"\n              >\n              <select\n                id=\"EnrollmentType\"\n                class=\"form-field-dropdown\"\n                [ngClass]=\"{disabled: isEditing}\"\n                [disabled]=\"useStrictReadonlyForm || isEditing\"\n                [(ngModel)]=\"enrollmentType\"\n                (change)=\"updateEnrollment()\"\n                >\n                <option value=\"ott\">One Time Token</option>\n                <option value=\"CA\" [hidden]=\"!canReadRelated('cas')\">Certificate Authority</option>\n                <option value=\"updb\">UPDB</option>\n                <option value=\"none\">None</option>\n              </select>\n              @if (enrollmentType === 'CA' && canReadRelated('cas')) {\n                <select\n                  id=\"CertAuthorities\"\n                  class=\"form-field-dropdown\"\n                  [ngClass]=\"{disabled: isEditing, error: errors.enrollmentCA}\"\n                  [disabled]=\"useStrictReadonlyForm || isEditing\"\n                  [(ngModel)]=\"enrollmentCA\"\n                  (change)=\"updateEnrollment()\"\n                  >\n                  @for (ca of cas; track ca) {\n                    <option [value]=\"ca.id\">{{ca.name}}</option>\n                  }\n                </select>\n              }\n              @if (enrollmentType === 'updb' && !isEditing) {\n                <input\n                  id=\"UPDBName\"\n                  class=\"form-field-input\"\n                  [ngClass]=\"{disabled: isEditing, error: errors.enrollmentUPDB}\"\n                  [(ngModel)]=\"enrollmentUPDB\"\n                  (keyup)=\"updateEnrollment()\"\n                  type=\"text\"\n                  maxlength=\"500\"\n                  placeholder=\"Enter a name\"\n                  [disabled]=\"useStrictReadonlyForm\"\n                  >\n              }\n            </lib-form-field-container>\n            <lib-form-field-container\n              [title]=\"'Admin'\"\n              [layout]=\"'row'\"\n              class=\"form-field-advanced is-admin-container\"\n              >\n              <div class=\"config-item\">\n                <div class=\"config-container toggle-container\">\n                  <div class=\"config-container-label\">IS ADMIN</div>\n                  <div\n                    (click)=\"toggleIsAdmin()\"\n                    [ngClass]=\"{ on: formData.isAdmin, 'toggle-readonly': useStrictReadonlyForm }\"\n                    class=\"toggle\"\n                    >\n                    <span [hidden]=\"!formData.isAdmin\" class=\"on-label\">YES</span>\n                    <span [hidden]=\"formData.isAdmin\" class=\"off-label\">NO</span>\n                    <div class=\"switch\"></div>\n                  </div>\n                </div>\n              </div>\n            </lib-form-field-container>\n            <lib-form-field-container\n              [title]=\"'Hosting Cost'\"\n              [title2]=\"'Precedence'\"\n              [layout]=\"'row'\"\n              class=\"form-field-advanced\"\n              >\n              <input\n                class=\"form-field-input\"\n                [(ngModel)]=\"formData.defaultHostingCost\"\n                type=\"number\"\n                [disabled]=\"useStrictReadonlyForm\"\n                />\n              <select\n                [(ngModel)]=\"formData.defaultHostingPrecedence\"\n                id=\"hostingPrecedence\"\n                class=\"form-field-dropdown\"\n                [disabled]=\"useStrictReadonlyForm\"\n                >\n                <option value=\"default\">Default</option>\n                <option value=\"required\">Required</option>\n                <option value=\"failed\">Failed</option>\n              </select>\n            </lib-form-field-container>\n            @for (tagElement of tagElements; track tagElement) {\n              <lib-form-field-container\n                [title]=\"tagElement.label\"\n                [label]=\"useStrictReadonlyForm ? '' : 'OPTIONAL'\"\n                class=\"form-field-advanced\"\n                >\n                <div [innerHTML]=\"tagElement.content | safe\"></div>\n              </lib-form-field-container>\n            }\n            @if (!hideTags) {\n              <lib-form-field-container\n                [title]=\"'Custom Tags'\"\n                [label]=\"useStrictReadonlyForm ? '' : 'OPTIONAL'\"\n                class=\"form-field-advanced\"\n                >\n                <lib-custom-tags [(tags)]=\"formData.tags\" [readOnly]=\"useStrictReadonlyForm\"></lib-custom-tags>\n              </lib-form-field-container>\n            }\n            <lib-form-field-container\n              [title]=\"'App Data'\"\n              [label]=\"useStrictReadonlyForm ? '' : 'OPTIONAL'\"\n              class=\"form-field-advanced\"\n              >\n              <lib-json-view [(data)]=\"formData.appData\" [readOnly]=\"useStrictReadonlyForm\"></lib-json-view>\n            </lib-form-field-container>\n          </div>\n        </div>\n        <div class=\"form-group-column two-fifths\">\n          <ng-content select=\"[slot=column-2-slot-1]\"></ng-content>\n          @if (isEdit && (hasEnrolmentToken || hasAuthenticator)) {\n            <lib-form-field-container\n              [showHeader]=\"false\"\n              [layout]=\"'column'\"\n              [contentStyle]=\"'z-index: 99999999'\"\n              >\n              <div class=\"form-field-label-container\" style=\"gap: var(--paddingMedium)\">\n                <div class=\"form-field-header\">\n                  <div class=\"form-field-title-container\">\n                    <span class=\"form-field-title\">Enrollment:</span>\n                  </div>\n                  @if (jwtExpired !== undefined && !showResetToken) {\n                    <span class=\"form-field-label info-text\"\n                      [class.expired-text]=\"jwtExpired\"\n                      >\n                      {{jwtExpired ? 'EXPIRED' : 'EXPIRES'}} {{expirationDate}}\n                    </span>\n                  }\n                </div>\n                @if (!useStrictReadonlyForm) {\n                <lib-qr-code\n                  [identity]=\"formData\"\n                  [jwt]=\"jwt\"\n                  [expiration]=\"enrollmentExpiration\"\n                  [authenticators]=\"formData.authenticators\"\n                  [type]=\"'identity'\"\n                  [canExpand]=\"true\"\n                  (doRefresh)=\"refreshIdentity(true)\"\n                ></lib-qr-code>\n                }\n              </div>\n            </lib-form-field-container>\n          }\n          @if (isEdit && !useStrictReadonlyForm) {\n            <lib-form-field-container\n              [showHeader]=\"false\"\n              [layout]=\"'column'\"\n              [contentStyle]=\"'z-index: 99999999'\"\n              >\n              <div class=\"form-field-label-container\" style=\"gap: var(--paddingMedium)\">\n                <div class=\"form-field-header\">\n                  <div class=\"form-field-title-container\">\n                    <span class=\"form-field-title\">Enable / Disable:</span>\n                  </div>\n                </div>\n                @if (entityDisabled) {\n                  <div class=\"disable-identity-button-container\" (click)=\"enableIdentity()\">\n                    <div class=\"disable-identity-background\"></div>\n                    <button class=\"download-button disable-identity-button\">Enable Identity</button>\n                  </div>\n                }\n                @if (!entityDisabled) {\n                  <div class=\"disable-identity-button-container\" (click)=\"disableIdentity()\">\n                    <div class=\"disable-identity-background\"></div>\n                    <button class=\"download-button disable-identity-button\">Disable Identity</button>\n                  </div>\n                }\n              </div>\n              @if (!entityDisabled) {\n                <div class=\"form-field-label-container\" style=\"gap: var(--paddingMedium)\">\n                  <div class=\"form-field-header\">\n                    <div class=\"form-field-title-container\">\n                      <span class=\"form-field-title\">Disable Until:</span>\n                    </div>\n                  </div>\n                  <div class=\"disable-identity-duration-container\">\n                    <select [(ngModel)]=\"disableDurationType\" id=\"DurationType\" class=\"form-field-dropdown\">\n                      <option value=\"indefinite\">Indefinite</option>\n                      <option value=\"pick-date\">Pick a Date & Time</option>\n                    </select>\n                    @if (disableDurationType === 'pick-date') {\n                      <div class=\"disable-identity-datetime-inputs\">\n                        <lib-date-time-picker\n                          class=\"disable-identity-date-time-picker\"\n                          [(ngModel)]=\"disableDuration\"\n                          [minDate]=\"minDate\"\n                          [closeOnDateSelect]=\"true\"\n                        ></lib-date-time-picker>\n                      </div>\n                    }\n                  </div>\n                </div>\n              }\n            </lib-form-field-container>\n          }\n          @if (formData.id && canReadRelated('services')) {\n            <lib-form-field-container\n              [title]=\"'Associated Services'\"\n              [count]=\"associatedServices.length\"\n              [class]=\"'hide-overflow'\"\n              [helpText]=\"'Preview list of all services that this Identity is associated with.'\"\n              >\n              <lib-preview-list\n                (itemSelected)=\"serviceSelected($event)\"\n                [clickable]=\"true\"\n                [isLoading]=\"servicesLoading\"\n                [allNames]=\"associatedServiceNames\"\n              ></lib-preview-list>\n              <div class=\"svc-test-result\" [ngClass]=\"{'test-result-open': testResultOpen}\">\n                <div class=\"close icon-close\" (click)=\"closeTestResult()\"></div>\n                <div class=\"result-container\" [innerHTML]=\"testResult\" ></div>\n              </div>\n            </lib-form-field-container>\n          }\n          @if (formData.id && canReadRelated('service-policies')) {\n            <lib-form-field-container\n              [title]=\"'Associated Service Policies'\"\n              [count]=\"associatedServicePolicies.length\"\n              [helpText]=\"'Preview list of all service policies that this Identity is associated with.'\"\n              >\n              <lib-preview-list\n                (itemSelected)=\"serviceSelected($event)\"\n                [clickable]=\"false\"\n                [isLoading]=\"servicePoliciesLoading\"\n                [allNames]=\"associatedServicePolicyNames\"\n              ></lib-preview-list>\n            </lib-form-field-container>\n          }\n          @if (showApiCalls) {\n            <lib-form-field-container\n              [title]=\"'API Calls'\"\n              [label]=\"''\"\n              >\n              <div class=\"form-row\">\n                <input class=\"form-field-input\" [value]=\"apiCallURL\" readonly/>\n                <div class=\"url-copy icon-copy copy-text\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n              </div>\n              @if (formData) {\n                <lib-json-view [(data)]=\"apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n              }\n            </lib-form-field-container>\n          }\n        </div>\n      </div>\n    }\n    @if (formView === 'raw') {\n      <div class=\"form-group-column\">\n        @if (formData) {\n          <lib-json-view [(data)]=\"formData\" [readOnly]=\"useStrictReadonlyForm\"></lib-json-view>\n        }\n      </div>\n    }\n  </div>\n</div>\n@if (isLoading || !dataInit) {\n  <lib-loading-indicator [isLoading]=\"isLoading || !dataInit\"></lib-loading-indicator>\n}\n","import {Component, Input, OnDestroy, OnInit} from '@angular/core';\nimport {GrowlerModel} from \"./growler.model\";\nimport {GrowlerService} from \"./growler.service\";\nimport {Subscription} from \"rxjs\";\n\n@Component({\n    selector: 'lib-growler',\n    template: `\n    @if (show) {\n      <div [ngClass]=\"{ open: show }\" class=\"growler {{ level }}\" id=\"Growler\">\n        <div class=\"title\">{{ title }}</div>\n        <div class=\"subtitle\">{{ subtitle }}</div>\n        <div [innerHTML]=\"content\" class=\"content\"></div>\n        <div class=\"icon\"></div>\n      </div>\n    }`,\n    styleUrls: ['./growler.component.scss'],\n    standalone: false\n})\nexport class GrowlerComponent  implements OnInit, OnDestroy {\n  @Input() title = '';\n  @Input() subtitle = '';\n  @Input() level = '';\n  @Input() content = '';\n  @Input() show = false;\n\n  private growlerServiceSub: Subscription;\n\n  constructor(private growlerService: GrowlerService) {\n\n  }\n\n  ngOnInit(): void {\n    this.growlerServiceSub = this.growlerService.data$.subscribe((data) => {\n      this.showGrowler(data);\n    });\n  }\n\n  ngOnDestroy(): void {\n    if(this.growlerServiceSub) this.growlerServiceSub.unsubscribe();\n  }\n\n  private showGrowler(data: GrowlerModel) {\n    this.title = data.title;\n    this.subtitle = data.subtitle;\n    this.level = data.level;\n    this.content = data.content;\n    this.show = true;\n    setTimeout(() => {\n      this.show = false;\n    }, 7000);\n\n  }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { NgModule } from '@angular/core';\nimport {GrowlerComponent} from \"./growler.component\";\nimport {CommonModule} from \"@angular/common\";\nimport {FormsModule} from \"@angular/forms\";\n\n@NgModule({\n    imports: [CommonModule,FormsModule],\n    declarations: [GrowlerComponent],\n    exports: [GrowlerComponent],\n})\nexport class GrowlerModule {}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\nimport {Inject, Injectable} from \"@angular/core\";\nimport {Subscription} from \"rxjs\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {defer} from \"lodash\";\n// import {SETTINGS_SERVICE, SettingsService} from \"../services/settings.service\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../extendable/extensions-noop.service\";\n\n\n@Injectable()\nexport abstract class VisualizerServiceClass {\n    abstract title;\n    // subscription: Subscription = new Subscription();\n\n      constructor(\n       // @Inject(SHAREDZ_EXTENSION) protected extensionService: ExtensionService\n      ) {}\n\n      ngOnInit() {\n\n      }\n\n      ngOnDestroy() {\n        //  this.subscription.unsubscribe();\n      }\n\n\n  }\n","import { Injectable } from '@angular/core';\nimport _ from 'lodash';\n\nexport class Identity {\n    id;\n    uuid;\n    name;\n    status;\n    type;\n    rootNode;\n    serverEgressProtocol;\n    serverEgressHost;\n    serverEgressPort;\n    postureChecks;\n    events;\n    os;\n    utilization;\n    children;\n    contextMenu;\n    online;\n    osVersion;\n    createdAt;\n    updatedAt;\n    constructor() {\n        this.rootNode = 'No';\n        this.children = [];\n        this.contextMenu = 'Yes';\n    }\n}\n\nexport class Service {\n    id;\n    uuid;\n    name;\n    intercept_host;\n    intercept_port;\n    encrypted;\n    rootNode;\n    serverEgressHost;\n    serverEgressPort;\n    status;\n    protocol;\n    type;\n    children;\n    attributes;\n    utilization;\n    contextMenu;\n    createdAt;\n    updatedAt;\n    intercept;\n    constructor() {\n        this.rootNode = 'No';\n        this.children = [];\n        this.contextMenu = 'Yes';\n    }\n}\nexport class Config {\n  uuid;\n  id;\n  name;\n  data;\n  children;\n  contextMenu;\n  rootNode;\n  constructor() {\n      this.rootNode = 'No';\n      this.children = [];\n      this.contextMenu = 'Yes';\n  }\n}\nexport class Group {\n    id;\n    name;\n    type;\n    group;\n    children;\n\n    constructor(idv, s, g) {\n        this.id = idv;\n        this.name = s;\n        this.group = g;\n        this.type = 'Group';\n        this.children = [];\n    }\n}\n\nexport class ServicePolicy {\n    id;\n    uuid;\n    name;\n    type;\n    rootNode;\n    children;\n    contextMenu;\n    createdAt;\n    updatedAt;\n\n    constructor() {\n        this.rootNode = 'No';\n        this.children = [];\n        this.contextMenu = 'Yes';\n    }\n}\n\nexport class Attribute {\n    id;\n    name;\n    type;\n    children;\n\n    constructor() {\n        this.children = [];\n    }\n}\n\nexport class ERPolicy {\n    id;\n    uuid;\n    name;\n    status;\n    size;\n    type;\n    semantic;\n    isSystem;\n    rootNode;\n    children;\n    contextMenu;\n    createdAt;\n    updatedAt;\n    data;\n    constructor() {\n        this.rootNode = 'No';\n        this.children = [];\n        this.contextMenu = 'Yes';\n    }\n}\n\nexport class ServiceERPolicy {\n    id;\n    uuid;\n    name;\n    status;\n    size;\n    type;\n    rootNode;\n    children;\n    contextMenu;\n    createdAt;\n    updatedAt;\n\n    constructor() {\n        this.rootNode = 'No';\n        this.children = [];\n        this.contextMenu = 'Yes';\n    }\n}\n\nexport class ERouter {\n    id;\n    uuid;\n    name;\n    verified;\n    size;\n    type;\n    provider;\n    rootNode;\n    serverEgressProtocol;\n    serverEgressHost;\n    serverEgressPort;\n    children;\n    utilization;\n    contextMenu;\n    online;\n    disabled;\n    version;\n    tunnelerEnabled;\n    syncStatus;\n    createdAt;\n    updatedAt;\n\n    constructor() {\n        this.rootNode = 'No';\n        this.children = [];\n        this.contextMenu = 'Yes';\n    }\n}\n\nexport class Children {\n    id;\n    name;\n    status;\n    size;\n    type;\n    children;\n    data: Children;\n    rootNode = 'No';\n    firstChild = 'No';\n    constructor() {\n        this.type = 'Children';\n        this.children = [];\n    }\n}\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class NetworkVisualizerHelper {\n\n   uniqIId:any =0;\n\n createUniqId() {\n   return ++this.uniqIId;\n }\n  public createEdgeRouterNode(er, isRootNode = 'Yes') {\n      const erOb = new ERouter();\n      // erOb.id = createId();\n         erOb.uuid = er.id;\n         erOb.name = er.name;\n         erOb.verified = er.isVerified? 'Yes': 'No';\n         //erOb.version = er.productVersion;\n         erOb.online = er.isOnline? 'Yes': 'No';\n         erOb.disabled = er.disabled? 'Yes': 'No';\n         erOb.type = 'Edge Router';\n         erOb.rootNode = isRootNode;\n         erOb.tunnelerEnabled = er.tunnelerEnabled? er.tunnelerEnabled: 'No';\n         erOb.syncStatus = er.syncStatus? er.syncStatus:'No';\n         erOb.createdAt = er.createdAt;\n         erOb.updatedAt = er.updatedAt;\n   return erOb;\n  }\n  public createServiceEdgeRouterPolicyNode(rawObj, isRootNode = 'Yes') {\n     const serviceerpolicy = new ServiceERPolicy();\n     // serviceerpolicy.id = createId();\n     serviceerpolicy.uuid = rawObj.id;\n     serviceerpolicy.name = rawObj.name;\n     serviceerpolicy.type = 'Service Router Policy';\n     serviceerpolicy.rootNode = isRootNode;\n    return serviceerpolicy;\n  }\n  public createEdgeRouterPolicyNode(rawObj, isRootNode = 'Yes') {\n    const erpolicy = new ERPolicy();\n     // erpolicy.id = createId();\n      erpolicy.uuid = rawObj.id;\n      erpolicy.name = rawObj.name;\n      erpolicy.type = 'Edge Router Policy';\n      erpolicy.rootNode = isRootNode;\n      erpolicy.isSystem = rawObj.isSystem;\n      erpolicy.semantic = rawObj.semantic;\n   return erpolicy;\n  }\n  public createServicePolicyNode(rawObj, isRootNode = 'Yes') {\n    const bindGrp = new Group(43423, 'Bind-Policies', 'Bind Service Policy');\n    const dialGrp = new Group(43545, 'Dial-Policies', 'Dial Service Policy');\n\n    const spolicy:any = new ServicePolicy();\n       // spolicy.id = createId();\n       spolicy.id = 87956;\n        spolicy.uuid = rawObj.id;\n        spolicy.name = rawObj.name;\n        spolicy.type = 'Service Policy';\n        spolicy.rootNode = isRootNode;\n        spolicy.clickProcess = \"Not Yet\";\n      if(rawObj.type==='Bind') {\n        bindGrp.children.push(spolicy);\n        return bindGrp;\n      } else {\n        dialGrp.children.push(spolicy);\n        return dialGrp;\n      }\n  }\n  public createIdentityNode(rawObj, isRootNode = 'Yes') {\n    const endpoint = new Identity();\n            endpoint.rootNode = isRootNode;\n           // endpoint.id = createId();\n            endpoint.id = 5432;\n            endpoint.uuid = rawObj.id;\n            endpoint.name = rawObj.name;\n            endpoint.online = rawObj.hasApiSession === true ? 'Yes' : 'No';\n            endpoint.type = 'Identity';\n            endpoint.createdAt = rawObj.createdAt;\n            endpoint.updatedAt = rawObj.updatedAt;\n            endpoint.status = rawObj.sdkInfo !== null ? 'Registered' : 'Not Registered';\n              if (rawObj.sdkInfo) {\n                  endpoint.os = rawObj.sdkInfo.type? rawObj.sdkInfo.type: rawObj.sdkInfo.appId;\n                  endpoint.osVersion = rawObj.sdkInfo.version;\n              }\n              if (rawObj.authPolicy && rawObj.authPolicy.name.includes(\"BrowZer\")) {\n                 endpoint.type = 'BrowZer Identity';\n              }\n    return   endpoint;\n  }\n  public createServiceNode(rawObj, isRootNode = 'Yes') {\n      const serviceobj = new Service();\n       // serviceobj.id = createId();\n        serviceobj.name = rawObj.name;\n        serviceobj.uuid = rawObj.id;\n        serviceobj.type = 'Service';\n        serviceobj.rootNode = isRootNode;\n        const attributeswithName = [];\n        rawObj && rawObj.roleAttributes && rawObj.roleAttributes.find((srattr) => {\n           attributeswithName.push(srattr);\n        });\n    return serviceobj;\n  }\n\n    public getResourceTreeObj(\n        networkName,\n        networkStatus,\n        services,\n        identities,\n        servicePolicies,\n        edgerouters,\n        edgeRouterPolicies,\n        serviceEdgeRouterPolicies,\n        // networkProductVersion,\n        services_totalCount, identities_totalCount, edgerouters_totalCount,\n        service_policies_totalCount, edge_router_policies_totalCount,\n        service_router_policies_totalCount,\n        uniqId,\n        logger,\n        ...args: any\n    ) {\n       this.uniqIId = uniqId;\n\n        function createId() {\n            ++uniqId;\n          //  ++this.uniqIId;\n            return uniqId;\n        }\n\n        class RootJson {\n            id = createId();\n            name;\n            lastId = 0;\n            children = [];\n            contextMenu = 'Yes';\n            type = 'Network';\n            rootNode = 'No';\n           // version = networkProductVersion;\n            status;\n        }\n\n        const rootJson = new RootJson();\n        rootJson.name = 'Network';\n        rootJson.status = 'Provisioned';\n\n        function processIdentitiesForTree(\n            identitiesChildren,\n            identities,\n            nx,\n            ny\n        ) {\n          if(args[2]===false) return identitiesChildren;\n            const obj_array = [];\n            for (let j = nx; j < ny; j++) {\n                const endpoint = new Identity();\n                endpoint.rootNode = 'Yes';\n                endpoint.id = createId();\n                endpoint.uuid = identities[j].id;\n                endpoint.name = identities[j].name;\n                endpoint.online = identities[j].hasApiSession === true ? 'Yes' : 'No';\n                endpoint.type = 'Identity';\n                endpoint.createdAt = identities[j].createdAt;\n                endpoint.updatedAt = identities[j].updatedAt;\n                endpoint.status = identities[j].sdkInfo !== null ? 'Registered' : 'Not Registered';\n                if (identities[j].sdkInfo) {\n                    endpoint.os = identities[j].sdkInfo.type? identities[j].sdkInfo.type: identities[j].sdkInfo.appId;\n                    endpoint.osVersion = identities[j].sdkInfo.version;\n                }\n                if (identities[j].authPolicy && identities[j].authPolicy.name.includes(\"BrowZer\")) {\n                   endpoint.type = 'BrowZer Identity';\n                }\n                obj_array.push(endpoint);\n            } // end of main for loop\n          return grouping('Identitie', identitiesChildren, obj_array);\n\n        }\n        function subGrouping(name, mainGroup) {\n           const pageSize = 25;\n           mainGroup.children.sort(function (a, b) {\n               return a.name.localeCompare(b.name);\n           });\n          if (mainGroup.children.length > pageSize) {\n            const children:any = [];\n            let pageNo = 0;\n            for (let i = 0; i < mainGroup.children.length; i++) {\n                const lastElement = (i + pageSize) < mainGroup.children.length? (i + pageSize) : (mainGroup.children.length);\n                const nameS =\n                        name + 's [' +\n                        mainGroup.children[i].name.substring(0, 4) +\n                        ' - ' +\n                        mainGroup.children[lastElement-1].name.substring(0, 4) +\n                        ']';\n                const chld = new Group(\n                        createId(),\n                        nameS,\n                        name + ' name starts with ' +\n                         mainGroup.children[i].name.substring(0, 4) +\n                         ' To ' +\n                         mainGroup.children[lastElement-1].name.substring(0, 4)\n                    );\n                    let j = 0;\n                for (j = i; j < lastElement; j++) {\n                     i++;\n                     chld.children.push(mainGroup.children[j]);\n                }\n                 --i;\n                  chld.name = chld.name + ' (' + chld.children.length + ')';\n                  children.push(chld);\n            }\n            mainGroup.children = children;\n          }\n          return mainGroup;\n        }\n\n        function grouping(name, children, objectsArray) {\n          let protocolRDPGrp, protocolHTTPSGrp, protocolHTTPGrp, protocolFTPGrp, unregisteredGrp;\n\n          if (name === 'Service') {\n             protocolRDPGrp = new Group(\n                createId(),\n                'Services [protocol-RDP]',\n                'Services created for RDP protocol'\n            );\n             protocolHTTPSGrp = new Group(\n                createId(),\n                'Services [protocol-HTTPS]',\n                'Service created for HTTPS protocol'\n            );\n             protocolHTTPGrp = new Group(\n                createId(),\n                'Services [protocol-HTTP]',\n                'Service created for HTTP protocol'\n            );\n             protocolFTPGrp = new Group(createId(), 'Services [protocol-FTP]', 'Service created for FTP protocol');\n          }\n           if (name === 'Identitie') {\n             unregisteredGrp = new Group(\n                          createId(),\n                          'Identities[Unregistered]',\n                          'Identities that are not registered'\n              );\n           }\n            const abcdGrp = new Group(createId(), name + 's [A-D]', name +' name starts with A to D');\n            const efghGrp = new Group(createId(), name + 's [E-H]', name +' name starts with E to H');\n            const ijklGrp = new Group(createId(), name + 's [I-L]', name +' name starts with I to L');\n            const mnopGrp = new Group(createId(), name + 's [M-P]', name +' name starts with M to P');\n            const qrstGrp = new Group(createId(), name + 's [Q-T]', name +' name starts with Q to T');\n            const uvwxGrp = new Group(createId(), name + 's [U-X]', name +' name starts with U to X');\n            const yzGrp = new Group(createId(),   name + 's [Y-Z]', name +' name starts with Y and Z');\n            const oneTo9Grp = new Group(createId(), name + 's [1-9]', name +' name starts with 0 to 9');\n            const specialCharGrp = new Group(\n                createId(),\n                name + 's [others]',\n                name + ' name starts with special characters'\n            );\n\n            for (let i = 0; i < objectsArray.length; i++) {\n                const obj = objectsArray[i];\n                const cha = obj.name.charAt(0).toLowerCase();\n                if (name === 'Identitie' && obj.status === 'Not Registered') {\n                    unregisteredGrp.children.push(obj);\n                } else if (name === 'Service' && obj.protocol === 'rdp') {\n                    protocolRDPGrp.children.push(obj);\n                } else if (name === 'Service' && obj.protocol === 'https') {\n                    protocolHTTPSGrp.children.push(obj);\n                } else if (name === 'Service' && obj.protocol === 'http') {\n                    protocolHTTPGrp.children.push(obj);\n                } else if (name === 'Service' &&  obj.protocol === 'ftp') {\n                    protocolFTPGrp.children.push(obj);\n                } else if (cha === 'a' || cha === 'b' || cha === 'c' || cha === 'd') {\n                    abcdGrp.children.push(obj);\n                } else if (cha === 'e' || cha === 'f' || cha === 'g' || cha === 'h') {\n                    efghGrp.children.push(obj);\n                } else if (cha === 'i' || cha === 'j' || cha === 'k' || cha === 'l') {\n                    ijklGrp.children.push(obj);\n                } else if (cha === 'm' || cha === 'n' || cha === 'o' || cha === 'p') {\n                    mnopGrp.children.push(obj);\n                } else if (cha === 'q' || cha === 'r' || cha === 's' || cha === 't') {\n                    qrstGrp.children.push(obj);\n                } else if (cha === 'u' || cha === 'v' || cha === 'w' || cha === 'x') {\n                    uvwxGrp.children.push(obj);\n                } else if (cha === 'y' || cha === 'z') {\n                    yzGrp.children.push(obj);\n                } else if (\n                    cha === '0' ||\n                    cha === '1' ||\n                    cha === '2' ||\n                    cha === '3' ||\n                    cha === '4' ||\n                    cha === '5' ||\n                    cha === '6' ||\n                    cha === '7' ||\n                    cha === '8' ||\n                    cha === '9'\n                ) {\n                    oneTo9Grp.children.push(obj);\n                } else {\n                    specialCharGrp.children.push(obj);\n                }\n            } // end main for loop\n\n          if (name === 'Service') {\n            if (protocolRDPGrp.children.length > 0) {\n                protocolRDPGrp.children.sort(function (a, b) {\n                    return a.name.localeCompare(b.name);\n                });\n                protocolRDPGrp.name = protocolRDPGrp.name + '(' + protocolRDPGrp.children.length + ')';\n                children.children.push(protocolRDPGrp);\n            }\n            if (protocolHTTPSGrp.children.length > 0) {\n                protocolHTTPSGrp.children.sort(function (a, b) {\n                    return a.name.localeCompare(b.name);\n                });\n                protocolHTTPSGrp.name = protocolHTTPSGrp.name + '(' + protocolHTTPSGrp.children.length + ')';\n                children.children.push(protocolHTTPSGrp);\n            }\n            if (protocolHTTPGrp.children.length > 0) {\n                protocolHTTPGrp.children.sort(function (a, b) {\n                    return a.name.localeCompare(b.name);\n                });\n                protocolHTTPGrp.name = protocolHTTPGrp.name + '(' + protocolHTTPGrp.children.length + ')';\n                children.children.push(protocolHTTPGrp);\n            }\n            if (protocolFTPGrp.children.length > 0) {\n                protocolFTPGrp.children.sort(function (a, b) {\n                    return a.name.localeCompare(b.name);\n                });\n                protocolFTPGrp.name = protocolFTPGrp.name + '(' + protocolFTPGrp.children.length + ')';\n                children.children.push(protocolFTPGrp);\n            }\n          }\n            if (name === 'Identitie' && unregisteredGrp.children.length > 0) {\n                unregisteredGrp.name = unregisteredGrp.name + '(' + unregisteredGrp.children.length + ')';\n                children.children.push(unregisteredGrp);\n                subGrouping(name, unregisteredGrp);\n            }\n            if (specialCharGrp.children.length > 0) {\n                specialCharGrp.name = specialCharGrp.name + '(' + specialCharGrp.children.length + ')';\n                children.children.push(specialCharGrp);\n                subGrouping(name, specialCharGrp);\n            }\n            if (abcdGrp.children.length > 0) {\n                abcdGrp.name = abcdGrp.name + '(' + abcdGrp.children.length + ')';\n                children.children.push(abcdGrp);\n                subGrouping(name, abcdGrp);\n            }\n            if (efghGrp.children.length > 0) {\n                efghGrp.name = efghGrp.name + '(' + efghGrp.children.length + ')';\n                children.children.push(efghGrp);\n                subGrouping(name, efghGrp);\n            }\n            if (ijklGrp.children.length > 0) {\n                ijklGrp.name = ijklGrp.name + '(' + ijklGrp.children.length + ')';\n                children.children.push(ijklGrp);\n                subGrouping(name, ijklGrp);\n            }\n            if (mnopGrp.children.length > 0) {\n                mnopGrp.name = mnopGrp.name + '(' + mnopGrp.children.length + ')';\n                children.children.push(mnopGrp);\n                subGrouping(name, mnopGrp);\n            }\n            if (qrstGrp.children.length > 0) {\n                qrstGrp.name = qrstGrp.name + '(' + qrstGrp.children.length + ')';\n                children.children.push(qrstGrp);\n                subGrouping(name, qrstGrp);\n            }\n            if (uvwxGrp.children.length > 0) {\n                uvwxGrp.name = uvwxGrp.name + '(' + uvwxGrp.children.length + ')';\n                children.children.push(uvwxGrp);\n                subGrouping(name, uvwxGrp);\n            }\n            if (yzGrp.children.length > 0) {\n                yzGrp.name = yzGrp.name + '(' + yzGrp.children.length + ')';\n                children.children.push(yzGrp);\n                subGrouping(name, yzGrp);\n            }\n            if (oneTo9Grp.children.length > 0) {\n                oneTo9Grp.name = oneTo9Grp.name + '(' + oneTo9Grp.children.length + ')';\n                children.children.push(oneTo9Grp);\n                subGrouping(name, oneTo9Grp);\n            }\n            return children;\n        }\n\n        function processServicePoliciesForTree(\n            servicePolicyChildren,\n            servicePolicies,\n            nx,\n            ny\n        ) {\n          if(args[0]===false) return servicePolicyChildren;\n\n          const bindGrp = new Group(createId(), 'Bind-Policies', 'Bind Service Policy');\n          const dialGrp = new Group(createId(), 'Dial-Policies', 'Dial Service Policy');\n\n          servicePolicies.forEach( (sp) => {\n            const spolicy = new ServicePolicy();\n                spolicy.id = createId();\n                spolicy.uuid = sp.id;\n                spolicy.name = sp.name;\n                spolicy.type = 'Service Policy';\n                spolicy.rootNode = 'Yes';\n                if(sp.type==='Bind') {\n                  bindGrp.children.push(spolicy);\n                } else {\n                  dialGrp.children.push(spolicy);\n                }\n          } );\n\n           bindGrp.name = bindGrp.name + '('+ bindGrp.children.length +')';\n           servicePolicyChildren.children.push(bindGrp);\n           subGrouping('Bind-Policie', bindGrp);\n           dialGrp.name = dialGrp.name + '('+ dialGrp.children.length +')';\n           servicePolicyChildren.children.push(dialGrp);\n           subGrouping('Dial-Policie', dialGrp);\n          return servicePolicyChildren;\n        }\n\n        function processServicesForTree(\n            servicesChildren,\n            services,\n            nx,\n            ny\n        ) {\n          if(args[1]===false) return servicesChildren;\n            const servicestree = [];\n            for (let i = nx; i < ny; i++) {\n                const serviceobj = new Service();\n                serviceobj.id = createId();\n                serviceobj.name = services[i].name;\n                serviceobj.uuid = services[i].id;\n                serviceobj.type = 'Service';\n                serviceobj.rootNode = 'Yes';\n\n                const attributeswithName = [];\n                attributeswithName.push('@' + services[i].name);\n                services[i] && services[i].roleAttributes && services[i].roleAttributes.find((srattr) => {\n                    attributeswithName.push(srattr);\n                });\n\n                let isItRDPProtocolAttr = false;\n                let isItHTTPProtocolAttr = false;\n                let isItHTTPSProtocolAttr = false;\n                let isItFTPProtocolAttr = false;\n\n                for (let k = 0; k < attributeswithName.length; k++) {\n                    const attrOb = new Attribute();\n                    attrOb.id = createId();\n                    attrOb.name = attributeswithName[k];\n                    attrOb.type = 'Service Attribute';\n                    const attName = attributeswithName[k].toLowerCase();\n                    if (isItRDPProtocolAttr === false && attName.includes('rdp')) {\n                        serviceobj.protocol = 'rdp';\n                        isItRDPProtocolAttr = true;\n                    }\n                    if (isItHTTPSProtocolAttr === false && attName.includes('https')) {\n                        serviceobj.protocol = 'https';\n                        isItHTTPSProtocolAttr = true;\n                    }\n                    if (isItHTTPSProtocolAttr === false && isItHTTPProtocolAttr === false && attName.includes('http')) {\n                        serviceobj.protocol = 'http';\n                        isItHTTPProtocolAttr = true;\n                    }\n                    if (isItFTPProtocolAttr === false && attName.includes('ftp')) {\n                        serviceobj.protocol = 'ftp';\n                        isItFTPProtocolAttr = true;\n                    }\n                } // end inner for loop\n                servicestree.push(serviceobj);\n            } // end for loop\n            return grouping('Service', servicesChildren, servicestree);\n        } // end of processServicesForTree\n\n        function processEdgeRouterPoliciesForTree(\n            edgeRouterPoliciesChildren,\n            edgeRouterPolicies,\n            nx,\n            ny\n        ) {\n          if(args[4]===false) return edgeRouterPoliciesChildren;\n          const policies_Array = [];\n            for (let i = nx; i < ny; i++) {\n                const erpolicy = new ERPolicy();\n                erpolicy.id = createId();\n                erpolicy.uuid = edgeRouterPolicies[i].id;\n                erpolicy.name = edgeRouterPolicies[i].name;\n                erpolicy.type = 'Edge Router Policy';\n                erpolicy.rootNode = 'Yes';\n                erpolicy.isSystem = edgeRouterPolicies[i].isSystem;\n                erpolicy.semantic = edgeRouterPolicies[i].semantic;\n                policies_Array.push(erpolicy);\n            } // end of main for loop\n            return grouping('Edge Router Policies',edgeRouterPoliciesChildren,policies_Array);\n        } // end\n\n        function processServiceEdgeRouterPoliciesForTree(\n            serviceEdgeRouterPoliciesChildren,\n            serviceEdgeRouterPolicies,\n            nx,\n            ny\n        ) {\n        if(args[5]===false) return serviceEdgeRouterPoliciesChildren;\n            for (let i = nx; i < ny; i++) {\n                const serviceerpolicy = new ServiceERPolicy();\n                serviceerpolicy.id = createId();\n                serviceerpolicy.uuid = serviceEdgeRouterPolicies[i].id;\n                serviceerpolicy.name = serviceEdgeRouterPolicies[i].name;\n                serviceerpolicy.type = 'Service Router Policy';\n                serviceerpolicy.rootNode = 'Yes';\n                serviceEdgeRouterPoliciesChildren.children.push(serviceerpolicy);\n            } // end of main for loop\n            return serviceEdgeRouterPoliciesChildren;\n        } // end\n\n        function processEdgeRoutersForTree(\n            routersChildren,\n            edgerouters,\n            nx,\n            ny\n        ) {\n        if(args[3]===false) return routersChildren;\n\n            const er_objects = [];\n            for (let i = nx; i < ny; i++) {\n                const erOb = new ERouter();\n                erOb.id = createId();\n                const er = edgerouters[i];\n                if (er) {\n                    erOb.uuid = er.id;\n                    erOb.name = er.name;\n                    erOb.verified = er.isVerified? 'Yes': 'No';\n                    //erOb.version = er.productVersion;\n                    erOb.online = er.isOnline? 'Yes': 'No';\n                    erOb.disabled = er.disabled? 'Yes': 'No';\n                    erOb.type = 'Edge Router';\n                    erOb.rootNode = 'Yes';\n                    erOb.tunnelerEnabled = er.tunnelerEnabled? er.tunnelerEnabled: 'No';\n                    erOb.syncStatus = er.syncStatus? er.syncStatus:'No';\n                    erOb.createdAt = er.createdAt;\n                    erOb.updatedAt = er.updatedAt;\n                    er_objects.push(erOb);\n                }\n            } // end main for loop\n           // return routersChildren;\n           return grouping('Edge Router', routersChildren, er_objects);\n        }\n\n        // createId() generates node Id 1,2,3,4,5 for the following five nodes. this id is used to search capability.\n        let servicPoliciesChildren = new Children();\n        servicPoliciesChildren.id = createId();\n        servicPoliciesChildren.firstChild = 'Yes';\n        servicPoliciesChildren.name = 'Service Policies('+ service_policies_totalCount +')';\n\n        let servicesChildren = new Children();\n        servicesChildren.id = createId();\n        servicesChildren.firstChild = 'Yes';\n        servicesChildren.name = 'Services('+ services_totalCount +')';\n\n        let identitiesChildren = new Children();\n        identitiesChildren.id = createId();\n        identitiesChildren.firstChild = 'Yes';\n        identitiesChildren.name = 'Identities('+ identities_totalCount +')';\n\n        let edgerouterChildren = new Children();\n        edgerouterChildren.id = createId();\n        edgerouterChildren.firstChild = 'Yes';\n        edgerouterChildren.name = 'Edge Routers('+ edgerouters_totalCount +')';\n\n        let edgeRouterPoliciesChildren = new Children();\n        edgeRouterPoliciesChildren.id = createId();\n        edgeRouterPoliciesChildren.firstChild = 'Yes';\n        edgeRouterPoliciesChildren.name = 'Edge Router Policies('+ edge_router_policies_totalCount +')';\n\n        let serviceEdgeRouterPolicesChildren = new Children();\n        serviceEdgeRouterPolicesChildren.id = createId();\n        serviceEdgeRouterPolicesChildren.firstChild = 'Yes';\n        serviceEdgeRouterPolicesChildren.name = 'Service Edge Router Policies('+ service_router_policies_totalCount +')';\n\n        servicesChildren = processServicesForTree(\n            servicesChildren,\n            services,\n            0,\n            services.length\n        );\n\n        edgerouterChildren = processEdgeRoutersForTree(\n            edgerouterChildren,\n            edgerouters,\n            0,\n            edgerouters.length\n        );\n\n        servicPoliciesChildren = processServicePoliciesForTree(\n            servicPoliciesChildren,\n            servicePolicies,\n            0,\n            servicePolicies.length\n        );\n\n        edgeRouterPoliciesChildren = processEdgeRouterPoliciesForTree(\n            edgeRouterPoliciesChildren,\n            edgeRouterPolicies,\n            0,\n            edgeRouterPolicies.length\n        );\n\n        identitiesChildren = processIdentitiesForTree(\n            identitiesChildren,\n            identities,\n            0,\n            identities.length\n        );\n        //serviceRouterPolicies\n        serviceEdgeRouterPolicesChildren = processServiceEdgeRouterPoliciesForTree(\n            serviceEdgeRouterPolicesChildren,\n            serviceEdgeRouterPolicies,\n            0,\n            serviceEdgeRouterPolicies.length\n        );\n\n        rootJson.children.push(servicPoliciesChildren);\n        rootJson.children.push(servicesChildren);\n        rootJson.children.push(identitiesChildren);\n        rootJson.children.push(edgerouterChildren);\n        rootJson.children.push(edgeRouterPoliciesChildren);\n        rootJson.children.push(serviceEdgeRouterPolicesChildren);\n        rootJson.lastId = uniqId;\n\n        return rootJson;\n    }\n\n}\n","import { Injectable } from '@angular/core';\nimport * as d3 from 'd3';\nimport _ from 'lodash';\nimport { ServicePolicy, Attribute, Children, Identity, ERouter, ERPolicy, Group, Service, Config } from './network-visualizer.helper';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class TreeNodeProcessor {\n    uniqId = 0;\n    getPagingObject(pagesize) {\n      const paging = {\n        searchOn: 'name',\n        noSearch: false,\n        filter: '',\n        total: pagesize,\n        page: 1,\n        sort: 'name',\n        order: 'asc',\n      };\n      return  paging;\n    }\n\n    async processIdentitiesForNodeClick(\n        identityNode,\n        networkGraph,\n        rawEndpoints,\n        uniqId,\n        zitiService,\n        configs\n    ) {\n    const myPromise = await new Promise( async (resolve, reject) => {\n       const wait_promises = [];\n        this.uniqId = uniqId;\n        const rawEp = this.findRawEndpoint(identityNode.data.name, rawEndpoints);\n        let rawEpAttributes = [];\n        if (rawEp.roleAttributes) {rawEpAttributes = rawEp.roleAttributes};\n\n        for (let i = 0; i < rawEpAttributes.length; i++) {\n          const attribute = new Attribute();\n              attribute.id = this.createId();\n              attribute.name = rawEpAttributes[i];\n              attribute.type = 'Identity Attribute';\n              identityNode.data.children.push(attribute);\n        }\n\n      const bindServices = new Children();\n      const dialServices = new Children();\n      bindServices.id = this.createId();\n      dialServices.id = this.createId();\n      let identityServicePolicies = [];\n      const pagesize = 500;\n    // fetch associated routers\n      const url = this.getLinkForResource(rawEp, 'edge-routers').replace('./', '');\n      let associatedRouters = [];\n      const paging = this.getPagingObject(pagesize);\n      const erChailds = new Children();\n        erChailds.id = this.createId();\n        erChailds.name= 'Associated Edge Routers';\n        erChailds.type= 'Edge Routers';\n      const associatedRoutersPromise =  await zitiService.get(url, paging, [])\n           .then( (result) => {\n             result.data.forEach( (re) => {\n               const tmp = new ERouter();\n                   tmp.id = this.createId();\n                   tmp.name = re.name;\n                   tmp.type = 'Edge Router';\n                   erChailds.children.push(tmp);\n             } );\n      });\n\n      const policies_url = this.getLinkForResource(rawEp, 'service-policies').replace('./', '');\n      const policies_paging = this.getPagingObject(pagesize);\n      const firstPromise =  await zitiService\n              .get(policies_url, policies_paging, [])\n              .then((result) => {\n                identityServicePolicies = result.data;\n               });\n\n        const promises = [];\n        identityServicePolicies.forEach( (sp) => {\n             const nodeArray =  this.getServicesForAServicePolicy(sp, zitiService, 500);\n             promises.push(nodeArray);\n        });\n\n        await Promise.all(promises).then( (nodeArray) => {\n             nodeArray.forEach( (arOb) => {\n              if(arOb[0] === 'Bind' ) {\n                 bindServices.children = this.arrayObjectCopyRightToLeft(bindServices.children, arOb[1]);\n              } else {\n                 dialServices.children = this.arrayObjectCopyRightToLeft(dialServices.children, arOb[1]);\n              }\n             } );\n        });\n\n      Promise.all(wait_promises).then( () => {\n        if (erChailds.children.length >0 ) {\n             erChailds.name = erChailds.name+'('+erChailds.children.length+')';\n             identityNode.data.children.push(erChailds);\n        }\n        if(bindServices.children.length>0) {\n              bindServices.name = 'Bind-Services('+bindServices.children.length+')';\n              identityNode.data.children.push(bindServices);\n        }\n        if(dialServices.children.length>0) {\n              dialServices.name = 'Dial-Services('+dialServices.children.length+')';\n              identityNode.data.children.push(dialServices);\n        }\n        resolve('this is a promise');\n      });\n\n    });\n\n     networkGraph = d3.hierarchy(networkGraph.data, function (nd) {\n          return nd.children;\n     });\n         return [networkGraph, this.uniqId];\n    } // end of function\n\n    createId() {\n        ++this.uniqId;\n        return this.uniqId;\n    }\n\n   createServiceNode( sr) {\n        const serviceOb = new Service();\n         serviceOb.id = this.createId();\n         serviceOb.uuid = sr.id;\n         serviceOb.name = sr.name;\n         serviceOb.type = 'Service';\n       return serviceOb;\n   }\n\n   arrayObjectCopyRightToLeft(leftArr,rightArr) {\n     const leftArrIds = [];\n     leftArr.forEach( (ob) => {\n       leftArrIds.push(ob.id);\n     } );\n\n     rightArr.forEach( (ob) => {\n      if (!leftArr.includes(ob.id)) {\n           leftArr.push(ob);\n      }\n     } );\n\n    return leftArr;\n   }\n\n  addItemToArray(Idnetities, ob) {\n    if ( ob.name && !Idnetities.find((item) => item.uuid === ob.id)) {\n      Idnetities.push(this.createIdentity(ob));\n    }\n    return Idnetities;\n  }\n  createIdentity(ob) {\n      const endpoint = new Identity();\n       endpoint.id = this.createId();\n       endpoint.uuid = ob.id;\n       endpoint.name = ob.name;\n       endpoint.online = ob.hasApiSession === true ? 'Yes': 'No';\n       endpoint.type = 'Identity';\n       endpoint.status = ob.sdkInfo !== null ? 'Registered': 'Not Registered';\n       if (ob.sdkInfo) {\n           endpoint.os = ob.sdkInfo.type? ob.sdkInfo.type: ob.sdkInfo.appId;\n           endpoint.osVersion = ob.sdkInfo.version;\n       }\n       if (ob.authPolicy && ob.authPolicy.name.includes(\"BrowZer\")) {\n           endpoint.type = 'BrowZer Identity';\n       }\n       endpoint.createdAt = ob.createdAt;\n       endpoint.updatedAt = ob.updatedAt;\n\n     return endpoint;\n  }\n  getLinkForResource(ob, resource) {\n    return ob['_links'][resource]['href'];\n  }\n\n    findServicesHostedOnEndpoint(rawEp, services, servicePolicies, zitiService) {\n       const servicesArr = [];\n        const childrenNoGroups = [];\n        const endpointAttr = rawEp.roleAttributes? rawEp.roleAttributes: [];\n        endpointAttr.push('@'+rawEp.id);\n\n        let dialServiceAttrs = [];\n        let bindServiceAttrs = [];\n\n        const bindPolicies = new Children();\n           bindPolicies.name = 'Bind-Policies';\n        const dialPolicies = new Children();\n            dialPolicies.name = 'Dial-Policies';\n\n        bindPolicies.id = this.createId();\n        dialPolicies.id = this.createId();\n\n        servicePolicies.find( (sp) => {\n          sp.identityRoles.find( (attr) => {\n              if (endpointAttr.includes(attr) ) {\n               if (sp.type === 'Bind') {\n                   const sPolicy = new ServicePolicy();\n                         sPolicy.id = this.createId();\n                         sPolicy.name = sp.name;\n                         sPolicy.type = sp.type;\n                         sPolicy.children = this.getServicesForPolicy(services, sp);\n                   bindPolicies.children.push(sp);\n                   bindServiceAttrs = fillArray(bindServiceAttrs, sp.serviceRoles);\n               } else {\n                 const sPolicy = new ServicePolicy();\n                     sPolicy.id = this.createId();\n                     sPolicy.name = sp.name;\n                     sPolicy.type = sp.type;\n                     sPolicy.children = this.getServicesForPolicy(services, sp) ;\n                 dialPolicies.children.push(sPolicy);\n                dialServiceAttrs = fillArray(dialServiceAttrs, sp.serviceRoles);\n               }\n              }\n          });\n        } );\n\n        function fillArray(arr1, arr2) {\n          arr2.forEach( (item) => {\n           arr1.push(item);\n          } );\n          return arr1;\n        }\n\n        const bindServices = [];\n        const dialServices = [];\n\n        services && services.forEach( (sr) => {\n          sr.roleAttributes && sr.roleAttributes.forEach( (attr) => {\n             if (dialServiceAttrs.includes(attr) ) {\n               dialServices.push(this.createServiceNode(sr) );\n             }\n             if (bindServiceAttrs.includes(attr) ) {\n                bindServices.push( this.createServiceNode(sr) );\n             }\n          } );\n        });\n       if (dialServices.length >0 ) {\n          const dialGroup = new Children();\n          dialGroup.id = this.createId();\n          dialGroup.name = 'Services-Dial';\n          dialGroup.children = dialServices;\n          servicesArr.push(dialGroup);\n       }\n       if (bindServices.length >0 ) {\n            const bindGroup = new Children();\n            bindGroup.id = this.createId();\n            bindGroup.name = 'Services-Bind';\n            bindGroup.children = bindServices;\n            servicesArr.push(bindGroup);\n       }\n     return servicesArr;\n\n\n    } // end of find servicesHostedOnEndpoint\n\n   getServicesForPolicy(services, spOb) {\n     const servicesFotPolicy = [];\n     services && services.forEach( (sr) => {\n         const attrs = sr.roleAttributes ? sr.roleAttributes: [];\n         attrs.push('@'+spOb.id);\n         attrs.find( (atr) => {\n            if(spOb.serviceRoles.includes(atr) ){\n               const serviceNode = new Service();\n               serviceNode.id = this.createId();\n               serviceNode.name = sr.name;\n               serviceNode.type = 'Service';\n             servicesFotPolicy.push(serviceNode);\n            }\n         });\n     });\n    return servicesFotPolicy;\n   }\n\n    findRawEndpoint(epName, endpoints) {\n       return endpoints.find((ep) => ep.name === epName);\n    }\n\n  serviceConfigAlias(configs) {\n     let intercept = [];\n     _.isArray(configs) && configs.forEach( (conf) => {\n           let addresses = '';\n           let ports = '';\n          if (conf.data.addresses) {\n             addresses = conf.data.addresses.toString();\n          } else {\n             addresses = conf.data.address;\n          }\n\n          if (_.isArray(conf.data.portRanges) ) {\n              conf.data.portRanges.forEach( (portsJson) => {\n               for (const key in portsJson) {\n                  ports = ports + key +':'+portsJson[key] +' ' ;\n               }\n                 ports = ports + ';';\n             });\n          } else {\n              ports =  conf.data.port;\n          }\n          intercept.push(addresses);\n          intercept.push(ports);\n     });\n     return intercept;\n  }\n\n  async processServicesForNodeClick(serviceNode, networkGraph, services, uniqId, zitiService) {\n     const myPromise = await new Promise( async (resolve, reject) => {\n        const wait_promises = [];\n        this.uniqId = uniqId;\n        const rawServiceObj = services.find((s) => s.name === serviceNode.data.name);\n        const attributeswithName = [];\n\n        rawServiceObj.roleAttributes && rawServiceObj.roleAttributes.find((srattr) => {\n            attributeswithName.push(srattr);\n        });\n        const serviceAttributes = new Children();\n        serviceAttributes.name = 'Attributes';\n        serviceAttributes.type = 'Attributes';\n        serviceAttributes.id = this.createId();\n        for (let k = 0; k < attributeswithName.length; k++) {\n            const attrOb = new Attribute();\n            attrOb.id = this.createId();\n            attrOb.name = attributeswithName[k];\n            attrOb.type = 'Attribute';\n\n            serviceAttributes.children.push(attrOb);\n        } // end inner for loop\n        if (serviceAttributes.children.length >0 ) {\n           serviceAttributes.name = serviceAttributes.name+'('+ serviceAttributes.children.length + ')';\n           serviceNode.data.children.push(serviceAttributes);\n        }\n\n        let service_configs = [];\n        const configs_url = this.getLinkForResource(rawServiceObj, 'configs');\n        const pagesize = 500;\n        const pagingOb = this.getPagingObject(pagesize);\n        const configPromise = await zitiService\n         .get(configs_url, pagingOb, [])\n         .then((configs) => {\n           service_configs = configs && configs.data ? configs.data : [];\n           const childs = new Children();\n           childs.id = this.createId();\n           childs.name = 'Service Configs';\n           childs.type = 'Service Configs';\n           const service_configs_Arr = [];\n           service_configs.forEach( (cfg) => {\n             const obj = new Config();\n             obj.id = this.createId();\n             obj.name = cfg.name;\n             obj.uuid = cfg.uuid;\n             obj.data = JSON.stringify(cfg.data);\n             service_configs_Arr.push(obj);\n           } );\n\n           if (service_configs_Arr.length >0 ) {\n              childs.children = service_configs_Arr;\n              childs.name = childs.name +'('+childs.children.length + ')';\n              serviceNode.data.children.push(childs);\n              serviceNode.data.intercept = this.serviceConfigAlias(service_configs);\n           }\n        });\n\n       wait_promises.push(configPromise);\n       const service_edge_router_policies_url = this.getLinkForResource(\n         rawServiceObj,\n        'service-edge-router-policies'\n       );\n       let service_routers_urls = [];\n       const ser_promse =  await zitiService\n             .get(service_edge_router_policies_url.replace('./', ''), pagingOb, [])\n             .then( (result) => {\n                  result.data.forEach( (serp) => {\n                    service_routers_urls.push( this.getLinkForResource(serp,'edge-routers') );\n                  } );;\n             });\n       wait_promises.push(ser_promse);\n       let serp_page_Promises = [];\n       service_routers_urls.forEach((er_url) => {\n          const promse =  zitiService\n                .get(er_url.replace('./', ''), pagingOb, []);\n                // .then(result => [policy.type, result]);\n          serp_page_Promises.push(promse);\n       });\n       let associatedRouters = [];\n       await Promise.all(serp_page_Promises).then( (values:any) => {\n         values && values.forEach((res:any) => {\n             if (res && res.data.length > 0) {\n                res.data.forEach( (er)=> {\n                  const erOb = new ERouter();\n                        erOb.id = this.createId();\n                        erOb.name =   er.name;\n                        er.type = 'Edge Router';\n                  associatedRouters.push(erOb);\n                });\n             }\n         })\n         const tmp = new Children();\n             tmp.name = \"Associated Edge Routers(\" + associatedRouters.length +')';\n             tmp.type = \"Edge Routers\";\n             tmp.children = associatedRouters;\n             tmp.id = this.createId();\n             serviceNode.data.children.push(tmp);\n       });\n\n       const service_policies_url = this.getLinkForResource(\n        rawServiceObj,\n        'service-policies'\n       ).replace('./', ''); // dial, Bind info\n\n       let bindPolicies = [];\n       let bindIdnetities = [];\n       let dialIdnetities = [];\n\n       const promise2 = await zitiService\n       .get(service_policies_url, pagingOb, [])\n       .then((policies) => {\n         bindPolicies = policies.data;\n      });\n\n      const pagePromises = [];\n      bindPolicies.forEach(  (policy) => {\n         const bindIdentitiesUrl = this.getLinkForResource(\n            policy,\n            'identities'\n          );\n          const promse =  zitiService\n                .get(bindIdentitiesUrl.replace('./', ''), pagingOb, [])\n                .then(result => [policy.type, result]);\n          pagePromises.push(promse);\n      });\n      await Promise.all(pagePromises).then( (values:any) => {\n          values && values.forEach((res:any) => {\n           if (res && res[1].data.length > 0) {\n              res[1].data.forEach((rs) => {\n                if(res[0] === 'Bind') {\n                 bindIdnetities = this.addItemToArray(bindIdnetities, rs);\n                } else if(res[0] === 'Dial'){\n                 dialIdnetities = this.addItemToArray(dialIdnetities, rs);\n                }\n              });\n           } else {\n               if(res[0] === 'Bind') {\n                 bindIdnetities = this.addItemToArray(bindIdnetities, res[1].data);\n               } else if(res[0] === 'Dial'){\n                 dialIdnetities = this.addItemToArray(dialIdnetities, res[1].data);\n               }\n           }\n\n          });\n\n           const tmp = new Children();\n             tmp.name = \"Bind Identities(\" + bindIdnetities.length +')';\n             tmp.type = \"Identities\";\n             tmp.children = bindIdnetities;\n             tmp.id = this.createId();\n             serviceNode.data.children.push(tmp);\n           const tmpDial = new Children();\n             tmpDial.name = \"Dial Identities(\" + dialIdnetities.length +')';\n             tmpDial.type = \"Identities\";\n             tmpDial.children = dialIdnetities;\n             tmpDial.id = this.createId();\n             serviceNode.data.children.push(tmpDial);\n         resolve('this is a promise');\n      });\n       Promise.all(wait_promises).then( () => { });\n    }); // end of mypromise\n\n     networkGraph = d3.hierarchy(networkGraph.data, function (nd) {\n        return nd.children;\n     });\n      return [networkGraph, this.uniqId];\n  } // end of processServicesForNodeClick\n\n\n  async processServicePoliciesForNodeClick(policyNode, networkGraph,  servicePolicies, uniqId, zitiService) {\n     const myPromise = await new Promise( async (resolve, reject) => {\n        const wait_promises = [];\n        this.uniqId = uniqId;\n        const rawSPolicy = servicePolicies.find((s) => s.name === policyNode.data.name);\n        const childs = new Children();\n         childs.name = \"Attributes\";\n         childs.id = this.createId();\n\n        rawSPolicy.serviceRoles && rawSPolicy.serviceRoles.forEach( (ob) => {\n          const attr = new Attribute();\n            attr.name = ob;\n            attr.id = this.createId();\n            attr.type = \"Service Attribute\";\n          childs.children.push(attr);\n        });\n        rawSPolicy.identityRoles && rawSPolicy.identityRoles.forEach( (ob) => {\n          const attr = new Attribute();\n           attr.name = ob;\n           attr.id = this.createId();\n           attr.type = \"Identity Attribute\";\n          childs.children.push(attr);\n        });\n        childs.name = childs.name + '('+ childs.children.length + ')';\n         policyNode.data.children.push(childs);\n\n        const pagesize = 500;\n        const identities_paging = this.getPagingObject(pagesize);\n        const bindIdentitiesUrl = this.getLinkForResource( rawSPolicy, 'identities' );\n        // this.logger.info('bindIdentitiesUrl',bindIdentitiesUrl);\n        const sp_promise = await zitiService.get(bindIdentitiesUrl, identities_paging, [])\n       .then((ids) => {\n         const childs =new Children()\n         childs.name = rawSPolicy.type+ '-Identities';\n         childs.id = this.createId();\n         ids.data.forEach( (idOb) => {\n           childs.children.push(this.createIdentity(idOb) );\n         });\n         childs.name = childs.name + '(' + childs.children.length+')';\n         policyNode.data.children.push(childs);\n       });\n       wait_promises.push(sp_promise);\n\n       const services_paging = this.getPagingObject(pagesize);\n       const bindServicesUrl = this.getLinkForResource( rawSPolicy, 'services' );  // pull services\n       const _promise = await zitiService.get(bindServicesUrl, services_paging, [])\n       .then((result) => {\n         const childs =new Children()\n         childs.name = rawSPolicy.type+ '-Services';\n         childs.id = this.createId();\n         result.data.forEach( (idOb) => {\n           const sp = new Service();\n            sp.id = idOb.id;\n            sp.name = idOb.name;\n            sp.type = 'Service';\n            childs.children.push(sp);\n         });\n         childs.name = childs.name + '(' + childs.children.length+')';\n         policyNode.data.children.push(childs);\n       });\n\n       wait_promises.push(_promise);\n\n        Promise.all(wait_promises).then( () => {\n           resolve('resolve.');\n        });\n\n     }); // end mypromise\n        networkGraph = d3.hierarchy(networkGraph.data, function (nd) {\n            return nd.children;\n        });\n        return [networkGraph, this.uniqId];\n    }\n\n   async getServicesForAServicePolicy(policyObject, zitiService, pagesize=500) {\n       const childs = [];\n       const services_paging = this.getPagingObject(pagesize);\n       const bindServicesUrl = this.getLinkForResource( policyObject, 'services' );\n       const _promise = await zitiService.get(bindServicesUrl, services_paging, [])\n       .then((result) => {\n         result.data.forEach( (idOb) => {\n           const sp = new Service();\n            sp.id = this.createId();\n            sp.uuid = idOb.id;\n            sp.name = idOb.name;\n            sp.type = 'Service';\n            childs.push(sp);\n         });\n       });\n       return [policyObject.type, childs];\n   }\n\n   async processEdgeroutersForNodeClick(\n        edgerouterNode,\n        networkGraph,\n        edgerouters,\n        uniqId,\n        zitiService\n    )\n    {\n     const mainPromise = await new Promise( async (resolve, reject) => {\n        const wait_promises = [];\n        this.uniqId = uniqId;\n        const er = edgerouters.find((s) => s.name === edgerouterNode.data.name);\n        const erAttributes = er.roleAttributes? er.roleAttributes: [];\n\n         erAttributes.find((attr) => {\n            const att = new Attribute();\n            att.id = this.createId();\n            att.name = attr;\n            att.type = 'Edge Router Attribute';\n            edgerouterNode.data.children.push(att);\n         });\n          const pagesize = 500;\n          const services_paging = this.getPagingObject(pagesize);\n       const erpoliciesUrl = this.getLinkForResource(er, 'edge-router-policies');\n       let erpoliciesForER = [];\n       const erpoliciespromise = await zitiService.get(erpoliciesUrl, services_paging, [])\n       .then( async (result) => {\n          erpoliciesForER = result.data;\n          const pages = Math.ceil(result.meta.pagination.totalCount / pagesize);\n          const promises = [];\n           for (let page = 2; page <= pages; page++) {\n              services_paging.page = page;\n              const tmp_promise = await zitiService.get(\n                               erpoliciesUrl,\n                               services_paging,\n                               []\n                ) .then((pageResult) => {\n                  pageResult.data.forEach((serv) => {\n                    erpoliciesForER.push(serv);\n                  });\n                });\n              promises.push(tmp_promise);\n              wait_promises.push(tmp_promise);\n           } // end for loop\n           Promise.all(promises).then(() => {\n             const erpolChilds = new Children();\n             erpolChilds.id = this.createId();\n             erpoliciesForER.forEach( (pol) => {\n                const policy = new ERPolicy();\n                policy.id = this.createId();\n                policy.uuid = pol.id;\n                policy.name = pol.name;\n                policy.type = 'Edge Router Policy';\n                policy.isSystem = pol.isSystem;\n                policy.semantic = pol.semantic;\n                policy.rootNode = 'No';\n                erpolChilds.children.push(policy);\n             });\n               erpolChilds.name = \"Edge Router Policies(\"+ erpolChilds.children.length +')';\n               edgerouterNode.data.children.push(erpolChilds);\n           });\n       });\n       wait_promises.push(erpoliciespromise);\n\n       Promise.all(wait_promises).then( () => {\n          resolve('this is a promise');\n       });\n     });\n        networkGraph = d3.hierarchy(networkGraph.data, function (nd) {\n            return nd.children;\n        });\n        return [networkGraph, this.uniqId];\n   }\n\n    serviceGrouping(servicesChildren, servicestree) {\n        const protocolRDPGrp = new Group(\n            this.createId(),\n            'Services [protocol-RDP]',\n            'Services created for RDP protocol'\n        );\n        const protocolHTTPSGrp = new Group(\n            this.createId(),\n            'Services [protocol-HTTPS]',\n            'Service created for HTTPS protocol'\n        );\n        const protocolHTTPGrp = new Group(\n            this.createId(),\n            'Services [protocol-HTTP]',\n            'Service created for HTTP protocol'\n        );\n        const protocolFTPGrp = new Group(\n            this.createId(),\n            'Services [protocol-FTP]',\n            'Service created for FTP protocol'\n        );\n\n        const abcdGrp = new Group(this.createId(), 'Services [A-D]', 'Service name starts with A to D');\n        const efghGrp = new Group(this.createId(), 'Services [E-H]', 'Service name starts with E to H');\n        const ijklGrp = new Group(this.createId(), 'Services [I-L]', 'Service name starts with I to L');\n        const mnopGrp = new Group(this.createId(), 'Services [M-P]', 'Service name starts with M to P');\n        const qrstGrp = new Group(this.createId(), 'Services [G-T]', 'Service name starts with Q to T');\n        const uvwxGrp = new Group(this.createId(), 'Services [U-X]', 'Service name starts with U to X');\n        const yzGrp = new Group(this.createId(), 'Services [Y-Z]', 'Service name starts with Y and Z');\n        const oneTo9Grp = new Group(this.createId(), 'Services [1-9]', 'Service name starts with 0 to 9');\n\n        for (let i = 0; i < servicestree.length; i++) {\n            const serviceobj = servicestree[i];\n            const cha = serviceobj.name.charAt(0).toLowerCase();\n\n            if (serviceobj.protocol === 'rdp') {\n                protocolRDPGrp.children.push(serviceobj);\n            } else if (serviceobj.protocol === 'https') {\n                protocolHTTPSGrp.children.push(serviceobj);\n            } else if (serviceobj.protocol === 'http') {\n                protocolHTTPGrp.children.push(serviceobj);\n            } else if (serviceobj.protocol === 'ftp') {\n                protocolFTPGrp.children.push(serviceobj);\n            } else if (cha === 'a' || cha === 'b' || cha === 'c' || cha === 'd') {\n                abcdGrp.children.push(serviceobj);\n            } else if (cha === 'e' || cha === 'f' || cha === 'g' || cha === 'h') {\n                efghGrp.children.push(serviceobj);\n            } else if (cha === 'i' || cha === 'j' || cha === 'k' || cha === 'l') {\n                ijklGrp.children.push(serviceobj);\n            } else if (cha === 'm' || cha === 'n' || cha === 'o' || cha === 'p') {\n                mnopGrp.children.push(serviceobj);\n            } else if (cha === 'q' || cha === 'r' || cha === 's' || cha === 't') {\n                qrstGrp.children.push(serviceobj);\n            } else if (cha === 'u' || cha === 'v' || cha === 'w' || cha === 'x') {\n                uvwxGrp.children.push(serviceobj);\n            } else if (cha === 'y' || cha === 'z') {\n                yzGrp.children.push(serviceobj);\n            } else if (\n                cha === '0' ||\n                cha === '1' ||\n                cha === '2' ||\n                cha === '3' ||\n                cha === '4' ||\n                cha === '5' ||\n                cha === '6' ||\n                cha === '7' ||\n                cha === '8' ||\n                cha === '9'\n            ) {\n                oneTo9Grp.children.push(serviceobj);\n            }\n        } // end main for loop\n\n        if (protocolRDPGrp.children.length > 0) {\n            protocolRDPGrp.children.sort(function (a, b) {\n                return a.name.localeCompare(b.name);\n            });\n            protocolRDPGrp.name = protocolRDPGrp.name + '(' + protocolRDPGrp.children.length + ')';\n            servicesChildren.children.push(protocolRDPGrp);\n        }\n\n        if (protocolHTTPSGrp.children.length > 0) {\n            protocolHTTPSGrp.children.sort(function (a, b) {\n                return a.name.localeCompare(b.name);\n            });\n            protocolHTTPSGrp.name = protocolHTTPSGrp.name + '(' + protocolHTTPSGrp.children.length + ')';\n            servicesChildren.children.push(protocolHTTPSGrp);\n        }\n        if (protocolHTTPGrp.children.length > 0) {\n            protocolHTTPGrp.children.sort(function (a, b) {\n                return a.name.localeCompare(b.name);\n            });\n            protocolHTTPGrp.name = protocolHTTPGrp.name + '(' + protocolHTTPGrp.children.length + ')';\n            servicesChildren.children.push(protocolHTTPGrp);\n        }\n        if (protocolFTPGrp.children.length > 0) {\n            protocolFTPGrp.children.sort(function (a, b) {\n                return a.name.localeCompare(b.name);\n            });\n            protocolFTPGrp.name = protocolFTPGrp.name + '(' + protocolFTPGrp.children.length + ')';\n            servicesChildren.children.push(protocolFTPGrp);\n        }\n        if (abcdGrp.children.length > 0) {\n            abcdGrp.children.sort(function (a, b) {\n                return a.name.localeCompare(b.name);\n            });\n            abcdGrp.name = abcdGrp.name + '(' + abcdGrp.children.length + ')';\n            servicesChildren.children.push(abcdGrp);\n        }\n        if (efghGrp.children.length > 0) {\n            efghGrp.children.sort(function (a, b) {\n                return a.name.localeCompare(b.name);\n            });\n            efghGrp.name = efghGrp.name + '(' + efghGrp.children.length + ')';\n            servicesChildren.children.push(efghGrp);\n        }\n        if (ijklGrp.children.length > 0) {\n            ijklGrp.children.sort(function (a, b) {\n                return a.name.localeCompare(b.name);\n            });\n            ijklGrp.name = ijklGrp.name + '(' + ijklGrp.children.length + ')';\n            servicesChildren.children.push(ijklGrp);\n        }\n        if (mnopGrp.children.length > 0) {\n            mnopGrp.children.sort(function (a, b) {\n                return a.name.localeCompare(b.name);\n            });\n            mnopGrp.name = mnopGrp.name + '(' + mnopGrp.children.length + ')';\n            servicesChildren.children.push(mnopGrp);\n        }\n        if (qrstGrp.children.length > 0) {\n            qrstGrp.children.sort(function (a, b) {\n                return a.name.localeCompare(b.name);\n            });\n            qrstGrp.name = qrstGrp.name + '(' + qrstGrp.children.length + ')';\n            servicesChildren.children.push(qrstGrp);\n        }\n        if (uvwxGrp.children.length > 0) {\n            uvwxGrp.children.sort(function (a, b) {\n                return a.name.localeCompare(b.name);\n            });\n            uvwxGrp.name = uvwxGrp.name + '(' + uvwxGrp.children.length + ')';\n            servicesChildren.children.push(uvwxGrp);\n        }\n        if (yzGrp.children.length > 0) {\n            yzGrp.children.sort(function (a, b) {\n                return a.name.localeCompare(b.name);\n            });\n            yzGrp.name = yzGrp.name + '(' + yzGrp.children.length + ')';\n            servicesChildren.children.push(yzGrp);\n        }\n        if (oneTo9Grp.children.length > 0) {\n            oneTo9Grp.children.sort(function (a, b) {\n                return a.name.localeCompare(b.name);\n            });\n            oneTo9Grp.name = oneTo9Grp.name + '(' + oneTo9Grp.children.length + ')';\n            servicesChildren.children.push(oneTo9Grp);\n        }\n        servicesChildren.name = servicesChildren.name + '(' + servicestree.length + ')';\n        return servicesChildren;\n    }\n\n    async processEdgeRouterPoliciesForNodeClick(\n        erPolicyNode,\n        networkGraph,\n        edgeRouterPolicies,\n        uniqId,\n        zitiService\n    ) {\n       const myPromise = await new Promise(async (resolve, reject) => {\n          const wait_promises = [];\n          this.uniqId = uniqId;\n          const rawERPolicy = edgeRouterPolicies.find((s) => s.name === erPolicyNode.data.name);\n          const pagesize = 500;\n\n      const er_url = this.getLinkForResource(rawERPolicy, 'edge-routers').replace('./', '');\n      let associatedRouters = [];\n      const paging = this.getPagingObject(pagesize);\n      const erChailds = new Children();\n        erChailds.name= 'Associated Edge Routers';\n        erChailds.type= 'Edge Routers';\n        erChailds.id = this.createId();\n      const associatedRoutersPromise =  await zitiService.get(er_url, paging, [])\n           .then( (result) => {\n             result.data.forEach( (er) => {\n               const tmp = new ERouter();\n                   tmp.id = this.createId();\n                   tmp.name = er.name;\n                   tmp.type = 'Edge Router';\n                   tmp.verified = er.isVerified? 'Yes': 'No';\n                   tmp.online = er.isOnline? 'Yes': 'No';\n                   tmp.disabled = er.disabled? 'Yes': 'No';\n                   tmp.rootNode = 'Yes';\n                   tmp.tunnelerEnabled = er.tunnelerEnabled? er.tunnelerEnabled:'No';\n                   tmp.syncStatus = er.syncStatus? er.syncStatus: 'No';\n                   tmp.createdAt = er.createdAt;\n                   tmp.updatedAt = er.updatedAt;\n                   erChailds.children.push(tmp);\n             } );\n           erChailds.name = erChailds.name +'('+ erChailds.children.length +')';\n           erPolicyNode.data.children.push(erChailds);\n      });\n          wait_promises.push(associatedRoutersPromise);\n\n          const services_paging = this.getPagingObject(pagesize);\n          const url = this.getLinkForResource(rawERPolicy, 'identities');\n          let ids = [];\n          const idpromise = zitiService.get(url, services_paging, [])\n          .then((result) => {\n            ids = result.data;\n            const pages = Math.ceil(result.meta.pagination.totalCount / pagesize);\n            const promises = [];\n            for (let page = 2; page <= pages; page++) {\n              services_paging.page = page;\n              const tmp_promise = zitiService.get(\n                               url,\n                               services_paging,\n                               []\n                ) .then((pageResult) => {\n                  pageResult.data.forEach((serv) => {\n                    ids.push(serv);\n                  });\n                });\n              promises.push(tmp_promise);\n              wait_promises.push(tmp_promise);\n            } // end for loop\n            Promise.all(promises).then(() => {\n             const idChilds = new Children();\n             idChilds.id = this.createId();\n             ids.forEach( (idOb) => {\n                idChilds.children.push(this.createIdentity(idOb));\n             });\n              idChilds.name = \"Accessible Identities(\"+ idChilds.children.length +')';\n               erPolicyNode.data.children.push(idChilds);\n             });\n          });\n         wait_promises.push(idpromise);\n         Promise.all(wait_promises).then( () => {\n             resolve('this is a promise');\n         } );\n\n       });\n\n        networkGraph = d3.hierarchy(networkGraph.data, function (nd) {\n            return nd.children;\n        });\n\n        return [networkGraph, this.uniqId];\n    } // end\n\n  async processServiceEdgeRouterPoliciesForNodeClick(\n        serviceErPolicyNode,\n        networkGraph,\n        serviceEdgeRouterPolicies,\n        uniqId,\n        zitiService\n    ) {\n       const myPromise = await new Promise((resolve, reject) => {\n          this.uniqId = uniqId;\n          const wait_promises = [];\n          const rawServiceERPolicy = serviceEdgeRouterPolicies.find((s) => s.name === serviceErPolicyNode.data.name);\n          const pagesize = 500;\n          const services_paging = this.getPagingObject(pagesize);\n          const url = this.getLinkForResource(rawServiceERPolicy, 'edge-routers');\n          let routers = [];\n          const erpromise = zitiService.get(url, services_paging, [])\n          .then((result) => {\n            routers = result.data;\n            const pages = Math.ceil(result.meta.pagination.totalCount / pagesize);\n            const promises = [];\n            for (let page = 2; page <= pages; page++) {\n              services_paging.page = page;\n              const tmp_promise = zitiService.get(\n                               url,\n                               services_paging,\n                               []\n                ) .then((pageResult) => {\n                  pageResult.data.forEach((serv) => {\n                    routers.push(serv);\n                  });\n                });\n              promises.push(tmp_promise);\n              wait_promises.push(tmp_promise);\n            } // end for loop\n            Promise.all(promises).then(() => {\n             const erChilds = new Children();\n             erChilds.id = this.createId();\n             routers.forEach( (er) => {\n                const idOb = new ERouter();\n                idOb.id = this.createId();\n                idOb.uuid = er.id;\n                idOb.name = er.name;\n                idOb.type = 'Edge Router';\n                erChilds.children.push(idOb);\n             });\n               erChilds.name = \"Edge Routers(\"+ erChilds.children.length +')';\n               serviceErPolicyNode.data.children.push(erChilds);\n             });\n          });\n          wait_promises.push(erpromise);\n\n          const services_pagingB = this.getPagingObject(pagesize);\n\n          const urlB = this.getLinkForResource(rawServiceERPolicy, 'services');\n          let serArray = [];\n          const serpromise = zitiService.get(urlB, services_pagingB, [])\n          .then((result) => {\n            serArray = result.data;\n            const pages = Math.ceil(result.meta.pagination.totalCount / pagesize);\n            const promisesB = [];\n            for (let page = 2; page <= pages; page++) {\n              services_pagingB.page = page;\n              const tmp_promiseB = zitiService.get(\n                               urlB,\n                               services_pagingB,\n                               []\n                ) .then((pageResult) => {\n                  pageResult.data.forEach((serv) => {\n                    serArray.push(serv);\n                  });\n                });\n              promisesB.push(tmp_promiseB);\n              wait_promises.push(tmp_promiseB);\n            } // end for loop\n            Promise.all(promisesB).then(() => {\n             const srChilds = new Children();\n             srChilds.id = this.createId();\n             serArray.forEach( (sr) => {\n                const srOb = new Service();\n                srOb.id = this.createId();\n                srOb.uuid = sr.id;\n                srOb.name = sr.name;\n                srOb.type = 'Service';\n                srChilds.children.push(srOb);\n             });\n              srChilds.name = \"Services(\"+ srChilds.children.length +')';\n              serviceErPolicyNode.data.children.push(srChilds);\n             });\n          });\n         wait_promises.push(serpromise);\n\n         Promise.all(wait_promises).then( () => {\n            resolve('Done');\n         } );\n\n       });\n\n        networkGraph = d3.hierarchy(networkGraph.data, function (nd) {\n            return nd.children;\n        });\n        return [networkGraph, this.uniqId];\n    } // end\n} // end of class\n","/* eslint prefer-const: 1 */\nimport {\n  Component,\n  ViewChild,\n  Inject,\n  OnInit,\n  ViewEncapsulation,\n  Injectable,\n} from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { Router } from '@angular/router';\nimport {\n  SETTINGS_SERVICE,\n  SettingsService,\n} from '../../../services/settings.service';\nimport {\n  ZITI_DATA_SERVICE,\n  ZitiDataService,\n} from '../../../services/ziti-data.service';\nimport {DataTableFilterService, FilterObj} from \"../../data-table/data-table-filter.service\";\nimport {catchError} from \"rxjs/operators\";\nimport {firstValueFrom, map, Observable} from \"rxjs\";\nimport { VisualizerServiceClass  } from '../visualizer-service.class';\nimport * as d3 from 'd3';\nimport _ from 'lodash';\nimport {cloneDeep} from \"lodash\";\nimport { Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { take, tap } from 'rxjs/operators';\nimport { MatIconModule } from '@angular/material/icon';\nimport { HttpClient } from '@angular/common/http';\nimport { TreeNodeProcessor } from './network-visualizer.treenodeprocessor';\nimport { NetworkVisualizerHelper } from './network-visualizer.helper';\nimport {LoggerService} from \"../../messaging/logger.service\";\n\n@Component({\n    selector: 'app-network-visualizer',\n    encapsulation: ViewEncapsulation.None,\n    templateUrl: './network-visualizer.component.html',\n    styleUrls: ['./network-visualizer.component.scss'],\n    standalone: false\n})\n\nexport class NetworkVisualizerComponent extends VisualizerServiceClass implements OnInit {\n// export class NetworkVisualizerComponent  implements OnInit {\n  title = 'Network Visualizer'\n  public d3;\n  uniqId = 0;\n  maxObjectsPerNode = 1001;\n  treetooltip;\n  fullScreen = false;\n  isLoading = true;\n  noSearchResults = true;\n  services = [];\n  services_totalCount = 0;\n  all_services_fetched = false;\n  identities = [];\n  identities_totalCount = 0;\n  all_identities_fetched = false;\n  edgerouters = [];\n  edgerouters_totalCount = 0;\n  all_edgerouters_fetched = false;\n  service_policies = [];\n  service_policies_totalCount = 0;\n  all_service_policies_fetched = false;\n  edge_router_policies = [];\n  edge_router_policies_totalCount = 0;\n  all_edge_router_policies_fetched = false;\n  service_router_policies = [];\n  service_router_policies_totalCount = 0;\n  all_service_router_policies_fetched = false;\n  configs = [];\n  filerResponseMessage = 'search filter..';\n  baseNetworkGraph;\n  networkGraph;\n  currentNetwork;\n  searchRootNode;\n\n  servicePoliciesTreeNodes = [];\n  servicesTreeNodes = [];\n  identitiesTreeNodes = [];\n  edgeroutersTreeNodes = [];\n  erPoliciesTreeNodes = [];\n  serviceEdgeRouterPolicyTreeNodes = [];\n\n  autocompleteOptions;\n  resourceTypeError = false;\n  filterText = '';\n  searchWord = '';\n  resourceType = '';\n  zoom;\n  svg;\n  treemap;\n  nodes;\n  node;\n  link;\n  links;\n  linkExit;\n  linkUpdate;\n  openNodes = [];\n  transform;\n  nodeUpdate;\n  nodeExit;\n  nodeEnter;\n  contextmenuNode;\n  circles;\n  contextmenuNodeType:any = [];\n  simulation;\n  treeData;\n  graphtooltip;\n  searchCache;\n  allPromises = [];\n\n  constructor(\n     @Inject(SETTINGS_SERVICE) public settingsService: SettingsService,\n     @Inject(ZITI_DATA_SERVICE) private zitiService: ZitiDataService,\n     private httpClient: HttpClient,\n     private logger: LoggerService,\n     public treeNodeProcessor: TreeNodeProcessor,\n     public topologyHelper: NetworkVisualizerHelper,\n  ) {\n     super();\n    // super(settingsService, zitiService);\n  }\n\n  override ngOnInit(): void {\n     this.getNetworkObjects();\n  }\n\n    getPagingObject(pagesize) {\n    return cloneDeep({\n      filter: \"\",\n      noSearch: true,\n      order: \"asc\",\n      page: 1,\n      searchOn: \"name\",\n      sort: \"name\",\n      total: pagesize\n    })\n    }\n\n  async getNetworkObjects() {\n    this.isLoading = true;\n     await this.readAllObjects();\n     this.processFirstNetworkGraph();\n  }\n\n   async fetchIdentities (pagesize) {\n      const identities_paging = this.getPagingObject(pagesize);\n      return await this.zitiService\n      .get(`identities`, identities_paging, [])\n      .then(async (result) => {\n         this.identities = result.data? result.data: [];\n         this.identities_totalCount = result.meta && result.meta.pagination? result.meta.pagination.totalCount : 0;\n         if (!this.identities || this.identities.length === 0) {\n            this.identities = [];\n            this.isLoading = false;\n         } else if (this.identities_totalCount < this.maxObjectsPerNode ){\n           this.all_identities_fetched = true;\n           const pages = Math.ceil(result.meta.pagination.totalCount / pagesize);\n           const promises = [];\n           for (let page = 2; page <= pages; page++) {\n             identities_paging.page = page;\n             const tmp_promise = await this.zitiService\n              .get(\n                `identities`,\n                 identities_paging,\n                []\n              ).then((pageResult) => {\n                pageResult.data.forEach((serv) => {\n                  this.identities.push(serv);\n                });\n              });\n             promises.push(tmp_promise);\n             this.allPromises.push(tmp_promise);\n           }\n           Promise.all(promises).then(() => {\n            // this.identities_totalCount = this.identities.length;\n           });\n        }\n    }).catch(error => {\n        this.logger.error('Error in fetching Identities', error.message);\n     });  // identity promises\n  }\n\n  async fetchServices(pagesize) {\n   const services_paging = this.getPagingObject(pagesize);\n    return await this.zitiService\n          .get(`services`, services_paging, [])\n          .then( async (result) => {\n            this.services = result.data? result.data: [];\n            this.services_totalCount = result.meta && result.meta.pagination? result.meta.pagination.totalCount : 0;\n            if (!this.services || this.services.length === 0) {\n              this.services = [];\n              this.isLoading = false;\n            } else if (this.services_totalCount < this.maxObjectsPerNode) {\n              this.all_services_fetched = true;\n              const pages = Math.ceil(result.meta.pagination.totalCount / pagesize);\n              const s_promises = [];\n              for (let page = 2; page <= pages; page++) {\n                services_paging.page = page;\n                const tmp_promise = await this.zitiService\n                  .get(\n                    `services`,\n                     services_paging,\n                    []\n                  )\n                  .then((pageResult) => {\n                    pageResult.data.forEach((serv) => {\n                      this.services.push(serv);\n                    });\n                  });\n                s_promises.push(tmp_promise);\n                this.allPromises.push(tmp_promise);\n              }\n              Promise.all(s_promises).then(() => {\n               // this.services_totalCount = this.services.length;\n              });\n            }\n        }).catch(error => {\n           this.logger.error('Error in fetching services', error.message);\n        });\n  }\n\n  async fetchServicePolicies(pagesize) {\n       const servicesPolicies_paging = this.getPagingObject(pagesize);\n      return await this.zitiService\n          .get(`service-policies`, servicesPolicies_paging, [])\n          .then( async (result) => {\n            this.service_policies = result.data? result.data: [];\n             this.service_policies_totalCount = result.meta && result.meta.pagination? result.meta.pagination.totalCount : 0;\n            if (!this.service_policies || this.service_policies.length === 0) {\n              this.service_policies = [];\n              this.isLoading = false;\n            } else if (this.service_policies_totalCount < this.maxObjectsPerNode) {\n              this.all_service_policies_fetched = true;\n              const pages = Math.ceil(result.meta.pagination.totalCount / pagesize);\n              const sp_promises = [];\n              for (let page = 2; page <= pages; page++) {\n                servicesPolicies_paging.page = page;\n                const tmp_promise = await this.zitiService\n                  .get(\n                    `service-policies`,\n                     servicesPolicies_paging,\n                    []\n                  )\n                  .then((pageResult) => {\n                    pageResult.data && pageResult.data.forEach((serv) => {\n                      this.service_policies.push(serv);\n                    });\n                  });\n                sp_promises.push(tmp_promise);\n                this.allPromises.push(tmp_promise);\n              }\n\n              Promise.all(sp_promises).then(() => {\n               // this.service_policies_totalCount = this.service_policies.length;\n              });\n            }\n       }).catch(error => {\n          this.logger.error('Error in fetching service-policies', error.message);\n        });\n  }\n\n  async fetchEdgeRouters(pagesize) {\n       const routers_paging = this.getPagingObject(pagesize);\n       return await this.zitiService\n          .get(`edge-routers`, routers_paging, [])\n          .then( async (result) => {\n            this.edgerouters = result.data? result.data: [];\n            this.edgerouters_totalCount = result.meta && result.meta.pagination? result.meta.pagination.totalCount : 0;\n            if (!this.edgerouters || this.edgerouters.length === 0) {\n              this.edgerouters = [];\n              this.isLoading = false;\n            } else if (this.edgerouters_totalCount < this.maxObjectsPerNode) {\n              this.all_edgerouters_fetched = true;\n              const pages = Math.ceil(result.meta.pagination.totalCount / pagesize);\n              const r_promises = [];\n              for (let page = 2; page <= pages; page++) {\n                routers_paging.page = page;\n                const tmp_promise = await this.zitiService\n                  .get(\n                    `edge-routers`,\n                     routers_paging,\n                    []\n                  )\n                  .then((pageResult) => {\n                    pageResult.data.forEach((serv) => {\n                      this.edgerouters.push(serv);\n                    });\n                  });\n                r_promises.push(tmp_promise);\n                this.allPromises.push(tmp_promise);\n              }\n              Promise.all(r_promises).then(() => {\n                 // this.edgerouters_totalCount = this.edgerouters.length;\n               });\n            }\n       }).catch(error => {\n         this.logger.error('Error in fetching edge-routers', error.message);\n       });\n  }\n\n async findEdgeRouterPolicies(pagesize) {\n      this.edge_router_policies = [];\n      const erpolicies_paging = this.getPagingObject(pagesize);\n      return await this.zitiService\n          .get(`edge-router-policies`, erpolicies_paging, [])\n          .then(async (result) => {\n            this.edge_router_policies = result.data? result.data: [];\n            this.edge_router_policies_totalCount = result.meta && result.meta.pagination? result.meta.pagination.totalCount : 0;\n            if (!this.edge_router_policies || this.edge_router_policies.length === 0) {\n              this.isLoading = false;\n            } else if (this.edge_router_policies_totalCount < this.maxObjectsPerNode) {\n              this.all_edge_router_policies_fetched = true;\n              const pages = Math.ceil(result.meta.pagination.totalCount / pagesize);\n              const r_promises = [];\n              for (let page = 2; page <= pages; page++) {\n                erpolicies_paging.page = page;\n                const tmp_promise = await this.zitiService\n                  .get(\n                    `edge-router-policies`,\n                     erpolicies_paging,\n                    []\n                  )\n                  .then((pageResult) => {\n                    pageResult.data.forEach((serv) => {\n                      this.edge_router_policies.push(serv);\n                    });\n                  });\n                r_promises.push(tmp_promise);\n                this.allPromises.push(tmp_promise);\n              }\n\n              Promise.all(r_promises).then(() => {\n               // this.edge_router_policies_totalCount = this.edge_router_policies.length;\n              });\n            }\n       }).catch(error => {\n           this.logger.error('Error in fetching edge-router-policies', error);\n       });\n }\n async fetchServiceEdgeRouterPolicies(pagesize) {\n     this.service_router_policies = [];\n     const serp_paging = this.getPagingObject(pagesize);\n     return await this.zitiService\n          .get(`service-edge-router-policies`, serp_paging, [])\n          .then(async (result) => {\n             this.service_router_policies = result.data? result.data: [];\n             this.service_router_policies_totalCount = result.meta && result.meta.pagination? result.meta.pagination.totalCount : 0;\n            if (!this.service_router_policies || this.service_router_policies.length === 0) {\n              this.isLoading = false;\n            } else if (this.service_router_policies_totalCount < this.maxObjectsPerNode) {\n              this.all_service_router_policies_fetched = true;\n              const pages = Math.ceil(result.meta.pagination.totalCount / pagesize);\n              const r_promises = [];\n              for (let page = 2; page <= pages; page++) {\n                serp_paging.page = page;\n                const tmp_promise = await this.zitiService\n                  .get(\n                    `service-edge-router-policies`,\n                     serp_paging,\n                    []\n                  )\n                  .then((pageResult) => {\n                    pageResult.data.forEach((serv) => {\n                      this.service_router_policies.push(serv);\n                    });\n                  });\n                r_promises.push(tmp_promise);\n                this.allPromises.push(tmp_promise);\n              }\n              Promise.all(r_promises).then(() => {\n              // this.service_router_policies_totalCount = this.service_router_policies.length;\n              });\n            }\n       }).catch(error => {\n           this.logger.error('Error in fetching service-edge-router-policies', error);\n       });\n }\n async fetchConfigs(pagesize) {\n    this.configs = [];\n    const configs_paging = this.getPagingObject(pagesize);\n    return await this.zitiService\n          .get(`configs`, configs_paging, [])\n          .then(async (result) => {\n            this.configs = result.data? result.data: [];\n           const configs_totalCount = result.meta && result.meta.pagination? result.meta.pagination.totalCount : 0;\n            if (!this.configs || this.configs.length === 0) {\n              this.configs = [];\n            } else if (configs_totalCount < this.maxObjectsPerNode) {\n              const pages = Math.ceil(result.meta.pagination.totalCount / pagesize);\n              const r_promises = [];\n              for (let page = 2; page <= pages; page++) {\n                configs_paging.page = page;\n                const tmp_promise = await this.zitiService\n                  .get(\n                    `configs`,\n                     configs_paging,\n                    []\n                  )\n                  .then((pageResult) => {\n                    pageResult.data.forEach((serv) => {\n                      this.configs.push(serv);\n                    });\n                  });\n                r_promises.push(tmp_promise);\n                this.allPromises.push(tmp_promise);\n              }\n              Promise.all(r_promises).then(() => {\n               const configs_totalCount = this.configs.length;\n              });\n            }\n         }).catch(error => {\n           this.logger.error('Error in fetching configs', error);\n          });\n\n }\n\n async readAllObjects() {\n   const myPromise =  await new Promise(  (resolve, reject) => {\n     let networkVisPromises =[];\n     const pagesize = 500;\n     const eps = this.fetchIdentities(pagesize);\n     this.allPromises.push(eps);\n     const ss = this.fetchServices(pagesize);\n     this.allPromises.push(ss);\n     const sps = this.fetchServicePolicies(pagesize);\n     this.allPromises.push(sps);\n     const ers = this.fetchEdgeRouters(pagesize);\n     this.allPromises.push(eps);\n     const erps = this.findEdgeRouterPolicies(pagesize);\n     this.allPromises.push(erps);\n     const serps = this.fetchServiceEdgeRouterPolicies(pagesize);\n     this.allPromises.push(serps);\n     const cfg = this.fetchConfigs(pagesize);\n     this.allPromises.push(cfg);\n     Promise.all(this.allPromises).then((res) => {resolve('end'); });\n   });\n }\n\n  processFirstNetworkGraph() {\n        try {\n            const treeObj = this.topologyHelper.getResourceTreeObj(\n                'this.currentNetwork.name',\n                'this.currentNetwork.status',\n                this.services,\n                this.identities,\n                this.service_policies,\n                this.edgerouters,\n                this.edge_router_policies,\n                this.service_router_policies,\n                this.services_totalCount, this.identities_totalCount, this.edgerouters_totalCount,\n                this.service_policies_totalCount, this.edge_router_policies_totalCount,\n                this.service_router_policies_totalCount,\n                this.uniqId,\n                this.logger,\n                this.all_service_policies_fetched, this.all_services_fetched, this.all_identities_fetched, this.all_edgerouters_fetched,\n                this.all_edge_router_policies_fetched, this.all_service_router_policies_fetched\n            );\n\n            this.uniqId = treeObj.lastId;\n            this.networkGraph = d3.hierarchy(treeObj, function (d) {\n                return d.children;\n            });\n            // this.baseNetworkGraph = _.cloneDeep(this.networkGraph);\n            this.servicePoliciesTreeNodes = [];\n            this.servicesTreeNodes = [];\n            this.identitiesTreeNodes = [];\n            this.edgeroutersTreeNodes = [];\n            this.erPoliciesTreeNodes = [];\n            this.serviceEdgeRouterPolicyTreeNodes = [];\n\n            this.servicePoliciesTreeNodes = this.fillAutoCompleteTreeNodes(\n                this.service_policies,\n                this.servicePoliciesTreeNodes,\n                'ServicePolicy'\n            );\n            this.servicesTreeNodes = this.fillAutoCompleteTreeNodes(\n                this.services,\n                this.servicesTreeNodes,\n                'Service'\n            );\n            this.identitiesTreeNodes = this.fillAutoCompleteTreeNodes(\n                this.identities,\n                this.identitiesTreeNodes,\n                'Identity'\n            );\n            this.edgeroutersTreeNodes = this.fillAutoCompleteTreeNodes(\n                this.edgerouters,\n                this.edgeroutersTreeNodes,\n                'Router'\n            );\n\n            this.erPoliciesTreeNodes = this.fillAutoCompleteTreeNodes(\n                this.edge_router_policies,\n                this.erPoliciesTreeNodes,\n                'Router Policy'\n            );\n\n            this.serviceEdgeRouterPolicyTreeNodes = this.fillAutoCompleteTreeNodes(\n                this.service_router_policies,\n                this.serviceEdgeRouterPolicyTreeNodes,\n                'Service Router Policy'\n            );\n\n            this.initTopoView();\n            this.baseNetworkGraph = _.cloneDeep(this.networkGraph);\n        } catch (err:any) {\n            this.logger.error(err.message);\n        }\n\n        this.isLoading = false;\n  }\n\n   fillAutoCompleteTreeNodes(resourcesArray, arr, typeName) {\n     resourcesArray && resourcesArray.forEach( (ob) => {\n      arr.push(ob.name);\n     });\n    return arr;\n   }\n\n  debounce(func, timeout = 150){\n    let timer;\n    return (...args) => {\n      this.autocompleteOptions = [];\n      clearTimeout(timer);\n      timer = setTimeout(() => { func.apply(this, args); }, timeout);\n    };\n  }\n\n  nwSearchChange(event){\n   if (this.filterText.length > 1 && event.key !=='Escape' && event.key !== 'ArrowRight' && event.key !=='ArrowLeft' && event.key !=='Enter') {\n     this.filerResponseMessage = 'search filter..';\n     this.debounce(this.filterSearchArray());\n   }\n  }\n\n    autocompleteSearch(event) {\n        const str = event ? event.option.value : '';\n        this.searchResourceConditionCheck(str);\n    }\n\n    resourceTypeChanged() {\n        this.filerResponseMessage = 'search filter..';\n        this.searchCache = [];\n        this.resetSearchNode();\n        this.clearSearchLinkColors();\n        if (_.isEmpty(this.resourceType)) {\n            this.autocompleteOptions = [];\n            this.clearSearchFilter();\n            this.resourceTypeError = !_.isEmpty(this.filterText);\n            return;\n        }\n        this.filterText = '';\n        this.resourceTypeError = false;\n        this.autocompleteOptions =[];\n        if (this.resourceType === 'service-policies' && this.all_service_policies_fetched) {\n            this.autocompleteOptions = this.servicePoliciesTreeNodes;\n        } else if (this.resourceType === 'services' && this.all_services_fetched) {\n            this.autocompleteOptions = this.servicesTreeNodes;\n        } else if (this.resourceType === 'identities' && this.all_identities_fetched) {\n            this.autocompleteOptions = this.identitiesTreeNodes;\n        } else if (this.resourceType === 'edge-routers' && this.all_edgerouters_fetched) {\n            this.autocompleteOptions = this.edgeroutersTreeNodes;\n        } else if (this.resourceType === 'edge-router-policies' && this.all_edge_router_policies_fetched) {\n            this.autocompleteOptions = this.erPoliciesTreeNodes;\n        } else if (this.resourceType === 'service-edge-router-policies' && this.all_service_router_policies_fetched) {\n            this.autocompleteOptions = this.serviceEdgeRouterPolicyTreeNodes;\n        }\n\n        if (!_.isEmpty(this.filterText)) {\n            this.searchResourceConditionCheck(this.filterText);\n        }\n    }\n\n    searchResourceConditionCheck(searchTxt) {\n      if (this.resourceType === '' && searchTxt !== '') {\n               this.resourceTypeError = true;\n              return;\n      } else {\n           this.searchResourceInTree(searchTxt);\n      }\n    }\n\n    searchResourceInTree(searchTxt) {\n        this.noSearchResults = false;\n        this.resourceTypeError = false;\n        this.resetTree(null);\n        if (searchTxt === '') {\n            this.clearSearchLinkColors();\n        } else {\n            this.resetSearchNode();\n            this.clearSearchLinkColors();\n\n            let paths = [];\n            let targetNodes = [];\n            const nodeIds = [];\n            if (this.resourceType === 'service-policies' && !this.all_service_policies_fetched) {\n                const rawOb = this.searchCache.find((item) => item.name === searchTxt);\n                const id:any = this.topologyHelper.createServicePolicyNode(rawOb);\n               // id.clickProcess = \"Not Yet\";\n                if(!this.isNodeExists(this.nodes[1], id)) {\n                   this.nodes[1].data.children.push(id);\n                 }\n\n                this.networkGraph = d3.hierarchy(this.networkGraph.data, function (nd) {\n                     return nd.children;\n                });\n                this.networkGraph.children.forEach((nd,i) => {\n                   if (i !==0) {\n                      this.graphCollapse(nd);\n                   }\n                } );\n                this.service_policies = [];\n                this.service_policies[0] = rawOb;\n                this.updateTree(this.nodes[1]);\n                targetNodes = this.processSearchInPreorder(this.nodes[1], searchTxt, targetNodes);\n            } else if (this.resourceType === 'service-policies' && this.all_service_policies_fetched) {\n                targetNodes = this.processSearchInPreorder(this.nodes[1], searchTxt, targetNodes);\n            } else if (this.resourceType === 'edge-routers' && !this.all_edgerouters_fetched) {\n                const rawOb = this.searchCache.find((item) => item.name === searchTxt);\n                const id:any = this.topologyHelper.createEdgeRouterNode(rawOb);\n               // id.clickProcess = \"Not Yet\";\n                if(!this.isNodeExists(this.nodes[4], id)) {\n                   this.nodes[4].data.children.push(id);\n                 }\n                this.networkGraph = d3.hierarchy(this.networkGraph.data, function (nd) {\n                     return nd.children;\n                });\n                this.networkGraph.children.forEach((nd,i) => {\n                   if (i !== 3) {\n                     this.graphCollapse(nd);\n                   }\n                } );\n                this.edgerouters = [];\n                this.edgerouters[0] = rawOb;\n                this.updateTree(this.nodes[4]);\n\n                targetNodes = this.processSearchInPreorder(this.nodes[4], searchTxt, targetNodes);\n            } else if (this.resourceType === 'edge-routers' && this.all_edgerouters_fetched) {\n                targetNodes = this.processSearchInPreorder(this.nodes[4], searchTxt, targetNodes);\n            } else if (this.resourceType === 'services' && !this.all_services_fetched) {\n                const rawOb = this.searchCache.find((item) => item.name === searchTxt);\n                const id:any = this.topologyHelper.createServiceNode(rawOb);\n                id.clickProcess = \"Not Yet\";\n                if(!this.isNodeExists(this.nodes[2], id)) {\n                  this.nodes[2].data.children.push(id);\n                 }\n                this.networkGraph = d3.hierarchy(this.networkGraph.data, function (nd) {\n                     return nd.children;\n                });\n                this.services = [];\n                this.services[0] = rawOb;\n                this.updateTree(this.nodes[2]);\n                targetNodes = this.processSearchInPreorder(this.nodes[2], searchTxt, targetNodes);\n                this.networkGraph.children.forEach((nd,i) => {\n                  if ( i !== 1) {\n                    this.graphCollapse(nd);\n                  }\n                } );\n\n            } else if (this.resourceType === 'services' && this.all_services_fetched) {\n                targetNodes = this.processSearchInPreorder(this.nodes[2], searchTxt, targetNodes);\n            } else if (this.resourceType === 'identities' && !this.all_identities_fetched) {\n                const rawOb = this.searchCache.find((item) => item.name === searchTxt);\n                const id:any = this.topologyHelper.createIdentityNode(rawOb);\n                id.clickProcess = \"Not Yet\";\n                if(!this.isNodeExists(this.nodes[3], id)) {\n                 this.nodes[3].data.children.push(id);\n                }\n                this.networkGraph = d3.hierarchy(this.networkGraph.data, function (nd) {\n                     return nd.children;\n                });\n\n                this.identities[0] = [];\n                this.identities[0] = rawOb;\n                this.updateTree(this.nodes[3]);\n                targetNodes = this.processSearchInPreorder(this.nodes[3], searchTxt, targetNodes);\n                this.networkGraph.children.forEach((nd,i) => {\n                  if (i !== 2) {\n                    this.graphCollapse(nd);\n                  }\n                } );\n            } else if (this.resourceType === 'identities' && this.all_identities_fetched) {\n                targetNodes = this.processSearchInPreorder(this.nodes[3], searchTxt, targetNodes);\n            } else if (this.resourceType === 'edge-router-policies' && !this.all_edge_router_policies_fetched) {\n               const rawOb = this.searchCache.find((item) => item.name === searchTxt);\n                const id:any = this.topologyHelper.createEdgeRouterPolicyNode(rawOb);\n                id.clickProcess = \"Not Yet\";\n\n                if(!this.isNodeExists(this.nodes[5], id)) {\n                 this.nodes[5].data.children.push(id);\n                 }\n                this.networkGraph = d3.hierarchy(this.networkGraph.data, function (nd) {\n                     return nd.children;\n                });\n                this.networkGraph.children.forEach((nd,i) => {\n                  if (i !== 4) {\n                    this.graphCollapse(nd);\n                  }\n                } );\n                this.networkGraph.children.forEach(nd => this.graphCollapse(nd));\n                this.edge_router_policies = [];\n                this.edge_router_policies[0] = rawOb;\n                this.updateTree(this.nodes[5]);\n                targetNodes = this.processSearchInPreorder(this.nodes[5], searchTxt, targetNodes);\n            } else if (this.resourceType === 'edge-router-policies' && this.all_edge_router_policies_fetched) {\n                 targetNodes = this.processSearchInPreorder(this.nodes[5], searchTxt, targetNodes);\n            } else if (this.resourceType === 'service-edge-router-policies' && !this.all_service_router_policies_fetched) {\n                const rawOb = this.searchCache.find((item) => item.name === searchTxt);\n                const id:any = this.topologyHelper.createServiceEdgeRouterPolicyNode(rawOb);\n                id.clickProcess = \"Not Yet\";\n                if(!this.isNodeExists(this.nodes[6], id)) {\n                  this.nodes[6].data.children.push(id);\n                }\n                this.networkGraph = d3.hierarchy(this.networkGraph.data, function (nd) {\n                     return nd.children;\n                });\n                this.networkGraph.children.forEach((nd,i) => {\n                  if (i !== 5) {\n                    this.graphCollapse(nd);\n                  }\n                } );\n                this.service_router_policies = [];\n                this.service_router_policies[0] = rawOb;\n                this.updateTree(this.nodes[6]);\n                targetNodes = this.processSearchInPreorder(this.nodes[6], searchTxt, targetNodes);\n            } else if (this.resourceType === 'service-edge-router-policies' && this.all_service_router_policies_fetched) {\n                 targetNodes = this.processSearchInPreorder(this.nodes[6], searchTxt, targetNodes);\n            }\n            // this.networkGraph.children.forEach(nd => this.graphCollapse(nd));\n            paths = this.explorePathsForSearchedNodes(targetNodes, paths, nodeIds);\n            if (targetNodes && targetNodes.length <= 0) {\n                this.noSearchResults = true;\n                this.clearSearchLinkColors();\n            } else {\n                this.openPaths(paths, true);\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                d3.selectAll('circle').filter(function (d: any) {\n                    const dataName = _.get(d, 'data.name', '');\n                    // const dataId = _.get(d, 'data.id', '');\n                    const nodeName = _.get(targetNodes[0], 'data.name', '');\n                    if (dataName.toLowerCase() === searchTxt.toLowerCase() && nodeName === dataName) {\n                        d3.select(this).style('fill', '#a60303'); //#004447, 470000\n                    }\n                });\n            }\n\n        }\n    }\n\n    isNodeExists(rootNode:any, id) {\n     return rootNode.data.children.find( (nd) => nd.uuid ===id.uuid );\n    }\n\n    explorePathsForSearchedNodes(targetNodes, paths, nodeIds) {\n      for (let i = 0; targetNodes && i < targetNodes.length; i++) {\n         let nd = targetNodes[i];\n           paths.push(nd);\n         while (nd.parent) {\n            const nodeId = _.get(nd.parent, 'data.id');\n            if (nodeIds.indexOf(nodeId) < 0) {\n               nodeIds.push(nodeId);\n               paths.push(nd.parent);\n            }\n            nd = nd.parent;\n         }\n      }\n        return paths;\n    }\n\n    processSearchInPreorder(nodeObj, searchTxt, targetNodes) {\n        const name = _.get(nodeObj, 'data.name');\n        // const nodeId = _.get(nodeObj, 'data.id');\n        const isRootNode = _.get(nodeObj, 'data.rootNode');\n        if (!name) {\n            return;\n        }\n        if (isRootNode && isRootNode === 'Yes' && name.toLowerCase() === searchTxt.toLowerCase()) {\n            targetNodes.push(nodeObj);\n        }\n        const childNodes = nodeObj.children ? nodeObj.children : nodeObj._children;\n        for (let i = 0; childNodes && i < childNodes.length; i++) {\n            this.processSearchInPreorder(childNodes[i], searchTxt, targetNodes);\n        }\n        return targetNodes;\n    }\n\n    clearSearchLinkColors() {\n        this.svg.selectAll('path.link').each( function (this: any,  d:any) {\n            d3.select(this).style('stroke', 'white');\n        });\n        this.svg.selectAll('circle').style('fill', function (d:any) {\n            return d._children ? 'var(--tableText)' : '#fff';\n        });\n    }\n\n    openPaths(paths, doReset = false) {\n        const pathIds = [];\n        for (let i = paths.length - 1; i >= 0; i--) {\n            const l = paths[i];\n            if (this.openNodes.indexOf(l.data.id) < 0) {\n                this.openNodes.push(l.data.id);\n            }\n            this.expand(paths[i]);\n            if (i > 0) {\n                this.updateTree(l, doReset);\n            }\n            pathIds.push(l.data.id);\n        }\n        pathIds.push(paths[1].data.id);\n        pathIds.push(paths[0].data.id);\n\n        let childreng = null; // get 2nd level data nodes.\n        if (this.resourceType === 'service-policies') {\n            childreng = this.networkGraph.children[0];\n        } else if (this.resourceType === 'services') {\n            childreng = this.networkGraph.children[1];\n        } else if (this.resourceType === 'identities') {\n            childreng = this.networkGraph.children[2];\n        } else if (this.resourceType === 'edge-routers') {\n            childreng = this.networkGraph.children[3];\n        } else if (this.resourceType === 'edge-router-policies') {\n            childreng = this.networkGraph.children[4];\n        } else if (this.resourceType === 'service-edge-router-policies') {\n            childreng = this.networkGraph.children[5];\n        }\n        const ndd_childs = childreng.children ? childreng.children : childreng._children; // 2nd level chailds. groups/childrens\n        for (let i = 0; i < ndd_childs.length; i++) {\n            // 2st level\n            //  if (this.resourceType === 'endpoints' || this.resourceType === 'services') {\n            if (ndd_childs[i].data.type === 'Group') {\n                // process groups\n                const d1 = ndd_childs[i]; //get group\n                if (d1 && paths[1].data.id === d1.data.id) {\n                    const children0 = d1.children ? d1.children : d1._children; // 3rd level childs\n                    const arr = children0.filter(function (replOb) {\n                        return replOb.data.id === paths[0].data.id;\n                    });\n                    d1.children = arr;\n                    d1._children = null;\n                    const arrgrp = ndd_childs.filter(function (replObj) {\n                        return replObj.data.id === d1.data.id;\n                    });\n                    childreng.children = arrgrp;\n                    this.updateTree(this.networkGraph, doReset);\n                    break;\n                }\n            } else {\n                if (childreng.data.id === paths[1].data.id) {\n                    const arr = ndd_childs.filter(function (replOb) {\n                        return replOb.data.id === paths[0].data.id;\n                    });\n                    childreng.children = arr;\n                    childreng._children = null;\n                    this.updateTree(this.networkGraph, doReset);\n                    break;\n                }\n            }\n        }\n        let datanodes = null; // get 2nd level data nodes.\n        if (this.resourceType === 'service-policies') {\n            datanodes = this.networkGraph.data.children[0];\n        } else if (this.resourceType === 'services') {\n            datanodes = this.networkGraph.data.children[1];\n        } else if (this.resourceType === 'identities') {\n            datanodes = this.networkGraph.data.children[2];\n        } else if (this.resourceType === 'edge-routers') {\n            datanodes = this.networkGraph.data.children[3];\n        } else if (this.resourceType === 'edge-router-policies') {\n            datanodes = this.networkGraph.data.children[4];\n        } else if (this.resourceType === 'service-edge-router-policies') {\n            datanodes = this.networkGraph.data.children[5];\n        }\n        if (datanodes.id === paths[1].data.id) {\n            const arr = datanodes.children.filter(function (replOb) {\n                return replOb.id === paths[0].data.id;\n            });\n            datanodes.children = arr;\n            this.updateTree(this.networkGraph, doReset);\n        } else {\n            const groupNodes = datanodes.children;\n            for (let k = 0; k < groupNodes.length; k++) {\n                if (groupNodes[k].id === paths[1].data.id) {\n                    // check searched group node\n                    const arr = groupNodes[k].children.filter(function (replOb) {\n                        return replOb.id === paths[0].data.id;\n                    });\n                    groupNodes[k].children = arr;\n                    const arrgrp = groupNodes.filter(function (replObj) {\n                        return replObj.id === paths[1].data.id;\n                    });\n                    datanodes.children = arrgrp;\n                    this.updateTree(this.networkGraph, doReset);\n                    break;\n                }\n            }\n        }\n\n        this.updateTree(this.networkGraph, doReset);\n        this.searchRootNode = paths[1];\n\n        this.svg.selectAll('.link').each(function (this:any, d:any) {\n            if (pathIds.indexOf(d.data.id) >= 0) {\n                d3.select(this).style('stroke', 'red');\n            } else {\n                d3.select(this).style('stroke', 'white');\n            }\n        });\n    }\n\n    resetSearchNode() {\n        if (this.searchRootNode) {\n            this.networkGraph = _.cloneDeep(this.baseNetworkGraph);\n            this.updateTree(this.networkGraph, true);\n        }\n    }\n\n    resetTree(clearSearch) {\n        this.resetSearchNode();\n        if (clearSearch) {\n            this.clearSearchFilter();\n            this.clearSearchType();\n        }\n        for (let i = this.openNodes.length - 1; i > 0; i--) {\n            const d = this.openNodes[i];\n            if (d && d.children) {\n                d._children = d.children;\n                d.children = null;\n                this.updateTree(d);\n            }\n        }\n        for (let i = this.nodes.length - 1; i > 0; i--) {\n            const d = this.nodes[i];\n            if (d && d.children) {\n                d._children = d.children;\n                d.children = null;\n                this.updateTree(d);\n            }\n        }\n\n        this.clearSearchLinkColors();\n        this.openNodes = [];\n        this.sizeToFit();\n        this.resetZoom();\n    }\n    expand(d) {\n        if (d._children) {\n            d.children = d._children;\n            d._children = null;\n        }\n    }\n\n    collapse() {\n        for (let i = this.openNodes.length - 1; i > 0; i--) {\n            const d = this.nodes[i];\n            if (d.children) {\n                d._children = d.children;\n                d.children = null;\n                this.updateTree(d);\n            }\n        }\n    }\n   findModelName() {\n    return this.resourceType;\n   }\n   async searchObjectsUsingApi() {\n          this.isLoading = true;\n          const model_name = this.findModelName();\n          this.searchWord = _.clone(this.filterText);\n          const str = `${this.resourceType}?filter=%20name%20contains%20%22${this.searchWord}%22&limit=5&offset=0&sort=name%20%20asc`;\n          return await this.zitiService\n          .call(str)\n          .then((result:any) => {\n            this.isLoading = false;\n            this.autocompleteOptions = [];\n            this.searchCache = result.data;\n           result.data.forEach( (res) => {\n            /* const obj: { [key: string]: string } = {\n               id: res.id,\n               name: res.name,\n             }; */\n             this.autocompleteOptions.push(res.name);\n           } );\n           this.noSearchResults = true;\n           const countA =  result.data?.length > 0? result.data.length : 0;\n           this.filerResponseMessage = \"search word:'\"+ this.searchWord +\"',  result: top \"+ countA +\" of  \"+result.meta.pagination.totalCount +\" records\";\n          }).catch( (error) => {\n           this.isLoading = false;\n           this.logger.error(error.message);\n           });\n\n   }\n\n   filterSearchArray() {\n        if (_.isEmpty(this.resourceType)) {\n            this.autocompleteOptions = [];\n            this.resourceTypeError = !_.isEmpty(this.filterText);\n            return;\n        }\n        this.autocompleteOptions = [];\n\n        if (this.resourceType === 'service-policies' && this.all_service_policies_fetched) {\n            this.autocompleteOptions = this.servicePoliciesTreeNodes.filter((option) =>\n                option.toLowerCase().includes(this.filterText.toLowerCase())\n            );\n        } else if (this.resourceType === 'service-policies' && !this.all_service_policies_fetched) {\n           this.searchObjectsUsingApi();\n        } else if (this.resourceType === 'services'  && this.all_services_fetched) {\n            this.autocompleteOptions = this.servicesTreeNodes.filter((option) =>\n                option.toLowerCase().includes(this.filterText.toLowerCase())\n            );\n        } else if (this.resourceType === 'services'  && !this.all_services_fetched) {\n           this.searchObjectsUsingApi();\n        } else if (this.resourceType === 'identities' && this.all_identities_fetched) {\n            this.autocompleteOptions = this.identitiesTreeNodes.filter((option) =>\n                option.toLowerCase().includes(this.filterText.toLowerCase())\n            );\n        } else if (this.resourceType === 'identities' && !this.all_identities_fetched) {\n           this.searchObjectsUsingApi();\n        } else if (this.resourceType === 'edge-routers' && this.all_edgerouters_fetched) {\n            this.autocompleteOptions = this.edgeroutersTreeNodes.filter((option) =>\n                option.toLowerCase().includes(this.filterText.toLowerCase())\n            );\n        } else if (this.resourceType === 'edge-routers' && !this.all_edgerouters_fetched) {\n           this.searchObjectsUsingApi();\n        } else if (this.resourceType === 'edge-router-policies' && this.all_edge_router_policies_fetched) {\n            this.autocompleteOptions = this.erPoliciesTreeNodes.filter((option) =>\n                option.toLowerCase().includes(this.filterText.toLowerCase())\n            );\n        } else if (this.resourceType === 'edge-router-policies' && !this.all_edge_router_policies_fetched) {\n           this.searchObjectsUsingApi();\n        } else if (this.resourceType === 'service-edge-router-policies' && this.all_service_router_policies_fetched) {\n            this.autocompleteOptions = this.serviceEdgeRouterPolicyTreeNodes.filter((option) =>\n                option.toLowerCase().includes(this.filterText.toLowerCase())\n            );\n        } else if (this.resourceType === 'service-edge-router-policies' && !this.all_service_router_policies_fetched) {\n           this.searchObjectsUsingApi();\n        }\n   }\n   zoomIn() {\n\n   }\n   zoomOut() {\n\n   }\n   clearSearchFilter() {\n      this.filterText = '';\n      this.resetAutoCompleteOptions();\n      this.resourceTypeError = false;\n      // this.filterSearchArray();\n      this.resetSearchNode();\n      this.collapse();\n      this.clearSearchLinkColors();\n   }\n\n   resetAutoCompleteOptions(){\n      this.searchCache = [];\n      this.filerResponseMessage = 'search filter..';\n        if (this.resourceType === 'service-policies' && this.all_service_policies_fetched) {\n            this.autocompleteOptions = this.servicePoliciesTreeNodes.filter((option) =>\n                this.filterText==='' || option.toLowerCase().includes(this.filterText.toLowerCase())\n            );\n        } else if (this.resourceType === 'service-policies' && !this.all_service_policies_fetched) {\n           this.autocompleteOptions = [];\n        } else if (this.resourceType === 'services'  && this.all_services_fetched) {\n            this.autocompleteOptions = this.servicesTreeNodes.filter((option) =>\n                this.filterText==='' || option.toLowerCase().includes(this.filterText.toLowerCase())\n            );\n        } else if (this.resourceType === 'services'  && !this.all_services_fetched) {\n           this.autocompleteOptions = [];\n        } else if (this.resourceType === 'identities' && this.all_identities_fetched) {\n            this.autocompleteOptions = this.identitiesTreeNodes.filter((option) =>\n                this.filterText==='' || option.toLowerCase().includes(this.filterText.toLowerCase())\n            );\n        } else if (this.resourceType === 'identities' && !this.all_identities_fetched) {\n           this.autocompleteOptions = [];\n        } else if (this.resourceType === 'edge-routers' && this.all_edgerouters_fetched) {\n            this.autocompleteOptions = this.edgeroutersTreeNodes.filter((option) =>\n                this.filterText==='' || option.toLowerCase().includes(this.filterText.toLowerCase())\n            );\n        } else if (this.resourceType === 'edge-routers' && !this.all_edgerouters_fetched) {\n           this.autocompleteOptions = [];\n        } else if (this.resourceType === 'edge-router-policies' && this.all_edge_router_policies_fetched) {\n            this.autocompleteOptions = this.erPoliciesTreeNodes.filter((option) =>\n                this.filterText==='' || option.toLowerCase().includes(this.filterText.toLowerCase())\n            );\n        } else if (this.resourceType === 'edge-router-policies' && !this.all_edge_router_policies_fetched) {\n           this.autocompleteOptions = [];\n        } else if (this.resourceType === 'service-edge-router-policies' && this.all_service_router_policies_fetched) {\n            this.autocompleteOptions = this.serviceEdgeRouterPolicyTreeNodes.filter((option) =>\n                this.filterText==='' || option.toLowerCase().includes(this.filterText.toLowerCase())\n            );\n        } else if (this.resourceType === 'service-edge-router-policies' && !this.all_service_router_policies_fetched) {\n           this.autocompleteOptions = [];\n        }\n   }\n\n   clearSearchType() {\n        this.resourceType = '';\n        this.autocompleteOptions = [];\n   }\n\n   resetZoom() {\n       // const currentZoom = this.getZoomScale();\n       const transform: any = this.transform || _.cloneDeep(d3.zoomIdentity);\n       transform.k = 1;\n       this.svg.attr('transform', transform);\n   }\n\n  graphCollapse(d) {\n       if (d.data.rootNode === 'Yes') {\n           d.data.clickProcess = 'Not Yet';\n           d._children = null;\n       }\n       if (d.children) {\n           d._children = d.children;\n           d._children && d._children?.find(nd => this.graphCollapse);\n           d.children = null;\n       }\n  }\n\n  initTopoView() {\n        this.autocompleteOptions = [];\n        const margin = { top: 20, right: 190, bottom: 30, left: 0 };\n        const width = window.innerWidth -  margin.right;\n        const height = window.innerHeight - margin.bottom;\n\n        this.treetooltip = d3.select('#tooltip');\n\n        this.resourceTypeError = false;\n        this.filterText = '';\n        this.resourceType = '';\n\n        const handleZoom = (e) => {\n            this.svg.attr('transform', e.transform);\n        };\n        this.zoom = d3.zoom().on('zoom', handleZoom);\n\n        this.svg = d3\n            .select('#NetworkVisualizerSVG')\n            .attr('width', '100%')\n            .attr('height', '100%')\n            .call(this.zoom)\n            .attr('viewBox', '-20 -450 ' + (width - margin.top*2 - margin.bottom) + ' ' + +(height*2 -margin.bottom))\n            .append('g')\n            .attr('transform', 'translate(' + -20 + ',' + 200 + ')');\n\n        d3.select('body').on('click', function () {\n            d3.select('#topocontextmenu').style('display', 'none');\n        });\n\n        d3.selectAll('g > *').remove();\n        this.treemap = d3.tree().nodeSize([85, 5]);\n        this.networkGraph.x = 100; // height / 4;\n        this.networkGraph.y = 100;\n        this.networkGraph.children.forEach(collapse);\n       // this.networkGraph.children.forEach( (nd:any) =>  this.graphCollapse(nd) );\n        this.updateTree(this.networkGraph);\n\n        _.delay(() => {\n            this.transform = d3.zoomIdentity;\n            this.transform.x = -200;\n            this.transform.y = 205;\n            this.transform.k = 1;\n            this.svg.transition().duration(750).attr('transform', this.transform);\n        }, 600);\n\n        function collapse(d) {\n            if (d.data.rootNode === 'Yes') {\n                d.data.clickProcess = 'Not Yet';\n                d._children = null;\n            }\n            if (d.children) {\n                d._children = d.children;\n                d._children.forEach(collapse);\n                d.children = null;\n            }\n        }\n  }\n\n    updateTree(source, doReset = false) {\n        if (doReset) {\n            d3.selectAll('g > *').remove();\n        }\n        const duration = 750;\n        try {\n            this.treeData = this.treemap(this.networkGraph);\n            this.nodes = this.treeData.descendants();\n            this.links = this.treeData.descendants().slice(1);\n        } catch (e:any) {\n          this.logger.error('Error in building tree object: '+ e.message);\n        }\n        const svgDefs = this.svg.append('defs');\n        const linearGradient = svgDefs.append('linearGradient').attr('id', 'NodeGradient');\n        linearGradient.append('stop').attr('class', 'stop1').attr('offset', '0%');\n        linearGradient.append('stop').attr('class', 'stop2').attr('offset', '50%');\n        linearGradient.append('stop').attr('class', 'stop3').attr('offset', '100%');\n\n        const linearGradient2 = svgDefs.append('linearGradient').attr('id', 'NodeHoverGradient');\n        linearGradient2.append('stop').attr('class', 'stop1a').attr('offset', '0%');\n        linearGradient2.append('stop').attr('class', 'stop2a').attr('offset', '50%');\n        linearGradient2.append('stop').attr('class', 'stop3a').attr('offset', '100%');\n\n        this.nodes.forEach(function (d) {\n            d.y = d.depth * 400;\n        });\n        this.node = this.svg.selectAll('g.node').data(this.nodes, function (d) {\n            return d.data.id;\n        });\n\n        this.nodeEnter = this.node\n            .enter()\n            .append('g')\n            .attr('class', (d) => {\n                let className = '';\n\n                if (_.startsWith(d.data.name, 'Edge Routers') || _.includes(d.data.type, 'Edge Router')) {\n                    className = 'edge-router';\n                }\n                if (_.includes(d.data.name, 'Identities') || _.includes(d.data.name, 'Identity') || _.includes(d.data.name, 'Associated Identities') || _.includes(d.data.type, 'Identity') || _.includes(d.data.type, 'BrowZer Identity')) {\n                    className = 'endpoint';\n                }\n                if (_.startsWith(d.data.name, 'Services') || _.startsWith(d.data.type, 'Service')) {\n                    className = 'service';\n                }\n                if (_.startsWith(d.data.name, 'Bind-Services') || _.startsWith(d.data.name, 'Dial-Services')) {\n                    className = 'service';\n                }\n                if (_.startsWith(d.data.name, 'Bind-Policies') || _.startsWith(d.data.name, 'Dial-Policies') || _.startsWith(d.data.name, 'Bind Policy') ) {\n                     className = 'service-policy';\n                }\n                if (_.includes(d.data.name, 'Service Policies') || _.includes(d.data.type, 'Service Policy')) {\n                    className = 'service-policy';\n                }\n                if (_.startsWith(d.data.name, 'Edge Router Policies') || _.startsWith(d.data.type, 'Edge Router Policy')) {\n                    className = 'edge-router-policy';\n                }\n                if (\n                    _.startsWith(d.data.name, 'Service Edge Router Policies') ||\n                    _.startsWith(d.data.type, 'Service Router Policy')\n                ) {\n                    className = 'service-edge-router-policy';\n                }\n\n                className = d._children ? 'node ' + className : 'node terminate ' + className;\n\n                return className;\n            })\n            .attr('transform', function (d) {\n                if (source && source.x) {\n                    return 'translate(' + source.y + ',' + source.x + ')';\n                } else {\n                    return 'translate(' + d.y + ',' + d.x + ')';\n                }\n            });\n\n        this.nodeEnter.on('contextmenu', (event, d) => {\n            event.preventDefault();\n            d3.select('#tooltip').style('display', 'none');\n            const nw = this.currentNetwork;\n            const rawEdgerouters = this.edgerouters;\n            const rawEndpoints = this.identities;\n            const rawAppwans = this.service_policies;\n            const edgeRouterPolicies = this.edge_router_policies;\n\n            if (d && d.data && d.data.contextMenu === 'Yes') {\n                d3.select('#topocontextmenu')\n                    .style('position', 'absolute')\n                    .style('left', event.offsetX + 'px')\n                    .style('top', event.offsetY + 'px')\n                    .style('display', 'block');\n            } else {\n                return;\n            }\n            let obj = null;\n            if (d && d.data && (d.data.type === 'Identity' || d.data.type === 'BrowZer Identity' ) ) {\n               if(d.data.status === \"Registered\") {\n                  enableLi('#liSingleUT');\n                  enableLi('#liFLSingleRouter');\n                  enableLi('#liSingleLT');\n               } else {\n                  disableLi('#liSingleUT');\n                  disableLi('#liFLSingleRouter');\n                  disableLi('#liSingleLT');\n               }\n                enableLi('#liMet');\n                enableLi('#liVC');\n                enableLi('#liEV');\n                disableLi('#liIns');\n                disableLi('#liAL');\n                disableLi('#liEPs');\n                disableLi('#liFLAll');\n                disableLi('#liFLSingleRouter');\n                disableLi('#liSingleLT');\n                disableLi('#liCL');\n                disableLi('#liLT');\n\n                this.contextmenuNodeType = 'identity';\n            } else if (d && d.data && d.data.type === 'Edge Router') {\n              if(d.data.status === \"PROVISIONED\") {\n                enableLi('#liSingleUT');\n                enableLi('#liFLSingleRouter');\n                enableLi('#liSingleLT');\n              } else {\n                disableLi('#liSingleUT');\n                disableLi('#liFLSingleRouter');\n                disableLi('#liSingleLT');\n                }\n                enableLi('#liMet');\n                enableLi('#liVC');\n                disableLi('#liIns');\n                disableLi('#liEV');\n                enableLi('#liAL');\n                disableLi('#liEPs');\n                disableLi('#liFLAll');\n\n                disableLi('#liCL');\n                disableLi('#liLT');\n                this.contextmenuNodeType = 'edge-router';\n\n            } else if (d && d.data && d.data.type === 'Service') {\n                enableLi('#liMet');\n                enableLi('#liVC');\n                disableLi('#liIns');\n                disableLi('#liEV');\n                disableLi('#liAL');\n                enableLi('#liEPs');\n                disableLi('#liFLAll');\n                disableLi('#liFLSingleRouter');\n                disableLi('#liSingleLT');\n                disableLi('#liCL');\n                disableLi('#liLT');\n                enableLi('#liSingleUT');\n                this.contextmenuNodeType = 'service';\n\n            } else if (d && d.data && d.data.type === 'Service Policy') {\n                disableLi('#liMet');\n                enableLi('#liVC');\n                disableLi('#liIns');\n                disableLi('#liEV');\n                disableLi('#liAL');\n                disableLi('#liEPs');\n                disableLi('#liFLAll');\n                disableLi('#liFLSingleRouter');\n                disableLi('#liSingleLT');\n                disableLi('#liCL');\n                disableLi('#liLT');\n                disableLi('#liSingleUT');\n\n                this.contextmenuNodeType = 'service-policy';\n            } else if (d && d.data && d.data.type === 'Edge Router Policy') {\n                disableLi('#liMet');\n                disableLi('#liIns');\n                enableLi('#liVC');\n                disableLi('#liEV');\n                disableLi('#liAL');\n                disableLi('#liEPs');\n                disableLi('#liFLSingleRouter');\n                disableLi('#liSingleLT');\n                disableLi('#liFLAll');\n                disableLi('#liCL');\n                disableLi('#liLT');\n                disableLi('#liSingleUT');\n                this.contextmenuNodeType = 'router-policy';\n\n            } else if (d && d.data && d.data.type === 'Network') {\n                enableLi('#liMet');\n                disableLi('#liIns');\n                enableLi('#liVC');\n                disableLi('#liEV');\n                enableLi('#liAL');\n                disableLi('#liEPs');\n                enableLi('#liFLAll');\n                disableLi('#liFLSingleRouter');\n                disableLi('#liSingleLT');\n                enableLi('#liCL');\n                enableLi('#liLT');\n                disableLi('#liSingleUT');\n                this.contextmenuNodeType = 'network';\n                obj = nw;\n            } else if (d && d.data && d.data.type === 'Service Router Policy') {\n                disableLi('#liMet');\n                disableLi('#liIns');\n                enableLi('#liVC');\n                disableLi('#liEV');\n                disableLi('#liAL');\n                disableLi('#liEPs');\n                disableLi('#liFLAll');\n                disableLi('#liFLSingleRouter');\n                disableLi('#liSingleLT');\n                disableLi('#liCL');\n                disableLi('#liLT');\n                disableLi('#liSingleUT');\n                this.contextmenuNodeType = 'service-router-policy';\n\n            }\n            this.contextmenuNode = obj;\n            d3.select('#tooltip').style('display', 'none');\n        });\n\n        this.circles = this.nodeEnter\n            .append('circle')\n            .attr('class', 'node')\n            .attr('r', 10)\n            .style('fill', function (d) {\n                return d._children ? 'var(--tableText)' : '#fff';\n            })\n            .on('mousemove', (event, d) => {\n                this.drawTreeTooltip(event, d);\n            })\n            .on('mouseout', this.removeTreeTooltip)\n            .on('contextmenu', (event) => {\n                event.preventDefault();\n            })\n            .on('click', async ( event, d: any) => {\n               if (d.data.rootNode && d.data.rootNode === 'Yes' && d.data.clickProcess === 'Not Yet') {\n                     d3.select(event.currentTarget).transition()\n                      .duration(400)\n                      .style(\"1stroke-width\", \"10\")\n                      .transition()\n                      .duration(1600)\n                      .style(\"stroke-width\", \"6\")\n                      .transition()\n                      .duration(600)\n                      .style(\"stroke-width\", \"3\")\n                      .transition()\n                      .duration(1600)\n                      .style(\"stroke-width\", \"6\")\n                      .transition()\n                      .duration(600)\n                      .style(\"stroke-width\", \"9\")\n                      .transition()\n                      .duration(1000)\n                      .style(\"stroke-width\", \"12\");\n               }\n                if (d && d.data && d.data.contextMenu === 'Yes') {\n                    d3.select('#topocontextmenu').style('display', 'none');\n                }\n                d3.select('#tooltip').style('display', 'none');\n                if (d.children && d.children.length > 0) {\n                    const index = this.openNodes.indexOf(d.data.id, 0);\n                    if (index > -1) {\n                        this.openNodes.splice(index, 1);\n                    }\n                    d._children = d.children;\n                    d.children = null;\n                } else {\n                    if (this.openNodes.indexOf(d.data.id) < 0) {\n                        this.openNodes.push(d.data.id);\n                    }\n                    if (d.data.clickProcess === 'Not Yet') {\n                        let transitionLoop = true;\n                          d._children = null;\n                        if (\n                            d.data &&\n                            d.data.rootNode &&\n                            d.data.rootNode === 'Yes' &&\n                            (d.data.type === 'Identity' ||\n                            d.data.type === 'BrowZer Identity') &&\n                            !d.children &&\n                            !d._children\n                        ) {\n                            d.data.clickProcess = 'Completed';\n                            const arr =  await this.treeNodeProcessor.processIdentitiesForNodeClick(\n                                d,\n                                this.networkGraph,\n                                this.identities,\n                                this.uniqId,\n                                this.zitiService,\n                                this.configs\n                            );\n                            this.uniqId = arr[1];\n                            this.networkGraph = arr[0];\n                            this.networkGraph.children.find((nd) => {\n                                collapseFew(nd, this.openNodes);\n                            });\n                            this.updateTree(d);\n                        } else if (\n                            d.data &&\n                            d.data.rootNode &&\n                            d.data.rootNode === 'Yes' &&\n                            d.data.type === 'Service' &&\n                            !d.children &&\n                            !d._children\n                        ) {\n                            d.data.clickProcess = 'Completed';\n                            const arr = await this.treeNodeProcessor.processServicesForNodeClick(\n                                d,\n                                this.networkGraph,\n                                this.services,\n                                this.uniqId,\n                                this.zitiService\n                            );\n                            this.uniqId = arr[1];\n                            this.networkGraph = arr[0];\n                            this.networkGraph.children.find((nd) => {\n                                collapseFew(nd, this.openNodes);\n                            });\n                            this.updateTree(d);\n                        } else if (\n                            d.data &&\n                            d.data.rootNode &&\n                            d.data.rootNode === 'Yes' &&\n                            d.data.type === 'Service Policy' &&\n                            !d.children &&\n                            !d._children\n                        ) {\n                            d.data.clickProcess = 'Completed';\n                            const arr = await this.treeNodeProcessor.processServicePoliciesForNodeClick(\n                                d,\n                                this.networkGraph,\n                                this.service_policies,\n                                this.uniqId,\n                                this.zitiService\n                            );\n                            this.uniqId = arr[1];\n                            this.networkGraph = arr[0];\n                            this.networkGraph.children.find((nd) => {\n                                collapseFew(nd, this.openNodes);\n                            });\n                            this.updateTree(d);\n                        } else if (\n                            d.data &&\n                            d.data.rootNode &&\n                            d.data.rootNode === 'Yes' &&\n                            d.data.type === 'Edge Router' &&\n                            !d.children &&\n                            !d._children\n                        ) {\n                           d.data.clickProcess = 'Completed';\n                            const arr = await this.treeNodeProcessor.processEdgeroutersForNodeClick(\n                                d,\n                                this.networkGraph,\n                                this.edgerouters,\n                                this.uniqId,\n                                this.zitiService\n                            );\n                            this.uniqId = arr[1];\n                            this.networkGraph = arr[0];\n                            this.networkGraph.children.find((nd) => {\n                                collapseFew(nd, this.openNodes);\n                            });\n                            this.updateTree(d);\n                        } else if (\n                            d.data &&\n                            d.data.rootNode &&\n                            d.data.rootNode === 'Yes' &&\n                            d.data.type === 'Edge Router Policy' &&\n                            !d.children &&\n                            !d._children\n                        ) {\n                           d.data.clickProcess = 'Completed';\n                            const arr = await this.treeNodeProcessor.processEdgeRouterPoliciesForNodeClick(\n                                d,\n                                this.networkGraph,\n                                this.edge_router_policies,\n                                this.uniqId,\n                                this.zitiService\n                            );\n                            this.uniqId = arr[1];\n                            this.networkGraph = arr[0];\n                            this.networkGraph.children.find((nd) => {\n                                collapseFew(nd, this.openNodes);\n                            });\n                            this.updateTree(d);\n                        } else if (\n                            d.data &&\n                            d.data.rootNode &&\n                            d.data.rootNode === 'Yes' &&\n                            d.data.type === 'Service Router Policy' &&\n                            !d.children &&\n                            !d._children\n                        ) {\n                           d.data.clickProcess = 'Completed';\n                            const arr = await this.treeNodeProcessor.processServiceEdgeRouterPoliciesForNodeClick(\n                                d,\n                                this.networkGraph,\n                                this.service_router_policies,\n                                this.uniqId,\n                                this.zitiService\n                            );\n\n                            this.uniqId = arr[1];\n                            this.networkGraph = arr[0];\n                            this.networkGraph.children.find((nd) => {\n                                collapseFew(nd, this.openNodes);\n                            });\n                            this.updateTree(d);\n                        } else {\n                            d.children = d._children;\n                        }\n                    } else {\n                        d.children = d._children;\n                    }\n                    if (d._children) {\n                        d._children = null;\n                    }\n                }\n\n                if (d.children || d._children) {\n                    this.updateTree(d);\n                }\n\n                const rootNode = _.get(d, 'data.children[0].rootNode', '');\n                const subrootNode = _.get(d, 'data.rootNode', '');\n                if (rootNode === 'Yes' || subrootNode === 'Yes') {\n                    rootNodeisYesColorChange();\n                }\n            });\n\n        this.nodeEnter\n            .append('foreignObject')\n            .attr('height', '50')\n            .attr('width', function (d) {\n                return d && d.data && d.data.name.length >= 20? '550': '330';\n            })\n            .attr('x', '20')\n            .attr('y',  function (d) {\n                 return d && d.data && d.data.rootNode==='Yes'? '-5': '-40';\n             })\n            .append('xhtml:body')\n            .style('background', 'transparent')\n            .html(function (d) {\n                return `<div class=\"node-text-container\"><span>${d.data.name}</span></div>`;\n            });\n\n        this.nodeUpdate = this.nodeEnter.merge(this.node);\n\n        this.nodeUpdate\n            .transition()\n            .duration(duration)\n            .attr('transform', function (d) {\n                return 'translate(' + d.y + ',' + d.x + ')';\n            });\n\n        this.nodeUpdate.select('circle.node').attr('r', 18).attr('cursor', 'pointer');\n\n        this.nodeExit = this.node\n            .exit()\n            .transition()\n            .duration(duration)\n            .attr('transform', function (d) {\n                if (source && source.x) {\n                    return 'translate(' + source.y + ',' + source.x + ')';\n                } else {\n                    return 'translate(' + d.y + ',' + d.x + ')';\n                }\n            })\n            .remove();\n\n        this.nodeExit.select('circle').attr('r', 0);\n        this.nodeExit.select('text').style('fill-opacity', 10);\n        this.link = this.svg.selectAll('path.link').data(this.links, function (d) {\n            return d.data.id;\n        });\n        this.linkUpdate = this.link\n            .enter()\n            .insert('path', 'g')\n            .attr('class', 'link')\n            .attr('d', function (d) {\n                let o;\n                if (source && source.x) {\n                    o = { x: source.x, y: source.y };\n                } else {\n                    o = { x: d.x, y: d.y };\n                }\n                return diagonal(o, o, '1');\n            })\n            .merge(this.link);\n\n        this.linkUpdate\n            .transition()\n            .duration(duration)\n            .attr('d', function (d) {\n                return diagonal(d, d.parent, '2');\n            });\n\n        this.linkExit = this.link\n            .exit()\n            .transition()\n            .duration(duration)\n            .attr('d', function (d) {\n                let o;\n                if (source && source.x) {\n                    o = { x: source.x, y: source.y };\n                } else {\n                    o = { x: d.x, y: d.y };\n                }\n                return diagonal(o, o, '3');\n            })\n            .remove();\n\n        this.nodes.forEach(function (d: any) {\n            d.x0 = d.x;\n            d.y0 = d.y;\n        });\n\n        function disableLi(liId) {\n            d3.select(liId).style('display', 'none');\n        }\n\n        function enableLi(liId) {\n            d3.select(liId).style('display', 'block');\n        }\n\n        function diagonal(s, d, lg) {\n            const path = `M ${s.y} ${s.x}\n             C ${(s.y + d.y) / 2} ${s.x},\n               ${(s.y + d.y) / 2} ${d.x},\n               ${d.y} ${d.x}`;\n\n            return path;\n        }\n\n        function rootNodeisYesColorChange() {\n            d3.selectAll('circle').each(function (d: any) {\n                const rootNode = _.get(d, 'data.rootNode', '');\n                const clickProcess = _.get(d, 'data.clickProcess', '');\n                if (rootNode === 'Yes' && clickProcess === 'Not Yet') {\n                    d3.select(this).style('fill', 'brown');\n                } else if (rootNode === 'Yes' && clickProcess !== 'Not Yet') {\n                    const color = d._children ? 'var(--tableText)' : '#fff';\n                    d3.select(this).style('fill', color);\n                }\n            });\n        }\n\n        function collapseFew(_nd, openNodes) {\n            if (_nd.data.id === '#all') {\n                return;\n            }\n            if (_nd.data.rootNode === 'Yes' && _nd.data.clickProcess === 'Not Yet') {\n                _nd._children = [];\n            }\n            if (_nd.children && openNodes.indexOf(_nd.data.id) < 0) {\n                _nd._children = _nd.children;\n                if (_nd._children)\n                    _nd._children.find((_nd) => {\n                        collapseFew(_nd, openNodes);\n                    });\n                _nd.children = null;\n            }\n\n            if (_nd.children && openNodes.indexOf(_nd.data.id) >= 0) {\n                if (_nd.children)\n                    _nd.children.find((_nd) => {\n                        collapseFew(_nd, openNodes);\n                    });\n            }\n        }\n\n        if (source.children === null) {\n            _.delay(this.sizeToFit.bind(this), 650);\n        }\n    } // end of updateTree\n\n    sizeToFit() {\n        const boundingBox = this.svg._groups[0][0].getBoundingClientRect();\n        const bottomDelta = boundingBox.height - 100 - -boundingBox.top;\n        const topDelta = boundingBox.height + 500 - boundingBox.bottom;\n        const topOutOfView = topDelta < 0;\n        const bottomOutOfView = bottomDelta < 0;\n\n        if (bottomOutOfView || topOutOfView) {\n            const trans = this.transform;\n            trans.y = topOutOfView ? 400 : 0;\n            this.svg.transition().duration(750).attr('transform', trans);\n        }\n    }\n\n    setColor(d) {\n        if (d.status === 'Error' && d.group === 3) {\n            return 'red';\n        } else if (d.status !== 'Error' && d.group === 3) {\n            return 'var(--tableText)';\n        } else {\n            return 'var(--tableText)';\n        }\n    }\n\n    ticked() {\n        this.links\n            .attr('x1', function (d) {\n                return d.source.x;\n            })\n            .attr('y1', function (d) {\n                return d.source.y;\n            })\n            .attr('x2', function (d) {\n                return d.target.x;\n            })\n            .attr('y2', function (d) {\n                return d.target.y;\n            });\n\n        this.nodes.attr('transform', function (d) {\n            return 'translate(' + d.x + ',' + d.y + ')';\n        });\n    }\n\n    isAnObject(o) {\n        return o instanceof Object && o.constructor === Object;\n    }\n\n    readObjectValues(linkObject) {\n        let info = '<span style=\"font-size:12px;font-family: sans-serif\">';\n        const keys = Object.keys(linkObject.data);\n        keys.forEach( (k) => {\n            if (this.isAnObject(linkObject.data[k])) {\n                const kVal: any = linkObject.data[k];\n                info = info + '   ' + k + '  :  ' + kVal.id + '<br>';\n            } else {\n                info = info + '   ' + k + '  :  ' + linkObject.data[k] + '<br>';\n            }\n        });\n        return info + '</span>';\n    }\n\n    nodeColor(d) {\n        if (d.status === 'Error') {\n            return '#FF0000';\n        } else {\n            return 'blue';\n        }\n    }\n\n    dragstarted(event, d) {\n        if (!event.active) {\n            this.simulation.alphaTarget(0.3).restart();\n        }\n        d.fx = d.x;\n        d.fy = d.y;\n    }\n\n    dragged(d) {\n        d.fx = d.x;\n        d.fy = d.y;\n    }\n\n    dragended(event, d) {\n        if (!event.active) {\n            this.simulation.alphaTarget(0);\n        }\n\n        d.fx = null;\n        d.fy = null;\n    }\n    removeTreeTooltip() {\n        this.treetooltip = d3.select('#tooltip');\n        if (this.treetooltip) {\n            this.treetooltip.style('display', 'none');\n        }\n    }\n    drawTreeTooltip(event, s) {\n        this.treetooltip = d3.select('#tooltip');\n        this.treetooltip.style('display', 'block');\n        const x = event.pageX + 'px';\n        const y = event.pageY + 15 + 'px';\n        this.treetooltip.style('left', x);\n        this.treetooltip.style('top', y);\n        document.getElementById('tooltip').innerHTML = this.readTreeKeyValues(event, s);\n    }\n    readTreeKeyValues(event, d) {\n      const startIndex = d.data.name.indexOf('(');\n      const finIndex = d.data.name.indexOf(')');\n      const countStr:number = startIndex >0? d.data.name.substring(startIndex + 1, finIndex): 0;\n        let info = `<div class='tool-tip-container'>`;\n        const keys = Object.keys(d.data); // mp.keys();\n        keys.forEach(function (k) {\n            if (\n                k === 'firstChild' ||\n                k === 'protocol' ||\n                k === 'contextMenu' ||\n                k === 'uuid' ||\n                k === 'lastId' ||\n                k === 'clickProcess' ||\n                k === 'rootNode' ||\n                k === 'id' ||\n                k === 'children' ||\n                k === 'parent' ||\n                k === 'depth' ||\n                k === 'x' ||\n                k === 'y' ||\n                k === 'rootNode' ||\n                k === 'x0' ||\n                k === 'y0'\n            ) {\n                // continue;\n            } else if (d[k] instanceof Array) {\n                info =\n                    info +\n                    '<div class=\"prop-row\"><div class=\"prop-name\">' +\n                    k +\n                    ':</div><div class=\"prop-val\">' +\n                    d[k].join('<br> &nbsp;&nbsp; &nbsp;&nbsp;') +\n                    '</div></div>';\n            } else {\n                const propVal = d.data[k] || '';\n                info = info + '<div class=\"prop-row\"><div class=\"prop-name\">' + k + ':</div><div class=\"prop-val\">' + propVal + '</div></div>';\n            }\n        });\n        if (d.data.firstChild && d.data.firstChild === 'Yes' && countStr > this.maxObjectsPerNode-1) {\n             info = info + '<span class=\"tooltip-help-text\">Note: expand node disabled. Use search filter.</span>';\n        } else if (d.data.firstChild && d.data.firstChild === 'Yes' && countStr < this.maxObjectsPerNode){\n             info = info + '<span class=\"tooltip-help-text\">Note: click to expand child nodes </span>';\n        }\n        return info + '</div>';\n    }\n\n}\n\n","<div class=\"ziti-page-container ziti-identities-container\">\n\n  <div class=\"nf-network-topology-container\" >\n\n    <div class=\"css-header\">{{title}} </div><br>\n\n    <div  class=\"nf-net-vis-controls-header\">\n      <div class=\"nf-topology-zoom-container\">\n      <!--button (click)=\"zoomOut()\" class=\"nf-topology-zoom-button minus\"></button>\n      <button (click)=\"zoomIn()\" class=\"nf-topology-zoom-button plus\"></button-->\n      <div (click)=\"resetTree('Yes')\" class=\"reset-button\" title=\"Reset\"></div>\n    </div>\n    <select\n      (change)=\"resourceTypeChanged()\"\n      [(ngModel)]=\"resourceType\"\n      [ngClass]=\"{ 'resource-type-error': resourceTypeError }\"\n      class=\"resource-type-select\"\n      id=\"ResourceTypeSelect\"\n      >\n      <option value=\"\">Select Resource Type</option>\n      <option value=\"service-policies\">Service Policies</option>\n      <option value=\"services\">Services</option>\n      <option value=\"identities\">Identities</option>\n      <option value=\"edge-routers\">Edge Routers</option>\n      <option value=\"edge-router-policies\">Edge Router Policies</option>\n      <option value=\"service-edge-router-policies\">Service Edge Router Policies</option>\n    </select>\n\n    <div class=\"nf-net-vis-filter-container listBox row\">\n      <input\n        (keyup)=\"nwSearchChange($event)\"\n        [(ngModel)]=\"filterText\"\n        [matAutocomplete]=\"auto\"\n        class=\"nf-topology-filter-input\"\n        id=\"filterText\"\n        matInput\n        placeholder=\"Type to Filter\"\n        />\n\n      @if (filterText !== '') {\n        <div\n          (click)=\"clearSearchFilter()\"\n          class=\"buttonBall close icon-close\"\n          id=\"ClearSearchFilter\"\n        ></div>\n      }\n\n      <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"autocompleteSearch($event)\">\n        @for (option of autocompleteOptions; track option) {\n          <mat-option [value]=\"option\">\n            {{ option }}\n          </mat-option>\n        }\n      </mat-autocomplete>\n    </div>\n  </div>\n\n  <div class=\"nf-topology-legend\">\n    <div class=\"legend-item\">\n      <div class=\"legend-circle servicepolicies\"></div>\n      <div class=\"legend-text\">Service Policies</div>\n    </div>\n    <div class=\"legend-item\">\n      <div class=\"legend-circle services\"></div>\n      <div class=\"legend-text\">Services</div>\n    </div>\n    <div class=\"legend-item\">\n      <div class=\"legend-circle endpoints\"></div>\n      <div class=\"legend-text\">Identities</div>\n    </div>\n    <div class=\"legend-item\">\n      <div class=\"legend-circle edgerouters\"></div>\n      <div class=\"legend-text\">Edge Routers</div>\n    </div>\n    <div class=\"legend-item\">\n      <div class=\"legend-circle erpolicies\"></div>\n      <div class=\"legend-text\">Edge Router Policies</div>\n    </div>\n    <div class=\"legend-item\">\n      <div class=\"legend-circle serviceerpolicies\"></div>\n      <div class=\"legend-text\">Service Router Policies</div>\n    </div>\n\n    <div class=\"legend-item\">\n      <div class=\"node-expand-help\"></div>\n      <div class=\"legend-icon-text legend-associated-nodes\">View Associated Nodes</div>\n      <div class=\"legend-icon-pointer\"></div>\n    </div>\n  </div>\n\n  <div class=\"topotip\" id=\"tooltip\"></div>\n  <svg style='pointer-events:all' id=\"NetworkVisualizerSVG\"></svg>\n  @if (isLoading) {\n    <lib-loading-indicator [isLoading]=\"isLoading\"></lib-loading-indicator>\n  }\n</div>\n\n</div>\n","import {\n  Component,\n  EventEmitter,\n  Input,\n  OnInit,\n  OnDestroy,\n  Output,\n  OnChanges,\n  SimpleChanges,\n  AfterViewInit,\n  Inject\n} from '@angular/core';\nimport {Subscription} from 'rxjs';\nimport {ProjectableForm} from \"../projectable-form.class\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../../services/settings.service\";\n\nimport {isEmpty, delay, cloneDeep, isEqual, set, unset} from 'lodash';\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../services/ziti-data.service\";\nimport {GrowlerService} from \"../../messaging/growler.service\";\nimport {EDGE_ROUTER_EXTENSION_SERVICE, EdgeRouterFormService} from './edge-router-form.service';\nimport {MatDialog, MatDialogRef} from \"@angular/material/dialog\";\nimport {ExtensionService} from \"../../extendable/extensions-noop.service\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {EdgeRouter} from \"../../../models/edge-router\";\nimport {Location} from \"@angular/common\";\nimport { DEFAULT_APP_CONFIG } from '../../../ziti-console.constants';\nimport { DefaultAppConfig } from '../../../default-app-config';\n\n@Component({\n    selector: 'lib-edge-router-form',\n    templateUrl: './edge-router-form.component.html',\n    styleUrls: ['./edge-router-form.component.scss'],\n    providers: [\n        {\n            provide: MatDialogRef,\n            useValue: {}\n        }\n    ],\n    standalone: false\n})\nexport class EdgeRouterFormComponent extends ProjectableForm implements OnInit, OnChanges, OnDestroy, AfterViewInit {\n  @Input() edgeRouterRoleAttributes: any[] = [];\n  @Output() close: EventEmitter<any> = new EventEmitter<any>();\n\n  override entityType = 'edge-routers';\n  override entityClass = EdgeRouter;\n\n  formView = 'simple';\n  isEditing = false;\n  servicesLoading = false;\n  identitiesLoading = false;\n  authPolicies: any = [\n    {id: 'default', name: 'Default'}\n  ];\n\n  settings: any = {};\n\n  constructor(\n      @Inject(SETTINGS_SERVICE) protected override settingsService: SettingsService,\n      public svc: EdgeRouterFormService,\n      @Inject(ZITI_DATA_SERVICE) override zitiService: ZitiDataService,\n      growlerService: GrowlerService,\n      @Inject(EDGE_ROUTER_EXTENSION_SERVICE) extService: ExtensionService,\n      @Inject(DEFAULT_APP_CONFIG) public config: DefaultAppConfig,\n      protected override router: Router,\n      protected override route: ActivatedRoute,\n      location: Location,\n      dialogForm: MatDialog\n  ) {\n    super(growlerService, extService, zitiService, router, route, location, settingsService, dialogForm);\n    this.edgeRouterRoleAttributes = [];\n  }\n\n  override ngOnInit(): void {\n    super.ngOnInit();\n    this.subscription.add(\n      this.settingsService.settingsChange.subscribe((results:any) => {\n        this.settings = results;\n      })\n    );\n    this.subscription.add(\n      this.extService.formDataChanged.subscribe((data) => {\n        if (data.isEmpty) {\n          return;\n        }\n        this.formData = data;\n      })\n    );\n  }\n\n  override entityUpdated() {\n    super.entityUpdated();\n    if (this.formData.id) {\n      this.formData.badges = [];\n      this.formData.badges = [];\n      if (this.formData.isOnline) {\n        this.formData.badges.push({label: 'Online', class: 'online', circle: 'true'});\n      } else {\n        this.formData.badges.push({label: 'Offline', class: 'offline', circle: 'false'});\n      }\n      if (!this.formData.isVerified) {\n        this.formData.badges.push({label: 'Unverified', class: 'unreg'});\n      }\n      if (this.formData.versionInfo?.version) {\n        const version = this.formData.versionInfo?.version.replace(/^v/, '').trim()\n        this.formData.badges.push({label: `Version: ${version}`, class: 'offline'});\n      }\n    }\n    this.getEdgeRouterRoleAttributes();\n    this.svc.getAssociatedServices(this.formData.id);\n    this.svc.getAssociatedIdentities(this.formData.id);\n    this.svc.getAuthPolicies().then(result => {\n      this.authPolicies = result;\n    });\n    this.loadTags();\n    unset(this.formData, '_links');\n    this.initData = cloneDeep(this.formData);\n    this.extService.updateFormData(this.formData);\n  }\n\n  getEdgeRouterRoleAttributes() {\n    this.getRoleAttributes('edge-router-role-attributes').then((attributes) => {\n      this.edgeRouterRoleAttributes = attributes;\n    });\n  }\n\n  ngOnDestroy() {\n    this.extService?.closed?.emit({});\n    this.subscription.unsubscribe();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    this.isEditing = !isEmpty(this.formData.id);\n  }\n\n  get hasEnrolmentToken() {\n    return !isEmpty(this.formData.enrollmentJwt) || !isEmpty(this.formData.enrollmentToken);\n  }\n\n  multiActionRequested(action) {\n    switch(action.id) {\n      case 'save':\n        this.save();\n        break;\n      case 'delete':\n        this.deleteEntity();\n        break;\n    }\n  }\n\n  headerActionRequested(action) {\n    switch(action.name) {\n      case 'save':\n        this.save();\n        break;\n      case 'close':\n        this.closeForm();\n        break;\n      case 'toggle-view':\n        this.formView = action.data;\n        break;\n      case 'delete':\n        this.deleteEntity();\n        break;\n    }\n  }\n\n  async save(event?) {\n    if (!this.canSaveByPermissions()) {\n      return;\n    }\n    const isValid = this.validate();\n    const isExtValid = await this.extService.validateData();\n    this.formData.name = this.formData.name.trim()\n    if(!isValid || !isExtValid) {\n      return;\n    }\n\n    this.isLoading = true;\n    this.svc.save(this.formData).then((result) => {\n      if (result?.close) {\n        if (this.isModal) {\n          this.closeModal(true, true);\n          return;\n        }\n        this.initData = this.formData;\n        this._dataChange = false;\n        this.returnToListPage();\n        return;\n      }\n      const data = result?.data?.id ? result.data : result;\n      if (!isEmpty(data.id)) {\n        this.formData = data || this.formData;\n        this.initData = this.formData;\n      } else {\n        this.initData = this.formData;\n      }\n      this.extService.updateFormData(this.formData);\n    }).finally(() => {\n      this.isLoading = false;\n    });\n  }\n\n  validate() {\n    this.errors = {};\n    if (isEmpty(this.formData.name)) {\n      this.errors['name'] = true;\n    }\n    return isEmpty(this.errors);\n  }\n\n  get apiCallURL() {\n    return this.settings.selectedEdgeController + '/edge/management/v1/edge-routers' + (this.formData.id ? `/${this.formData.id}` : '');\n  }\n\n  get apiData() {\n    const data: any = {\n          name: this.formData?.name || '',\n          appData: this.formData?.appData || '',\n          roleAttributes: this.formData.roleAttributes || '',\n          isTunnelerEnabled: this.formData.isTunnelerEnabled,\n          noTraversal: this.formData.noTraversal,\n          cost: this.formData.cost || '0',\n          tags: this.formData.tags || ''\n    }\n    if (!this.isEditing) {\n      data.enrollment = this.formData.enrollment || {ott: true};\n    }\n    return data;\n  }\n\n  refreshEdgeRouter() {\n    this.svc.refreshRouter(this.formData.id).then(result => {\n      this.formData = result.data;\n      this.initData = cloneDeep(this.formData);\n      this.extService.updateFormData(this.formData);\n    })\n  }\n\n  _apiData = {};\n  set apiData(data) {\n    this._apiData = data;\n  }\n\n  toggleTunnelerEnabled() {\n    this.formData.isTunnelerEnabled = !this.formData.isTunnelerEnabled;\n  }\n\n  toggleNoTraversal() {\n    this.formData.noTraversal = !this.formData.noTraversal;\n  }\n\n  clear(): void {\n  }\n\n  isTunnelerDisabled(): boolean {\n    return this.extService.disabledComponents.some(\n      item => item.key === 'tunneler-disabled'\n    );\n  }\n\n  get tunnelerEnabledReadOnly(): boolean {\n    return this.config.isOpenZiti ? true : !this.isTunnelerDisabled()\n  }\n}\n","<div class=\"projectable-form-wrapper\"\n  (keyup.enter)=\"save($event)\"\n  (keyup.escape)=\"closeModal(false)\"\n  [class.projectable-form-hidden]=\"!dataInit\"\n  >\n  <lib-form-header\n    [data]=\"formData\"\n    [title]=\"formData.id ? 'Edit Edge Router: ' : 'Create New Edge Router'\"\n    [moreActions]=\"moreActions\"\n    [multiActions]=\"multiActions\"\n    (actionRequested)=\"headerActionRequested($event)\"\n    (multiActionRequested)=\"multiActionRequested($event)\"\n    [(formView)]=\"formView\"\n    [class.is-scrolled]=\"isScrolled\"\n    [saveDisabled]=\"formPermissionSaveDisabled\"\n    [saveTooltip]=\"formPermissionSaveTooltip\"\n    [strictReadonlyUi]=\"useStrictReadonlyForm\"\n  ></lib-form-header>\n  <ng-content select=\"[slot=tabs-slot]\"></ng-content>\n  <div class=\"edge-router-form-container projectable-form-container\" #formContainer>\n    @if (formView === 'simple') {\n      <div class=\"projectable-form-main-column form-group-row\">\n        <div class=\"form-group-column three-fifths\">\n          <lib-form-field-container [title]=\"'Edge Router Name'\" [label]=\"useStrictReadonlyForm ? '' : 'REQUIRED'\">\n              <input\n                class=\"form-field-input\"\n                placeholder=\"Name this edge router\"\n                [ngClass]=\"{error: errors['name']}\"\n                [(ngModel)]=\"formData.name\"\n                autofocus\n                #nameFieldInput\n                [disabled]=\"useStrictReadonlyForm\"\n                />\n          </lib-form-field-container>\n          <lib-form-field-container\n            [title]=\"'Select or create Edge Router attributes'\"\n            [label]=\"'OPTIONAL'\"\n            [contentStyle]=\"'z-index: 99999999'\"\n            [helpText]=\"'Attributes are tags applied to an resource. Apply the same tag to other Edge Routers to form a group of Edge Routers.'\"\n            >\n            <lib-tag-selector\n              [disableField]=\"useStrictReadonlyForm\"\n              [disableCreate]=\"useStrictReadonlyForm\"\n              [(selectedRoleAttributes)]=\"formData.roleAttributes\"\n              [availableRoleAttributes]=\"edgeRouterRoleAttributes\"\n              [placeholder]=\"'Add attributes to group Edge Routers'\"\n            ></lib-tag-selector>\n          </lib-form-field-container>\n          <ng-content select=\"[slot=column-1-slot-1]\"></ng-content>\n          <lib-form-field-toggle [(toggleOn)]=\"showMore\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n          @if (showMore) {\n            <div class=\"form-group-column\">\n              <lib-form-field-container\n                [title]=\"'TUNNELER'\"\n                [title2]=\"'TRAVERSAL'\"\n                [layout]=\"'row'\"\n                class=\"form-field-advanced\"\n                >\n                <div class=\"config-item\" [class.disabled]=\"!tunnelerEnabledReadOnly\">\n                  <div class=\"config-container toggle-container\">\n                    <div class=\"config-container-label\">TUNNELER ENABLED</div>\n                    <div (click)=\"tunnelerEnabledReadOnly && !useStrictReadonlyForm && toggleTunnelerEnabled()\"\n                      [ngClass]=\"{ on: formData.isTunnelerEnabled, disabled: !tunnelerEnabledReadOnly, 'toggle-readonly': useStrictReadonlyForm }\" class=\"toggle\"\n                      [matTooltip]=\"useStrictReadonlyForm ? '' : (!tunnelerEnabledReadOnly ? 'Disabled because already hosted by netfoundry ' : '')\"\n                      matTooltipPosition=\"above\" style=\"pointer-events: auto;\">\n                      <span [hidden]=\"!formData.isTunnelerEnabled\" class=\"on-label\">YES</span>\n                      <span [hidden]=\"formData.isTunnelerEnabled\" class=\"off-label\">NO</span>\n                      <div class=\"switch\"></div>\n                    </div>\n                  </div>\n                </div>\n                <div class=\"config-item\">\n                  <div class=\"config-container toggle-container\">\n                    <div class=\"config-container-label\">ALLOW TRAVERSAL</div>\n                    <div\n                      (click)=\"!useStrictReadonlyForm && toggleNoTraversal()\"\n                      [ngClass]=\"{ on: !formData.noTraversal, 'toggle-readonly': useStrictReadonlyForm }\"\n                      class=\"toggle\"\n                      >\n                      <span [hidden]=\"formData.noTraversal\" class=\"on-label\">YES</span>\n                      <span [hidden]=\"!formData.noTraversal\" class=\"off-label\">NO</span>\n                      <div class=\"switch\"></div>\n                    </div>\n                  </div>\n                </div>\n              </lib-form-field-container>\n              @if (formData?.hostname || formData?.supportedProtocols?.tls || formData?.supportedProtocols?.wss) {\n                <lib-form-field-container [showHeader]=\"false\">\n                      @if (formData?.hostname) {\n                        <div class=\"config-item\">\n                          <div class=\"config-item-label-container\">\n                            <span class=\"config-title\">Domain Name</span>\n                          </div>\n                          <div class=\"config-container domain-container\">\n                            <div class=\"config-container-label domain-label\">\n                              {{ formData?.hostname }}\n                            </div>\n                          </div>\n                        </div>\n                      }\n                      @if (formData?.supportedProtocols?.tls || formData?.supportedProtocols?.wss) {\n                        <div class=\"config-item\">\n                          <div class=\"config-item-label-container\">\n                            <span class=\"config-title\">ADVERTISE ADDRESS</span>\n                          </div>\n                          <div class=\"config-container advertise-address-container\">\n                            <div class=\"config-container-label advertise-address-label\">\n                              {{ formData?.supportedProtocols?.tls }}\n                              <br />\n                              {{ formData?.supportedProtocols?.wss }}\n                            </div>\n                          </div>\n                        </div>\n                      }\n                </lib-form-field-container>\n              }\n              <lib-form-field-container\n                [title]=\"'Custom Tags'\"\n                [label]=\"'OPTIONAL'\"\n                class=\"form-field-advanced\"\n                >\n                <lib-custom-tags [(tags)]=\"formData.tags\" [readOnly]=\"useStrictReadonlyForm\"></lib-custom-tags>\n              </lib-form-field-container>\n              <lib-form-field-container\n                [title]=\"'App Data'\"\n                [label]=\"'OPTIONAL'\"\n                class=\"form-field-advanced\"\n                >\n                <lib-json-view [(data)]=\"formData.appData\" [readOnly]=\"useStrictReadonlyForm\"></lib-json-view>\n              </lib-form-field-container>\n            </div>\n          }\n        </div>\n        <div class=\"form-group-column two-fifths\">\n          <ng-content select=\"[slot=column-2-slot-1]\"></ng-content>\n          @if (hasEnrolmentToken && !extService['hideZitiRegistration']) {\n            <lib-form-field-container\n              [showHeader]=\"false\"\n              >\n              <lib-qr-code\n                [identity]=\"formData\"\n                [jwt]=\"formData.enrollmentJwt\"\n                [token]=\"formData.enrollmentToken\"\n                [expiration]=\"formData.enrollmentExpiresAt\"\n                (doRefresh)=\"refreshEdgeRouter()\"\n                [type]=\"'router'\"\n              ></lib-qr-code>\n            </lib-form-field-container>\n          }\n          @if (formData.id) {\n            <lib-form-field-container\n              [title]=\"'Associated Services'\"\n              [count]=\"svc.associatedServices.length\"\n              [class]=\"'hide-overflow'\"\n              [helpText]=\"'Preview list of all services that this Edge Router is associated with.'\"\n              >\n              <lib-preview-list\n                [clickable]=\"false\"\n                [isLoading]=\"servicesLoading\"\n                [allNames]=\"svc.associatedServiceNames\"\n              ></lib-preview-list>\n            </lib-form-field-container>\n          }\n          @if (formData.id) {\n            <lib-form-field-container\n              [title]=\"'Associated Identities'\"\n              [count]=\"svc.associatedIdentities.length\"\n              [helpText]=\"'Preview list of all Identities that this Edge Router is associated with.'\"\n              >\n              <lib-preview-list\n                [clickable]=\"false\"\n                [isLoading]=\"identitiesLoading\"\n                [allNames]=\"svc.associatedIdentityNames\"\n              ></lib-preview-list>\n            </lib-form-field-container>\n          }\n          @if (showApiCalls) {\n            <lib-form-field-container\n              [title]=\"'API Calls'\"\n              [label]=\"'OPTIONAL'\"\n              >\n              <div class=\"form-row\">\n                <input class=\"form-field-input\" [value]=\"apiCallURL\"/>\n                <div class=\"icon-copy copy-text\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n              </div>\n              @if (formData) {\n                <lib-json-view [(data)]=\"apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n              }\n            </lib-form-field-container>\n          }\n        </div>\n      </div>\n    }\n    @if (formView === 'raw') {\n      <div class=\"form-group-column\">\n        @if (formData) {\n          <lib-json-view [(data)]=\"formData\" [readOnly]=\"useStrictReadonlyForm\"></lib-json-view>\n        }\n      </div>\n    }\n  </div>\n</div>\n@if (isLoading || !dataInit) {\n  <lib-loading-indicator [isLoading]=\"isLoading || !dataInit\"></lib-loading-indicator>\n}\n","import {Injectable, Inject, InjectionToken} from \"@angular/core\";\nimport {isEmpty, unset, keys} from 'lodash';\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../services/ziti-data.service\";\nimport {GrowlerService} from \"../../messaging/growler.service\";\nimport {GrowlerModel} from \"../../messaging/growler.model\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../../services/settings.service\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../extendable/extensions-noop.service\";\n\nimport {EdgeRouter} from \"../../../models/edge-router\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class TransitRouterFormService {\n\n    associatedIdentities: any = [];\n    associatedIdentityNames: any = [];\n    associatedServices: any = [];\n    associatedServiceNames: any = [];\n\n    constructor(\n        @Inject(SETTINGS_SERVICE) public settingsService: SettingsService,\n        @Inject(ZITI_DATA_SERVICE) private zitiService: ZitiDataService,\n        private growlerService: GrowlerService,\n        @Inject(SHAREDZ_EXTENSION)private extService: ExtensionService\n    ) {}\n \n    save(formData): Promise<any> {\n        const isUpdate = !isEmpty(formData.id);\n        const data: any = this.getEdgeRouterDataModel(formData, isUpdate);\n        const svc = isUpdate ? this.zitiService.patch.bind(this.zitiService) : this.zitiService.post.bind(this.zitiService);\n        return svc('transit-routers', data, formData.id).then(async (result: any) => {\n            const id = result?.data?.id || formData.id;\n            let router = await this.zitiService.getSubdata('transit-routers', id, '').then((routerData) => {\n                return routerData.data;\n            });\n            return this.extService.formDataSaved(router).then((formSavedResult: any) => {\n                const returnVal = {\n                    data: router,\n                    close: this.extService.closeAfterSave\n                };\n                const growlerData = new GrowlerModel(\n                    'success',\n                    'Success',\n                    `Transit Router ${isUpdate ? 'Updated' : 'Created'}`,\n                    `Successfully ${isUpdate ? 'updated' : 'created'} Transit Router: ${formData.name}`,\n                );\n                this.growlerService.show(growlerData);\n                return returnVal;\n            }).catch((result) => {\n                return false;\n            });\n        }).catch((resp) => {\n            const errorMessage = this.zitiService.getErrorMessage(resp);\n            const growlerData = new GrowlerModel(\n                'error',\n                'Error',\n                `Error ${isUpdate ? 'Updating' : 'Creating'} Transit Router`,\n                errorMessage,\n            );\n            this.growlerService.show(growlerData);\n            throw resp;\n        })\n    }\n\n    getEdgeRouterDataModel(formData, isUpdate) {\n        const saveModel = new EdgeRouter();\n        const modelProperties = keys(saveModel);\n        modelProperties.forEach((prop) => {\n            switch(prop) {\n                default:\n                    saveModel[prop] = formData[prop];\n            }\n        });\n        return saveModel;\n    }\n\n    getAuthPolicies() {\n        const paging = {\n            filter: \"\",\n            noSearch: true,\n            order: \"asc\",\n            page: 1,\n            searchOn: \"name\",\n            sort: \"name\",\n            total: 100\n        }\n        return this.zitiService.get('auth-policies', paging, []).then((result: any) => {\n            return [{id: 'default', name: 'Default'}, ...result.data];\n        });\n    }\n\n    copyToClipboard(val) {\n        navigator.clipboard.writeText(val);\n        const growlerData = new GrowlerModel(\n            'success',\n            'Success',\n            `Text Copied`,\n            `API call URL copied to clipboard`,\n        );\n        this.growlerService.show(growlerData);\n    }\n\n    getAssociatedServices(id) {\n        this.zitiService.getSubdata('transit-routers', id, 'services',this.zitiService.DEFAULT_PAGING).then((result: any) => {\n            this.associatedServices = result.data;\n            this.associatedServiceNames = this.associatedServices.map((svc) => {\n                return svc.name;\n            });\n        });\n    }\n\n    getAssociatedIdentities(id) {\n        this.zitiService.getSubdata('transit-routers', id, 'identities',this.zitiService.DEFAULT_PAGING).then((result: any) => {\n            this.associatedIdentities = result.data;\n            this.associatedIdentityNames = this.associatedIdentities.map((policy) => {\n                return policy.name;\n            });\n        });\n    }\n\n    refreshRouter(id) {\n        const url: any = `/transit-routers/${id}`\n        return this.zitiService.call(url);\n    }\n}","import {\n  Component,\n  EventEmitter,\n  Input,\n  OnInit,\n  OnDestroy,\n  Output,\n  OnChanges,\n  SimpleChanges,\n  AfterViewInit,\n  Inject\n} from '@angular/core';\nimport {Subscription} from 'rxjs';\nimport {ProjectableForm} from \"../projectable-form.class\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../../services/settings.service\";\n\nimport {isEmpty, delay, cloneDeep, isEqual, set, unset} from 'lodash';\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../services/ziti-data.service\";\nimport {GrowlerService} from \"../../messaging/growler.service\";\nimport {TransitRouterFormService} from './transit-router-form.service';\nimport {MatDialogRef} from \"@angular/material/dialog\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../extendable/extensions-noop.service\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {EdgeRouter} from \"../../../models/edge-router\";\nimport {Location} from \"@angular/common\";\n\n@Component({\n    selector: 'lib-transit-router-form',\n    templateUrl: './transit-router-form.component.html',\n    styleUrls: ['./transit-router-form.component.scss'],\n    providers: [\n        {\n            provide: MatDialogRef,\n            useValue: {}\n        }\n    ],\n    standalone: false\n})\nexport class TransitRouterFormComponent extends ProjectableForm implements OnInit, OnChanges, OnDestroy, AfterViewInit {\n  @Input() edgeRouterRoleAttributes: any[] = [];\n  @Output() close: EventEmitter<any> = new EventEmitter<any>();\n  @Input() headerToggle = false;\n\n  override entityType = 'transit-routers';\n  override entityClass = EdgeRouter;\n\n  formView = 'simple';\n  isEditing = false;\n  servicesLoading = false;\n  identitiesLoading = false;\n  authPolicies: any = [\n    {id: 'default', name: 'Default'}\n  ];\n\n  settings: any = {};\n\n  constructor(\n      @Inject(SETTINGS_SERVICE) protected override settingsService: SettingsService,\n      public svc: TransitRouterFormService,\n      @Inject(ZITI_DATA_SERVICE) override zitiService: ZitiDataService,\n      growlerService: GrowlerService,\n      @Inject(SHAREDZ_EXTENSION) extService: ExtensionService,\n      protected override router: Router,\n      protected override route: ActivatedRoute,\n      location: Location\n  ) {\n    super(growlerService, extService, zitiService, router, route, location, settingsService);\n    this.edgeRouterRoleAttributes = [];\n  }\n\n  override ngOnInit(): void {\n    super.ngOnInit();\n    this.subscription.add(\n      this.settingsService.settingsChange.subscribe((results:any) => {\n        this.settings = results;\n      })\n    );\n    this.subscription.add(\n      this.extService.formDataChanged.subscribe((data) => {\n        if (data.isEmpty) {\n          return;\n        }\n        this.formData = data;\n      })\n    );\n  }\n\n  override entityUpdated() {\n    super.entityUpdated();\n    if (this.formData.id) {\n      this.formData.badges = [];\n      this.formData.badges = [];\n      if (this.formData.isOnline) {\n        this.formData.badges.push({label: 'Online', class: 'online', circle: 'true'});\n      } else {\n        this.formData.badges.push({label: 'Offline', class: 'offline', circle: 'false'});\n      }\n      if (!this.formData.isVerified) {\n        this.formData.badges.push({label: 'Unverified', class: 'unreg'});\n      }\n    }\n    this.getEdgeRouterRoleAttributes();\n    this.svc.getAssociatedServices(this.formData.id);\n    this.svc.getAssociatedIdentities(this.formData.id);\n    this.svc.getAuthPolicies().then(result => {\n      this.authPolicies = result;\n    });\n    this.loadTags();\n    unset(this.formData, '_links');\n    this.initData = cloneDeep(this.formData);\n    this.extService.updateFormData(this.formData);\n  }\n\n  getEdgeRouterRoleAttributes() {\n    this.getRoleAttributes('edge-router-role-attributes').then((attributes) => {\n      this.edgeRouterRoleAttributes = attributes;\n    });\n  }\n\n  ngOnDestroy() {\n    this.extService?.closed?.emit({});\n    this.subscription.unsubscribe();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    this.isEditing = !isEmpty(this.formData.id);\n  }\n\n  get hasEnrolmentToken() {\n    return !isEmpty(this.formData.enrollmentJwt) || !isEmpty(this.formData.enrollmentToken);\n  }\n\n  headerActionRequested(action) {\n    switch(action.name) {\n      case 'save':\n        this.save();\n        break;\n      case 'close':\n        this.closeForm();\n        break;\n      case 'toggle-view':\n        this.formView = action.data;\n        break;\n    }\n  }\n\n  multiActionRequested(action) {\n    switch (action.id) {\n      case 'save':\n        this.save();\n        break;\n      case 'delete':\n        this.deleteEntity();\n        break;\n    }\n  }\n\n  async save(event?) {\n    if (!this.canSaveByPermissions()) {\n      return;\n    }\n    const isValid = this.validate();\n    const isExtValid = await this.extService.validateData();\n    this.formData.name = this.formData.name.trim()\n    if(!isValid || !isExtValid) {\n      return;\n    }\n\n    this.isLoading = true;\n    this.svc.save(this.formData).then((result) => {\n      if (result?.close) {\n        if (this.isModal) {\n          this.closeModal(true, true);\n          return;\n        }\n        this.initData = this.formData;\n        this._dataChange = false;\n        this.returnToListPage();\n        return;\n      }\n      const data = result?.data?.id ? result.data : result;\n      if (!isEmpty(data.id)) {\n        this.formData = data || this.formData;\n        this.initData = this.formData;\n      } else {\n        this.initData = this.formData;\n      }\n      this.extService.updateFormData(this.formData);\n    }).finally(() => {\n      this.isLoading = false;\n    });\n  }\n\n  validate() {\n    this.errors = {};\n    if (isEmpty(this.formData.name)) {\n      this.errors['name'] = true;\n    }\n    return isEmpty(this.errors);\n  }\n\n  get apiCallURL() {\n    return this.settings.selectedEdgeController + '/edge/management/v1/edge-routers' + (this.formData.id ? `/${this.formData.id}` : '');\n  }\n\n  get apiData() {\n    const data: any = {\n          name: this.formData?.name || '',\n          appData: this.formData?.appData || '',\n          roleAttributes: this.formData.roleAttributes || '',\n          isTunnelerEnabled: this.formData.isTunnelerEnabled,\n          noTraversal: this.formData.noTraversal,\n          cost: this.formData.cost || '0',\n          tags: this.formData.tags || ''\n    }\n    if (!this.isEditing) {\n      data.enrollment = this.formData.enrollment || {ott: true};\n    }\n    return data;\n  }\n\n  refreshEdgeRouter() {\n    this.svc.refreshRouter(this.formData.id).then(result => {\n      this.formData = result.data;\n      this.initData = cloneDeep(this.formData);\n      this.extService.updateFormData(this.formData);\n    })\n  }\n\n  _apiData = {};\n  set apiData(data) {\n    this._apiData = data;\n  }\n\n  toggleDisabled(state = undefined) {\n    if (state !== undefined) {\n      this.formData.disabled = state;\n      return;\n    }\n    this.formData.disabled = !this.formData.disabled;\n  }\n\n  toggleNoTraversal() {\n    this.formData.noTraversal = !this.formData.noTraversal;\n  }\n\n  clear(): void {\n  }\n}\n","<div class=\"projectable-form-wrapper\"\n  (keyup.enter)=\"save($event)\"\n  (keyup.escape)=\"closeModal(false)\"\n  >\n  <lib-form-header\n    [data]=\"formData\"\n    [title]=\"formData.id ? 'Edit Transit Router: ' : 'Create New Transit Router'\"\n    [moreActions]=\"moreActions\"\n    [multiActions]=\"multiActions\"\n    (actionRequested)=\"headerActionRequested($event)\"\n    (multiActionRequested)=\"multiActionRequested($event)\"\n    [(formView)]=\"formView\"\n    [saveDisabled]=\"formPermissionSaveDisabled\"\n    [saveTooltip]=\"formPermissionSaveTooltip\"\n    [strictReadonlyUi]=\"useStrictReadonlyForm\"\n  ></lib-form-header>\n  <div class=\"edge-router-form-container projectable-form-container\">\n    @if (formView === 'simple') {\n      <div class=\"projectable-form-main-column form-group-row\">\n        <div class=\"form-group-column three-fifths\">\n          <lib-form-field-container [title]=\"'Transit Router Name'\" [label]=\"useStrictReadonlyForm ? '' : 'REQUIRED'\">\n              <input\n                class=\"form-field-input\"\n                placeholder=\"Name this transit router\"\n                [ngClass]=\"{error: errors['name']}\"\n                [(ngModel)]=\"formData.name\"\n                autofocus\n                #nameFieldInput\n                [disabled]=\"useStrictReadonlyForm\"\n                />\n          </lib-form-field-container>\n          <lib-form-field-container\n            [showHeader]=\"false\"\n            [layout]=\"'row'\"\n            >\n            <div class=\"form-field-label-container\">\n              <div class=\"form-field-title-container\">\n                <span class=\"form-field-title\">Cost</span>\n              </div>\n                <input\n                  type=\"number\"\n                  class=\"form-field-input\"\n                placeholder=\"Name this edge router\"\n                  [ngClass]=\"{error: errors['cost']}\"\n                  [(ngModel)]=\"formData.cost\"\n                  [disabled]=\"useStrictReadonlyForm\"\n                  />\n            </div>\n            <div class=\"config-item\">\n              <div class=\"config-container toggle-container\">\n                <div class=\"config-container-label\">ENABLED</div>\n                <div\n                  (click)=\"!useStrictReadonlyForm && toggleDisabled()\"\n                  [ngClass]=\"{ on: !formData.disabled, 'toggle-readonly': useStrictReadonlyForm }\"\n                  class=\"toggle\"\n                  >\n                  <span [hidden]=\"formData.disabled\" class=\"on-label\">YES</span>\n                  <span [hidden]=\"!formData.disabled\" class=\"off-label\">NO</span>\n                  <div class=\"switch\"></div>\n                </div>\n              </div>\n            </div>\n            <div class=\"config-item\">\n              <div class=\"config-container toggle-container\">\n                <div class=\"config-container-label\">ALLOW TRAVERSAL</div>\n                <div\n                  (click)=\"!useStrictReadonlyForm && toggleNoTraversal()\"\n                  [ngClass]=\"{ on: !formData.noTraversal, 'toggle-readonly': useStrictReadonlyForm }\"\n                  class=\"toggle\"\n                  >\n                  <span [hidden]=\"formData.noTraversal\" class=\"on-label\">YES</span>\n                  <span [hidden]=\"!formData.noTraversal\" class=\"off-label\">NO</span>\n                  <div class=\"switch\"></div>\n                </div>\n              </div>\n            </div>\n          </lib-form-field-container>\n          <ng-content select=\"[slot=column-1-slot-1]\"></ng-content>\n          <lib-form-field-toggle [(toggleOn)]=\"showMore\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n          @if (showMore) {\n            <div class=\"form-group-column\">\n              <lib-form-field-container\n                [title]=\"'Custom Tags'\"\n                [label]=\"'OPTIONAL'\"\n                class=\"form-field-advanced\"\n                >\n                <lib-custom-tags [(tags)]=\"formData.tags\" [readOnly]=\"useStrictReadonlyForm\"></lib-custom-tags>\n              </lib-form-field-container>\n            </div>\n          }\n        </div>\n        <div class=\"form-group-column two-fifths\">\n          <ng-content select=\"[slot=column-2-slot-1]\"></ng-content>\n          @if (hasEnrolmentToken && !extService['hideZitiRegistration']) {\n            <lib-form-field-container\n              [showHeader]=\"false\"\n              >\n              <lib-qr-code\n                [identity]=\"formData\"\n                [jwt]=\"formData.enrollmentJwt\"\n                [token]=\"formData.enrollmentToken\"\n                [expiration]=\"formData.enrollmentExpiresAt\"\n                (doRefresh)=\"refreshEdgeRouter()\"\n                [type]=\"'router'\"\n              ></lib-qr-code>\n            </lib-form-field-container>\n          }\n          @if (showApiCalls) {\n            <lib-form-field-container\n              [title]=\"'API Calls'\"\n              [label]=\"'OPTIONAL'\"\n              >\n              <div class=\"form-row\">\n                <input class=\"form-field-input\" [value]=\"apiCallURL\"/>\n                <div class=\"icon-copy copy-text\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n              </div>\n              @if (formData) {\n                <lib-json-view [(data)]=\"apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n              }\n            </lib-form-field-container>\n          }\n        </div>\n      </div>\n    }\n    @if (formView === 'raw') {\n      <div class=\"form-group-column\">\n        @if (formData) {\n          <lib-json-view [(data)]=\"formData\" [readOnly]=\"useStrictReadonlyForm\"></lib-json-view>\n        }\n      </div>\n    }\n  </div>\n</div>\n@if (isLoading) {\n  <lib-loading-indicator [isLoading]=\"isLoading\"></lib-loading-indicator>\n}\n","import {Component, ComponentRef, EventEmitter, Input, OnInit, Output, ViewChild, ViewContainerRef, AfterViewInit} from '@angular/core';\nimport {JsonEditorComponent, JsonEditorOptions} from \"ang-jsoneditor\";\nimport {debounce, defer, isBoolean, isEmpty, isNil, isNumber, keys} from \"lodash\";\nimport {SchemaService} from \"../../services/schema.service\";\nimport Ajv from 'ajv';\nimport addFormats from 'ajv-formats';\nimport {GrowlerModel} from \"../messaging/growler.model\";\nimport {GrowlerService} from \"../messaging/growler.service\";  // Import ajv-formats\n\n@Component({\n    selector: 'lib-config-editor',\n    templateUrl: './config-editor.component.html',\n    styleUrls: ['./config-editor.component.scss'],\n    standalone: false\n})\nexport class ConfigEditorComponent implements OnInit, AfterViewInit {\n\n  configDataInit = false;\n\n  items: any[] = [];\n\n  lColorArray = [\n    'white',\n    'white',\n  ]\n\n  bColorArray = [\n    'var(--formGroup)',\n    'var(--formSubGroup)'\n  ]\n  hideConfigJSON = false;\n\n  /** When true, block edits to embedded config form and JSON editor (e.g. global admin_readonly). */\n  @Input() readOnly = false;\n\n  @Input() configErrors: any = {};\n  @Output() configErrorsChange = new EventEmitter<any>();\n\n  _configData: any = {};\n  @Input() set configData(data) {\n    if (this._configData === data) {\n      return;\n    }\n    this._configData = data;\n    this.initFormData();\n    defer(() => {\n      this.updateConfigData();\n    });\n  };\n\n  @Output() configDataChange = new EventEmitter<any>();\n  get configData() {\n    return this._configData;\n  }\n\n  _showJsonView = false;\n  @Input() set showJsonView(showJsonView: boolean) {\n    this._showJsonView = showJsonView;\n    this.updateConfigData();\n  }\n  get showJsonView() {\n    return this._showJsonView;\n  }\n\n  _schema = false;\n  @Input() set schema(schema: any) {\n    this._schema = schema;\n    this.initFormData();\n    this.createForm();\n    this.updateConfigData();\n  }\n\n  get schema() {\n    return this._schema;\n  }\n\n  formDataChangedDebounced: any = debounce(this.formDataChanged.bind(this), 350);\n  jsonDataChangedDebounced: any = debounce(this.jsonDataChanged.bind(this), 350);\n  @ViewChild(\"dynamicform\", {read: ViewContainerRef}) dynamicForm!: ViewContainerRef;\n  @ViewChild(JsonEditorComponent, {static: false}) editor!: JsonEditorComponent;\n  constructor(private schemaSvc: SchemaService, private growlerService: GrowlerService) {\n  }\n\n  ngOnInit() {\n    this.createForm();\n  }\n\n  ngAfterViewInit() {\n    if (this.schema && this.dynamicForm) {\n      this.createForm();\n      if (this._configData && !isEmpty(this._configData)) {\n        defer(() => {\n          this.updateConfigData();\n        });\n      }\n    }\n  }\n\n  createForm() {\n    this.clearForm();\n    if (this.dynamicForm && this.schema) {\n      this.renderSchema(this.schema);\n    }\n  }\n\n  clearForm() {\n    this.items.forEach((item: any) => {\n      if (item?.component) item.component.destroy();\n    });\n    this.configErrors = {};\n    this.items = [];\n  }\n\n  renderSchema(schema: any) {\n    if (schema.properties) {\n      this.items = this.schemaSvc.render(schema, this.dynamicForm, this.lColorArray, this.bColorArray);\n      for (let obj of this.items) {\n        const cRef = obj.component;\n        cRef.instance.errors = this.configErrors;\n        if (cRef?.instance.valueChange) {\n          const pName: string[]  = cRef.instance.parentage;\n          let parentKey;\n          if(pName) parentKey = pName.join('.');\n        }\n      }\n    }\n  }\n\n  updateConfigData() {\n    if (!this.showJsonView) {\n      if (this.items && this.items.length > 0) {\n        this.updateFormView(this.items, this.configData);\n        if (!isEmpty(this.configData)) {\n          this.configDataChange.emit(this.configData);\n        }\n      }\n    }\n  }\n\n  updateFormView(items, data: any = {}) {\n    items.forEach((item) => {\n      if (item.items) {\n        if (item.type === 'array') {\n          if (item?.component?.instance?.addedItems) {\n            item.addedItems = data[item.key] || [];\n            item.component.instance.addedItems = data[item.key] || [];\n          }\n          this.updateFormView(item.items, {});\n        } else {\n          this.updateFormView(item.items, data[item.key]);\n        }\n      } else if (item?.component?.instance?.setProperties) {\n        let val;\n        switch (item.key) {\n          case 'forwardingconfig':\n            val = {\n              protocol: data.protocol,\n              address: data.address,\n              port: data.port,\n              forwardProtocol: data.forwardProtocol,\n              forwardAddress: data.forwardAddress,\n              forwardPort: data.forwardPort,\n              allowedProtocols: data.allowedProtocols,\n              allowedAddresses: data.allowedAddresses,\n              allowedPortRanges: data.allowedPortRanges\n            }\n            break;\n          case 'pap':\n            val = {\n              protocol: data.protocol,\n              address: data.address,\n              port: data.port,\n              hostname: data.hostname,\n            }\n            break;\n          default:\n            val = data[item.key];\n            break;\n        }\n        item?.component?.instance?.setProperties(val);\n      } else if (item?.component?.setInput) {\n        item.component.setInput('fieldValue', data[item.key]);\n      }\n    });\n    return data;\n  }\n\n  getConfigDataFromForm() {\n    if (!this.items || this.items.length === 0) {\n      return;\n    }\n\n    const data = {};\n    this.addItemsToConfig(this.items, data);\n    this._configData = data;\n    this.hideConfigJSON = false;\n    this.configDataChange.emit(this.configData);\n  }\n\n  addItemsToConfig(items, data: any = {}, parentType = 'object') {\n    items.forEach((item) => {\n      if (item.type === 'array') {\n        if (item.addedItems) {\n          data[item.key] = item.addedItems;\n        } else if (item?.component?.instance?.fieldValue) {\n          data[item.key] = item.component.instance.fieldValue;\n        } else {\n          data[item.key] = [];\n        }\n      } else if (item.type === 'object') {\n        const val = this.addItemsToConfig(item.items, {}, item.type);\n        let hasDefinition = false;\n        keys(val).forEach((key) => {\n          if (isBoolean(val[key]) || isNumber(val[key]) || (!isEmpty(val[key]) && !isNil(val[key]))) {\n            hasDefinition = true;\n          }\n        });\n        data[item.key] = hasDefinition ? val : undefined;\n      } else {\n        let props = [];\n        if (item?.component?.instance?.getProperties) {\n          props = item?.component?.instance?.getProperties();\n        } else if (item?.component?.instance) {\n          let val = item.component.instance.fieldValue;\n          if (Array.isArray(val) && val[0] && typeof val[0] === 'string') {\n            val = val?.map(item => item.trim());\n          }\n          props = [{key: item.key, value: val}];\n        }\n        props.forEach((prop) => {\n          data[prop.key] = prop.value;\n        });\n      }\n    });\n    return data;\n  }\n\n  validateConfig(schema?, showGrowler = true) {\n    this.configData = this.removeUndefinedProperties(this.configData);\n    let validationErrors;\n    let valid = true;\n    if (schema) {\n      // Initialize Ajv\n      const ajv = new Ajv({allErrors: true});\n      addFormats(ajv);\n      ajv.addFormat('idn-hostname', /^.+$/);\n      const validate = ajv.compile(schema);\n      valid = validate(this.configData);\n      validationErrors = validate.errors;\n    }\n    this.configErrors = {};\n    const propertyValidationMap = {};\n    this.validateConfigItems(this.items, undefined, '', validationErrors);\n    this.buildPropertyValidationMap(validationErrors, propertyValidationMap);\n    if (!valid) {\n      this.configErrors['configData'] = true;\n      if (showGrowler) {\n        this.displayConfigErrors(propertyValidationMap);\n      }\n    }\n    this.configErrorsChange.emit(this.configErrors);\n    return isEmpty(this.configErrors);\n  }\n\n  buildPropertyValidationMap(validationErrors, propertyValidationMap) {\n    validationErrors?.forEach((error) => {\n      let path = error.instancePath;\n      if (!isEmpty(error?.params?.missingProperty)) {\n        path += '/' + error?.params?.missingProperty;\n      }\n      if (!isEmpty(path)) {\n        propertyValidationMap[path] = `<b>${path}</b>: ${error.message}`;\n      }\n    });\n  }\n\n  validateConfigItems(items, parentType = 'object', path = '', validationErrors = []) {\n    let isValid = true;\n    items.forEach((item) => {\n      if (item.type === 'object') {\n        if (!this.validateConfigItems(item.items, item.type, path + '/' + item.key, validationErrors)) {\n          isValid = false;\n        }\n      } else if (item?.component?.instance?.setValidationErrors) {\n        item?.component?.instance?.setValidationErrors(path, validationErrors)\n      } else {\n        const hasValidationError: any = validationErrors?.some((error) => {\n          let pathToMach = error.instancePath;\n          if (!isEmpty(error?.params?.missingProperty)) {\n            pathToMach += '/' + error?.params?.missingProperty;\n          }\n          const matched = pathToMach === (path + '/' + item.key);\n          return matched;\n        });\n        if (item?.component?.instance?.setIsValid) {\n          item?.component?.instance?.setIsValid(!hasValidationError);\n        }\n      }\n    });\n    return isValid;\n  }\n\n  displayConfigErrors(propertyValidationMap) {\n    let validationMessage = '';\n    if (!isEmpty(propertyValidationMap)) {\n      const props = keys(propertyValidationMap);\n      props.forEach((key, index) => {\n        validationMessage += `<li>${propertyValidationMap[key]}</li>`;\n      });\n    }\n    if (isEmpty(validationMessage)) {\n      validationMessage = 'The entered configuration is invalid. Please update missing/invalid fields and try again.';\n    } else {\n      validationMessage = `<ul style=\"margin-top: 5px;\">${validationMessage}</ul>`;\n    }\n    const growlerData = new GrowlerModel(\n        'error',\n        'Error',\n        `Error Validating Config`,\n        validationMessage,\n    );\n    this.growlerService.show(growlerData);\n  }\n\n  initFormData() {\n    if (!this.configDataInit && !isEmpty(this._configData) && !isEmpty(this.schema)) {\n      this.configDataInit = true;\n    }\n  }\n\n  formDataChanged() {\n      defer(() => {\n        this.getConfigDataFromForm();\n      });\n  }\n\n  jsonDataChanged(event) {\n    this.configDataChange.emit(this.configData);\n  }\n\n  removeUndefinedProperties(data) {\n    if (Array.isArray(data)) {\n      return data\n          .map(item => this.removeUndefinedProperties(item))\n          .filter(item => item !== undefined);\n    } else if (typeof data === 'object' && data !== null) {\n      return Object.fromEntries(\n          Object.entries(data)\n              .filter(([_, value]) => value !== undefined)\n              .map(([key, value]) => [key, this.removeUndefinedProperties(value)])\n      );\n    }\n    return data;\n  }\n}\n","<div class=\"form-field-extended-fields\" [class.config-editor-readonly]=\"readOnly\" [hidden]=\"showJsonView\" (mouseup)=\"formDataChangedDebounced($event)\" (keyup)=\"formDataChangedDebounced($event)\" (clickOutside)=\"formDataChangedDebounced($event)\">\n  <ng-container #dynamicform></ng-container>\n</div>\n@if (showJsonView && !hideConfigJSON) {\n  <lib-json-view (dataChange)=\"jsonDataChangedDebounced($event)\" [(data)]=\"configData\" [readOnly]=\"readOnly\"></lib-json-view>\n}\n@if (showJsonView && hideConfigJSON) {\n  <lib-json-view [(data)]=\"configData\" [readOnly]=\"readOnly\"></lib-json-view>\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {\n  Component,\n  EventEmitter,\n  Input,\n  OnInit,\n  OnDestroy,\n  Output,\n  OnChanges,\n  SimpleChanges,\n  ViewChild,\n  ElementRef,\n  AfterViewInit,\n  Inject,\n  ViewContainerRef\n} from '@angular/core';\nimport {Subscription} from 'rxjs';\nimport {ProjectableForm, KEY_CODES} from \"../projectable-form.class\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../../services/settings.service\";\n\nimport {get, isEmpty, forEach, debounce, delay, unset, keys, defer, cloneDeep, isEqual, some, filter} from 'lodash';\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../services/ziti-data.service\";\nimport {GrowlerService} from \"../../messaging/growler.service\";\nimport {GrowlerModel} from \"../../messaging/growler.model\";\nimport {SERVICE_EXTENSION_SERVICE, ServiceFormService} from './service-form.service';\nimport {MatDialog, MatDialogRef} from \"@angular/material/dialog\";\nimport {ExtensionService} from \"../../extendable/extensions-noop.service\";\nimport {ConfigEditorComponent} from \"../../config-editor/config-editor.component\";\nimport {Service} from \"../../../models/service\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {Location} from \"@angular/common\";\nimport {URLS} from \"../../../urls\";\nimport {PreviewSelectionsComponent} from \"../../preview-selections/preview-selections.component\";\n\n@Component({\n    selector: 'lib-service-form',\n    templateUrl: './service-form.component.html',\n    styleUrls: ['./service-form.component.scss'],\n    providers: [\n        {\n            provide: MatDialogRef,\n            useValue: {}\n        }\n    ],\n    standalone: false\n})\nexport class ServiceFormComponent extends ProjectableForm implements OnInit, OnChanges, OnDestroy, AfterViewInit {\n  @Input() override set formData(data) {\n    if (!data?.configs) {\n      data.configs = [];\n    }\n    this.svc.formData = data;\n    if (!isEmpty(data?.id)) {\n      if (get(data, 'tags[\"service-type\"]') === 'simple') {\n        this.router.navigate([URLS.ZITI_SIMPLE_SERVICE + '/' + data?.id]);\n      } else {\n        this.dataInit = true;\n      }\n    } else if (this.entityId === 'create') {\n      this.dataInit = true;\n    }\n  }\n\n  override get formData(): any {\n    return this.svc?.formData;\n  }\n\n  @Input() serviceRoleAttributes: any[] = [];\n  @Output() close: EventEmitter<any> = new EventEmitter<any>();\n\n  isEditing = false;\n  enrollmentExpiration: any;\n  jwt: any;\n  token: any;\n  strategies = [\n    {id: 'smartrouting', label: 'Smart Routing'},\n    {id: 'sticky', label: 'Sticky'},\n    {id: 'weighted', label: 'Weighted'},\n    {id: 'random', label: 'Random'},\n  ];\n  bindingTypes = [\n    {id: 'udp', name: 'UDP'},\n    {id: 'transport', name: 'Transport'},\n    {id: 'edge', name: 'Edge'},\n  ];\n  protocols = [\n    {id: 'udp', name: 'UDP'},\n    {id: 'tcp', name: 'TCP'}\n  ];\n\n  formView = 'simple';\n  formDataInvalid = false;\n  settings: any = {};\n  configFilterChangedDebounced: any = debounce((filterText: string) => this.configFilterChanged(filterText), 300, {trailing: true});\n\n  override entityType = 'services';\n  override entityClass = Service;\n\n  @ViewChild(\"configEditor\", {read: ConfigEditorComponent}) configEditor!: ConfigEditorComponent;\n  constructor(\n      @Inject(SETTINGS_SERVICE) protected override settingsService: SettingsService,\n      public svc: ServiceFormService,\n      @Inject(ZITI_DATA_SERVICE) override zitiService: ZitiDataService,\n      growlerService: GrowlerService,\n      @Inject(SERVICE_EXTENSION_SERVICE) extService: ExtensionService,\n      protected override router: Router,\n      protected override route: ActivatedRoute,\n      location: Location,\n      dialogForm: MatDialog\n  ) {\n    super(growlerService, extService, zitiService, router, route, location, settingsService, dialogForm);\n    this.formData = {};\n  }\n\n  override ngOnInit(): void {\n    super.ngOnInit();\n    this.svc.saveDisabled = false;\n    this.svc.selectedConfigId = undefined;\n    this.subscription.add(\n      this.settingsService.settingsChange.subscribe((results:any) => {\n        this.settings = results;\n      })\n    );\n  }\n\n  override entityUpdated() {\n    super.entityUpdated();\n    this.getServiceRoleAttributes();\n    this.svc.resetFormData();\n    this.svc.getAssociatedConfigs();\n    this.svc.getAssociatedTerminators();\n    this.svc.getAssociatedServicePolicies();\n    this.svc.errors = {};\n    this.initData = cloneDeep(this.formData);\n    this.subscription.add(\n        this.extService.formDataChanged.subscribe((data) => {\n          if (data.isEmpty) {\n            return;\n          }\n        })\n    );\n    this.loadTags();\n    unset(this.formData, '_links');\n    this.initData = cloneDeep(this.formData);\n    this.extService.updateFormData(this.formData);\n  }\n\n  getServiceRoleAttributes() {\n    this.getRoleAttributes('service-role-attributes').then((attributes) => {\n      this.serviceRoleAttributes = attributes;\n    });\n  }\n\n  ngOnDestroy() {\n    this.extService?.closed?.emit({});\n    this.subscription.unsubscribe();\n  }\n\n  override ngAfterViewInit() {\n    super.ngAfterViewInit();\n    if (!this.useStrictReadonlyForm) {\n      this.nameFieldInput?.nativeElement?.focus();\n    }\n    this.svc.configEditor = this.configEditor;\n    if (!this.useStrictReadonlyForm) {\n      this.svc.getConfigTypes();\n    }\n    this.svc.getRouters();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    this.isEditing = !isEmpty(this.formData.id);\n  }\n\n  configChanged($event) {\n    if (this.svc.selectedConfigId === 'add-new') {\n      this.svc.newConfigName = '';\n    }\n    this.svc.configChanged();\n  }\n\n  configFilterChanged(filterText: string) {\n    const filters = [];\n    if (filterText && filterText !== '') {\n      filters.push({\n        columnId: 'name',\n        value: filterText,\n        label: filterText,\n        filterName: 'Name',\n        type: 'TEXTINPUT',\n      });\n    }\n    if (this.svc.selectedConfigTypeId) {\n      filters.push({\n        columnId: 'type',\n        value: this.svc.selectedConfigTypeId,\n        label: this.svc.selectedConfigTypeId,\n        filterName: 'Config Type',\n        type: 'TEXTINPUT',\n        verb: '=',\n        rawFilter: true\n      });\n    }\n    this.svc.getConfigs(filters, 1);\n  }\n\n  configTypeChanged($event) {\n    if (this.useStrictReadonlyForm) {\n      return;\n    }\n    this.svc.selectedConfigId = '';\n    this.svc.newConfigName = '';\n    const filters = [];\n    if (isEmpty(this.svc.selectedConfigTypeId)) {\n      this.svc.configTypeChanged();\n      return;\n    }\n    if (this.svc.selectedConfigTypeId) {\n      filters.push({\n        columnId: 'type',\n        value: this.svc.selectedConfigTypeId,\n        label: this.svc.selectedConfigTypeId,\n        filterName: 'Config Type',\n        type: 'TEXTINPUT',\n        verb: '=',\n        rawFilter: true\n      });\n    }\n    this.svc.getConfigs(filters,1).then(() => {\n      this.svc.configTypeChanged();\n    });\n  }\n\n  get showConfigData() {\n    return this.svc.selectedConfigId === 'add-new' || this.svc.selectedConfigId === 'preview';\n  }\n\n  get canCreateConfig(): boolean {\n    return this.managementPermissions.canCreate('configs');\n  }\n\n  attachConfig() {\n    if (this.useStrictReadonlyForm) {\n      return;\n    }\n    this.configEditor?.getConfigDataFromForm();\n    this.svc.attachConfig(this.svc.selectedConfigId);\n  }\n\n  captureConfigEnterEvent(event) {\n    if (this.useStrictReadonlyForm) {\n      event.stopPropagation();\n      return;\n    }\n    event.stopPropagation();\n    this.configEditor?.getConfigDataFromForm();\n    this.svc.attachConfig(this.svc.selectedConfigId);\n  }\n\n  protected override deleteServiceWithOrphans(): Promise<any> {\n    return this.getOrphanedEntities().then((orphans) => {\n      return this.deleteServiceAndOrphans(orphans);\n    });\n  }\n\n  protected override openPreviewDeletions() {\n    // Close the confirm dialog first\n    if (this['deleteConfirmDialogRef']) {\n      this['deleteConfirmDialogRef'].close();\n    }\n\n    this.getOrphanedEntities().then((serviceItem) => {\n      const data = {\n        appendId: 'PreviewServiceDeletions',\n        title: 'Preview Deletions',\n        subtitle: 'Preview of all associated entities that will be orphaned and deleted',\n        selectedItems: [serviceItem],\n        deleteConfirmed: true\n      };\n\n      const dialogRef = this.dialogForm.open(PreviewSelectionsComponent, {\n        data: data,\n        autoFocus: false,\n      });\n\n      dialogRef.afterClosed().subscribe((result) => {\n        if (result?.confirmed) {\n          this.isLoading = true;\n          this.deleteServiceAndOrphans(serviceItem).then(() => {\n            const growlerData = new GrowlerModel(\n              'success',\n              'Success',\n              `Service Deleted`,\n              `Successfully deleted service \"${this.formData.name}\" and all orphaned entities`,\n            );\n            this.growlerService.show(growlerData);\n            this.router?.navigateByUrl(this.basePath || 'services');\n          }).catch((error) => {\n            const growlerData = new GrowlerModel(\n              'error',\n              'Error',\n              `Delete Failed`,\n              `Failed to delete service: ${error?.error?.error?.message || error?.message || 'Unknown error'}`,\n            );\n            this.growlerService.show(growlerData);\n          }).finally(() => {\n            this.isLoading = false;\n          });\n        }\n      });\n    });\n  }\n\n  private getOrphanedEntities(): Promise<any> {\n    const serviceItem = {\n      id: this.formData.id,\n      name: this.formData.name,\n      associatedConfigs: [],\n      associatedServicePolicies: []\n    };\n\n    const configsPromise = this.zitiService.getSubdata('services', this.formData.id, 'configs').then((result) => {\n      const configs = result.data;\n      const configPromises = configs.map((config) => {\n        return this.zitiService.getSubdata('configs', config.id, 'services').then((result) => {\n          const associatedServices = result.data;\n          const isOrphan = !associatedServices.some((svc) => svc.id !== this.formData.id);\n          if (isOrphan) {\n            serviceItem.associatedConfigs.push({id: config.id, name: config.name});\n          }\n        });\n      });\n      return Promise.all(configPromises);\n    }).catch(() => Promise.resolve());\n\n    const policiesPromise = this.zitiService.getSubdata('services', this.formData.id, 'service-policies').then((result) => {\n      const policies = result.data;\n      const policyPromises = policies.map((pol) => {\n        const roleAttributes = pol.serviceRoles.filter((attr) => attr.charAt(0) === '#').map((attr) => attr.substring(1));\n        if (roleAttributes.length === 0) {\n          // Policy uses direct service references (@serviceId), not role attributes\n          // If it only references this service, it's an orphan\n          const directRefs = pol.serviceRoles.filter((attr) => attr.charAt(0) === '@').map((attr) => attr.substring(1));\n          const onlyReferencesThisService = directRefs.length === 1 && directRefs[0] === this.formData.id;\n          if (onlyReferencesThisService) {\n            serviceItem.associatedServicePolicies.push({id: pol.id, name: pol.name});\n          }\n          return Promise.resolve();\n        }\n        return this.zitiService.get('services', {}, roleAttributes).then((result: any) => {\n          const services = result.data || [];\n          const isOrphan = !services.some((svc) => svc.id !== this.formData.id);\n          if (isOrphan) {\n            serviceItem.associatedServicePolicies.push({id: pol.id, name: pol.name});\n          }\n        });\n      });\n      return Promise.all(policyPromises);\n    }).catch(() => Promise.resolve());\n\n    return Promise.all([configsPromise, policiesPromise]).then(() => serviceItem);\n  }\n\n  private deleteServiceAndOrphans(serviceItem): Promise<any> {\n    const promises = [];\n    promises.push(this.zitiService.delete('services', serviceItem.id));\n\n    serviceItem.associatedConfigs.forEach((config) => {\n      promises.push(this.zitiService.delete('configs', config.id));\n    });\n\n    serviceItem.associatedServicePolicies.forEach((policy) => {\n      promises.push(this.zitiService.delete('service-policies', policy.id));\n    });\n\n    return Promise.all(promises);\n  }\n\n  headerActionRequested(action) {\n    switch(action.name) {\n      case 'save':\n        this.save();\n        break;\n      case 'close':\n        this.resetForm();\n        this.returnToListPage();\n        break;\n      case 'toggle-view':\n        this.formView = action.data;\n        break;\n      case 'delete':\n        this.deleteEntity();\n        break;\n    }\n  }\n\n  multiActionRequested(action) {\n    switch (action.id) {\n      case 'save':\n        this.save();\n        break;\n      case 'delete':\n        this.deleteEntity();\n        break;\n    }\n  }\n\n  async save(event?) {\n    if (!this.canSaveByPermissions()) {\n      return;\n    }\n    this.formData.name = this.formData.name.trim();\n    const isValid = this.svc.validate();\n    const isExtValid = await this.extService.validateData();\n    const isEdit = !isEmpty(this.formData.id);\n    if(!isValid || !isExtValid) {\n      const growlerData = new GrowlerModel(\n          'error',\n          'Error',\n          `Data Invalid`,\n          `Service data is invalid. Please update and try again.`,\n      );\n      this.growlerService.show(growlerData);\n      return;\n    }\n\n    this.isLoading = true;\n    const serviceId = await this.svc.save(this.formData).then((result) => {\n      if (!isEmpty(result?.id)) {\n        this.formData = result;\n        this.initData = this.formData;\n        this.checkDataChange();\n      }\n      return result?.id;\n    }).finally(() => {\n      this.isLoading = false;\n    });\n    if (serviceId && !isEdit) {\n      await this.svc.addTerminators(serviceId)\n    }\n    if (serviceId) {\n      this.closeModal(true, true);\n      this.returnToListPage();\n    }\n  }\n\n  toggleEncryptionRequired() {\n    if (this.useStrictReadonlyForm) {\n      return;\n    }\n    this.formData.encryptionRequired = !this.formData.encryptionRequired;\n  }\n\n  get apiCallURL() {\n    return this.settings.selectedEdgeController + '/edge/management/v1/services' + (this.formData.id ? `/${this.formData.id}` : '');\n  }\n\n  get saveButtonTooltip() {\n    if (this.formDataInvalid) {\n      return 'Service data is invalid. Please update and try again.'\n    } else {\n      return 'Complete and attach config definition, or remove before saving';\n    }\n  }\n\n  resetForm() {\n    this.svc.selectedConfigId = '';\n    this.svc.selectedConfigTypeId = '';\n    this.errors = {};\n    this.svc.configErrors = {};\n  }\n\n  clear(): void {\n  }\n\n}\n","<div class=\"projectable-form-wrapper\"\n  (keyup.enter)=\"save($event)\"\n  (keyup.escape)=\"returnToListPage()\"\n  tabindex=\"0\"\n  [class.projectable-form-hidden]=\"!dataInit\"\n  >\n  <lib-form-header\n    [data]=\"formData\"\n    [title]=\"(formData.id ? 'Edit Service' : 'Create Service')\"\n    [moreActions]=\"moreActions\"\n    [multiActions]=\"multiActions\"\n    (actionRequested)=\"headerActionRequested($event)\"\n    (multiActionRequested)=\"multiActionRequested($event)\"\n    [(formView)]=\"formView\"\n    [saveDisabled]=\"svc.saveDisabled || formDataInvalid || formPermissionSaveDisabled\"\n    [saveTooltip]=\"formPermissionSaveDisabled ? formPermissionSaveTooltip : saveButtonTooltip\"\n    [class.is-scrolled]=\"isScrolled\"\n    [strictReadonlyUi]=\"useStrictReadonlyForm\"\n  ></lib-form-header>\n  <ng-content select=\"[slot=tabs-slot]\"></ng-content>\n  <div class=\"edge-router-form-container projectable-form-container\" #formContainer>\n    <div class=\"projectable-form-main-column form-group-row\" [hidden]=\"formView !== 'simple'\">\n      <div class=\"form-group-column three-fifths\">\n        <lib-form-field-container [title]=\"'Service Name'\" [label]=\"useStrictReadonlyForm ? '' : 'REQUIRED'\">\n            <input\n              class=\"form-field-input\"\n              placeholder=\"Name this Service\"\n              [ngClass]=\"{error: svc.errors['name']}\"\n              [(ngModel)]=\"formData.name\"\n              autofocus\n              #nameFieldInput\n              [disabled]=\"useStrictReadonlyForm\"\n              />\n        </lib-form-field-container>\n        <lib-form-field-container\n          [title]=\"'Select or create Service attributes'\"\n          [label]=\"useStrictReadonlyForm ? '' : 'OPTIONAL'\"\n          [contentStyle]=\"'z-index: 99999999'\"\n          [helpText]=\"'Attributes are tags applied to a resource. Apply the same tag to other Services to form a group of Services.'\"\n          >\n          <lib-tag-selector\n            [disableField]=\"useStrictReadonlyForm\"\n            [disableCreate]=\"useStrictReadonlyForm\"\n            [(selectedRoleAttributes)]=\"formData.roleAttributes\"\n            [availableRoleAttributes]=\"serviceRoleAttributes\"\n            [placeholder]=\"'Add attributes to group Services'\"\n          ></lib-tag-selector>\n        </lib-form-field-container>\n        @if (!useStrictReadonlyForm && canCreateConfig) {\n          <lib-form-field-container\n            [title]=\"'Add Configurations'\"\n            (actionRequested)=\"attachConfig()\"\n            (keyup.enter)=\"captureConfigEnterEvent($event)\"\n            [helpText]=\"'Configurations are used to define how to intercept and host a service. Ziti Networks come with built-in configuration types (ie. intercept.v1 and host.v1)'\"\n            >\n            <div class=\"form-field-input-group\">\n              <div class=\"config-title-row\">\n                <span class=\"form-field-title\">Select a Config</span>\n              </div>\n              <select\n                [(ngModel)]=\"svc.selectedConfigTypeId\"\n                (change)=\"configTypeChanged($event)\"\n                id=\"SelectedConfigType\"\n                class=\"form-field-dropdown\"\n                [disabled]=\"useStrictReadonlyForm\"\n                >\n              <option value=\"\">Select configuration type...</option>\n              @for (type of svc.configTypes; track type) {\n                <option\n                  [value]=\"type.id\"\n                  >\n                  {{ type.name }}\n                </option>\n              }\n            </select>\n            <div class=\"dropdown-container\" [ngClass]=\"{'dropdown-loading': svc.configsLoading}\">\n              <lib-filter-select\n                placeholder=\"Select configuration...\"\n                optionLabel=\"name\"\n                optionValue=\"id\"\n                [options]=\"svc.filteredConfigs\"\n                [showClear]=\"true\"\n                [disabled]=\"!svc.selectedConfigTypeId || svc.selectedConfigTypeId === ''\"\n                (selectionChange)=\"configChanged($event)\"\n                (filterChange)=\"configFilterChangedDebounced($event)\"\n                [(ngModel)]=\"svc.selectedConfigId\"\n              ></lib-filter-select>\n            </div>\n            @if (!showConfigData && svc.selectedConfigId && svc.selectedConfigId !== '' && svc.selectedConfigId !== 'preview') {\n              <div class=\"button-row-right\" >\n                <div class=\"save-button\" (click)=\"svc.attachConfig(svc.selectedConfigId)\">\n                  {{svc.attachLabel}}\n                </div>\n              </div>\n            }\n            <div [hidden]=\"!showConfigData\" class=\"form-field-extended-fields\" [ngClass]=\"{'cfg-preview': svc.selectedConfigId === 'preview'}\">\n              @if (showConfigData) {\n                <div class=\"config-title-row\" style=\"margin-bottom: 10px;\">\n                  <span class=\"form-field-title\">Config Name</span>\n                  @if (svc.selectedConfigId !== 'preview') {\n                    <div\n                      class=\"save-button\"\n                      (click)=\"attachConfig()\"\n                      >{{svc.attachLabel}}\n                    </div>\n                  }\n                </div>\n              }\n              @if (showConfigData) {\n                  <input\n                    [(ngModel)]=\"svc.newConfigName\"\n                    class=\"form-field-input\"\n                    [placeholder]=\"'New Config Name'\"\n                    [ngClass]=\"{error: svc.configErrors['name']}\"\n                    style=\"margin-bottom: 20px;\"\n                    />\n              }\n              <div class=\"config-title-row\" style=\"margin-bottom: 10px;\">\n                <span class=\"form-field-title\">Configuration Data</span>\n                @if (svc.selectedConfigId !== 'preview') {\n                  <div class=\"form-header-toggle-container\">\n                    <span\n                      class=\"toggle-option-text\"\n                      [ngClass]=\"{'toggle-option-selected': !svc.configJsonView}\"\n                      (click)=\"svc.toggleJSONView()\"\n                      >\n                      FORM\n                    </span>\n                    <div class=\"form-header-toggle\" (click)=\"svc.toggleJSONView()\">\n                      <div\n                        class=\"form-toggle-switch\"\n                        [ngClass]=\"{'toggle-left': !svc.configJsonView, 'toggle-right': svc.configJsonView}\"\n                        >\n                        <div class=\"form-toggle-indicator\"></div>\n                        <div class=\"form-toggle-indicator\"></div>\n                      </div>\n                    </div>\n                    <span\n                      class=\"toggle-option-text\"\n                      [ngClass]=\"{'toggle-option-selected': svc.configJsonView}\"\n                      (click)=\"svc.toggleJSONView()\"\n                      >\n                      JSON\n                    </span>\n                  </div>\n                }\n              </div>\n              <lib-config-editor\n                [(configData)]=\"svc.configData\"\n                [schema]=\"svc.selectedSchema\"\n                [showJsonView]=\"svc.configJsonView\"\n                [(configErrors)]=\"svc.configErrors\"\n                #configEditor\n              ></lib-config-editor>\n            </div>\n          </div>\n          </lib-form-field-container>\n        }\n        <lib-form-field-toggle [(toggleOn)]=\"showMore\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n        @if (showMore) {\n          <div class=\"form-group-column\">\n            <lib-form-field-container\n              [title]=\"'Terminator Strategy'\"\n              [title2]=\"'Encryption'\"\n              [layout]=\"'row'\"\n              [helpText]=\"'Pick a strategy to determine how to rank available terminators for a service'\"\n              [helpText2]=\"'Encrypts packets when entering or leaving the network.'\"\n              class=\"form-field-advanced\"\n              >\n              <select\n                [(ngModel)]=\"formData.terminatorStrategy\"\n                id=\"authPolicyId\"\n                class=\"form-field-dropdown\"\n                [disabled]=\"useStrictReadonlyForm\"\n                >\n                <option value=\"\">Select a Strategy....</option>\n                @for (strat of strategies; track strat) {\n                  <option\n                    [value]=\"strat.id\"\n                    >\n                    {{ strat.label }}\n                  </option>\n                }\n              </select>\n              <div class=\"config-item\">\n                <div class=\"config-container toggle-container\">\n                  <div class=\"config-container-label\">Require Encryption</div>\n                  <div\n                    (click)=\"toggleEncryptionRequired()\"\n                    [ngClass]=\"{ on: formData.encryptionRequired, 'toggle-readonly': useStrictReadonlyForm }\"\n                    class=\"toggle\"\n                    >\n                    <span [hidden]=\"!formData.encryptionRequired\" class=\"on-label\">YES</span>\n                    <span [hidden]=\"formData.encryptionRequired\" class=\"off-label\">NO</span>\n                    <div class=\"switch\"></div>\n                  </div>\n                </div>\n              </div>\n            </lib-form-field-container>\n            <lib-form-field-container\n              [title]=\"'Max Idle Time'\"\n              [label]=\"useStrictReadonlyForm ? '' : 'OPTIONAL'\"\n              class=\"form-field-advanced\"\n              >\n              <input\n                type=\"number\"\n                class=\"form-field-input\"\n                min=\"0\"\n                step=\"1\"\n                placeholder=\"0\"\n                [(ngModel)]=\"formData.maxIdleTimeMillis\"\n                [disabled]=\"useStrictReadonlyForm\"\n                id=\"MaxIdleTimeMillis\"\n                />\n            </lib-form-field-container>\n            <lib-form-field-container\n              [title]=\"'Custom Tags'\"\n              [label]=\"'OPTIONAL'\"\n              class=\"form-field-advanced\"\n              >\n              <lib-custom-tags [(tags)]=\"formData.tags\" [readOnly]=\"useStrictReadonlyForm\"></lib-custom-tags>\n            </lib-form-field-container>\n          </div>\n        }\n      </div>\n      <div class=\"form-group-column two-fifths\">\n        <lib-form-field-container\n          [title]=\"'Associated Entities'\"\n          [label]=\"'click item to view details'\"\n          [helpText]=\"'List the configs, policies, and terminators that are associated with this service. Click on the entity name to navigate to the entity\\'s detailed view.'\"\n          [class]=\"'no-gap'\"\n          >\n          @if (canReadRelated('configs')) {\n            <div class=\"form-row space-between\" style=\"margin-top: 0;\">\n              <div class=\"config-title-row\">\n                <span class=\"form-field-title\">Configurations</span>\n              </div>\n              <span class=\"form-field-count\">{{svc.addedConfigs ? svc.addedConfigs.length : 0}}</span>\n            </div>\n            <lib-preview-list\n              [isLoading]=\"svc.associatedConfigsLoading\"\n              [allNames]=\"svc.addedConfigs\"\n              [allowRemove]=\"!useStrictReadonlyForm\"\n              [clickable]=\"true\"\n              [tooltip]=\"'View Config'\"\n              [showfilter]=\"false\"\n              (itemRemoved)=\"svc.removeConfig($event)\"\n              (itemSelected)=\"svc.previewConfig($event, router)\"\n            ></lib-preview-list>\n          }\n          @if (canReadRelated('service-policies')) {\n            <div class=\"form-row space-between\">\n              <div class=\"config-title-row\">\n                <span class=\"form-field-title\">Service Policies</span>\n              </div>\n              <span class=\"form-field-count\">{{svc.associatedServicePoliciesTotal}}</span>\n            </div>\n            <lib-preview-list\n              [isLoading]=\"svc.associatedServicePoliciesLoading\"\n              [clickable]=\"true\"\n              (itemSelected)=\"svc.previewPolicy($event, router)\"\n              [tooltip]=\"'View Service Policy'\"\n              [allNames]=\"svc.associatedServicePolicies\"\n              [showfilter]=\"svc.showServicePoliciesFilter\"\n              [localFilter]=\"false\"\n              (filterChanged)=\"svc.getAssociatedServicePoliciesDebounced($event)\"\n            ></lib-preview-list>\n          }\n          <div class=\"form-row space-between\">\n            <div class=\"config-title-row\">\n              <span class=\"form-field-title\">Terminators</span>\n            </div>\n            <span class=\"form-field-count\">{{svc.associatedTerminatorsTotal}}</span>\n          </div>\n          <lib-preview-list\n            [isLoading]=\"svc.associatedTerminatorsLoading\"\n            [clickable]=\"true\"\n            (itemSelected)=\"svc.previewTerminator($event, router)\"\n            [tooltip]=\"'View Terminator'\"\n            [allNames]=\"svc.associatedTerminators\"\n            [showfilter]=\"false\"\n            [showfilter]=\"svc.showTerminatorsFilter\"\n            [localFilter]=\"false\"\n            (filterChanged)=\"svc.getAssociatedTerminatorsDebounced($event)\"\n          ></lib-preview-list>\n        </lib-form-field-container>\n        <!--                <lib-form-field-container\n        *ngIf=\"formData.id\"\n        [title]=\"'Associated Service Policies'\"\n        [count]=\"svc.associatedServicePolicies.length\"\n        [helpText]=\"'Preview list of all service policies that this service is associated with.'\"\n        >\n      </lib-form-field-container>-->\n      @if (showApiCalls) {\n        <lib-form-field-container\n          [title]=\"'API Calls'\"\n          [label]=\"''\"\n          [class]=\"'api-call-container'\"\n          [helpText]=\"'Preview of the API URL and data model that is used to create/update this service'\"\n          >\n          <div class=\"form-row\">\n            <input class=\"form-field-input\" [value]=\"apiCallURL\" readonly/>\n            <div class=\"url-copy icon-copy copy-text\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n          </div>\n          @if (formData) {\n            <lib-json-view [(data)]=\"svc.apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n          }\n        </lib-form-field-container>\n      }\n    </div>\n  </div>\n  @if (formView === 'raw') {\n    <div class=\"form-group-column\">\n      @if (formData) {\n        <lib-json-view [(data)]=\"formData\" [(jsonInvalid)]=\"formDataInvalid\" [readOnly]=\"useStrictReadonlyForm\"></lib-json-view>\n      }\n    </div>\n  }\n</div>\n</div>\n@if (isLoading || !dataInit) {\n  <lib-loading-indicator [isLoading]=\"isLoading || !dataInit\"></lib-loading-indicator>\n}\n","import {Component, Input} from '@angular/core';\n\n@Component({\n    selector: 'lib-card',\n    templateUrl: './card.component.html',\n    styleUrls: ['./card.component.scss'],\n    standalone: false\n})\nexport class CardComponent {\n\n  @Input() imageUrl = 'test';\n  @Input() title = '';\n  @Input() content = '';\n  @Input() buttonText = '';\n  @Input() id = '';\n  @Input() href = '';\n\n  linkClicked(event) {\n    event.preventDefault();\n  }\n}\n","<a href=\"/{{href}}\" (click)=\"linkClicked($event)\">\n    <div class=\"service-card-container\">\n        <div class=\"buttonCard selectType\" [id]=\"id\">\n            <div style=\"background-image: url({{imageUrl}})\" class=\"icon\"></div>\n            <div class=\"title\">{{title}}</div>\n            <div class=\"content\">\n                {{ content }}\n            </div>\n            <div class=\"row center buttonArea\">\n                <button class=\"save\">{{buttonText}}</button>\n            </div>\n        </div>\n    </div>\n</a>","import {Component, EventEmitter, Inject, Output} from '@angular/core';\nimport {ProjectableForm} from \"../projectable-forms/projectable-form.class\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../services/settings.service\";\nimport {SERVICE_EXTENSION_SERVICE, ServiceFormService} from \"../projectable-forms/service/service-form.service\";\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../services/ziti-data.service\";\nimport {GrowlerService} from \"../messaging/growler.service\";\nimport {ExtensionService} from \"../extendable/extensions-noop.service\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {Location} from \"@angular/common\";\n\n@Component({\n    selector: 'lib-card-list',\n    templateUrl: './card-list.component.html',\n    styleUrls: ['./card-list.component.scss'],\n    standalone: false\n})\nexport class CardListComponent extends ProjectableForm {\n\n  @Output() close: EventEmitter<any> = new EventEmitter<any>();\n  @Output() selected: EventEmitter<any> = new EventEmitter<any>();\n\n  constructor(\n      @Inject(SETTINGS_SERVICE) protected override settingsService: SettingsService,\n      public svc: ServiceFormService,\n      @Inject(ZITI_DATA_SERVICE) override zitiService: ZitiDataService,\n      growlerService: GrowlerService,\n      @Inject(SERVICE_EXTENSION_SERVICE) extService: ExtensionService,\n      protected override router: Router,\n      protected override route: ActivatedRoute,\n      location: Location\n  ) {\n    super(growlerService, extService, zitiService, router, route, location, settingsService);\n  }\n  clear(): void {\n  }\n\n  save(): void {\n  }\n\n  back() {\n    this.router?.navigateByUrl(`${this.basePath}`);\n  }\n\n  cardSelected(type) {\n    this.router.navigateByUrl(`/services/${type}`);\n  }\n}\n","<div class=\"card-list-wrapper ziti-page-container fullModal opened\">\n    <div class=\"card-list-content\">\n        <div class=\"card-list-title-container\">\n            <div class=\"form-title-back-arrow-icon icon-back-arrow\" (click)=\"back()\"></div>\n            <div class=\"title\" style=\"filter: brightness(50%)\">Create a service</div>\n        </div>\n        <div class=\"subtitle\">Choose a service type</div>\n        <div class=\"card-list-container\">\n            <lib-card\n                    (click)=\"cardSelected('simple')\"\n                    [imageUrl]=\"'assets/svgs/Simple.svg'\"\n                    [title]=\"'Simple'\"\n                    [content]=\"'Simple services required fewer details, only asking for the most commonly used fields.'\"\n                    [buttonText]=\"'Create Simple Service'\"\n                    [id]=\"'SimpleServiceCard'\"\n                    [href]=\"'services/simple'\"\n            ></lib-card>\n            <lib-card\n                    (click)=\"cardSelected('advanced')\"\n                    [imageUrl]=\"'assets/svgs/Advanced.svg'\"\n                    [title]=\"'Advanced'\"\n                    [content]=\"'Advanced services allow you to configure any option supported by the controller but are subsequently a bit more complex.'\"\n                    [buttonText]=\"'Create Advanced Service'\"\n                    [id]=\"'AdvancedServiceCard'\"\n                    [href]=\"'services/advanced'\"\n            ></lib-card>\n        </div>\n        <div (click)=\"returnToListPage()\" class=\"buttonBall close\" id=\"EscZitiAWClose\">\n            <div class=\"buttonLabel\">ESC</div>\n        </div>\n    </div>\n</div>\n","import {Component, Inject} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef} from \"@angular/material/dialog\";\nimport {isEmpty, isNil} from \"lodash\";\nimport {ConfirmComponent} from \"../confirm/confirm.component\";\nimport {GrowlerModel} from \"../messaging/growler.model\";\nimport {GrowlerService} from \"../messaging/growler.service\";\n\n@Component({\n    selector: 'lib-creation-summary-dialog',\n    templateUrl: './creation-summary-dialog.component.html',\n    styleUrls: ['./creation-summary-dialog.component.scss'],\n    standalone: false\n})\nexport class CreationSummaryDialogComponent {\n\n  selectedApiData = '';\n  selectedApiUrl = '';\n  selectedCliCommand = '';\n  selectedEntityType = 'service';\n  selectedEntityName = '';\n\n  isEdit = false;\n  summaryData: any = [];\n  showAPI = false;\n  hasError = false;\n  hideSummaryNextTime = false;\n\n  constructor(private dialogRef: MatDialogRef<ConfirmComponent>, @Inject(MAT_DIALOG_DATA) public data: any, private growlerService: GrowlerService) {\n    this.summaryData = data.summaryData;\n    this.isEdit = data.isEdit === true;\n  }\n\n  get hasCreationError() {\n    let hasError = false;\n    this.summaryData.forEach((group) => {\n      group.entities.forEach((entity) => {\n        if (entity.status === 'error') {\n          hasError = true;\n        }\n      });\n    });\n    return hasError;\n  }\n\n  selectZitiEntity(entity, type) {\n    this.selectedEntityName = entity.name;\n    this.selectedCliCommand = entity.cliCommand;\n    this.selectedApiUrl = entity.apiUrl;\n    this.selectedApiData = entity.apiData;\n    this.selectedEntityType = type;\n  }\n\n  toggleAPIView() {\n    this.showAPI = !this.showAPI;\n  }\n\n  copyCliCommands() {\n    let clipboardContent = '';\n    this.summaryData.forEach((group) => {\n      group.entities.forEach((entity) => {\n        clipboardContent += (entity.cliCommand + '\\r\\n');\n      });\n    });\n    navigator.clipboard.writeText(clipboardContent);\n    const growlerData = new GrowlerModel(\n        'success',\n        'Success',\n        `Text Copied`,\n        `CLI commands copied to clipboard`,\n    );\n    this.growlerService.show(growlerData);\n  }\n\n  copyAPIRequests() {\n    let clipboardContent = '';\n    this.summaryData.forEach((group) => {\n      group.entities.forEach((entity) => {\n        clipboardContent += (entity.apiRequest + '\\r\\n');\n      });\n    });\n    navigator.clipboard.writeText(clipboardContent);\n    const growlerData = new GrowlerModel(\n        'success',\n        'Success',\n        `Text Copied`,\n        `API requests copied to clipboard`,\n    );\n    this.growlerService.show(growlerData);\n  }\n\n  doRetry(entityData) {\n    entityData.loading = 'loading';\n    entityData.retry(this.summaryData);\n  }\n\n  close() {\n    this.dialogRef.close('cancel');\n  }\n\n  done() {\n    this.dialogRef.close('done');\n  }\n\n  confirm() {\n    this.dialogRef.close('new');\n  }\n}\n","<div class=\"creation-summary-dialog-container\">\n  <div class=\"close icon-close\" (click)=\"close()\"></div>\n  <div class=\"title-row\">\n    <span class=\"title\">Execution Summary</span>\n    <span class=\"subtitle\">The following entities were {{isEdit ? 'updated' : 'created'}} for this service</span>\n  </div>\n  <lib-form-field-container [showHeader]=\"false\">\n    <div class=\"copy-links-container\">\n      <span class=\"copy-links-title\">\n        <span class=\"title\">Entities</span>\n        @if (hasCreationError) {\n          <span class=\"subtitle\">One or more of the following resources failed to create. See below for more details and/or retry.</span>\n        }\n      </span>\n    </div>\n    <div class=\"form-group-row exec-operations-group\">\n      <div class=\"summary-groups-container\">\n        @for (group of summaryData; track group) {\n          <div class=\"summary-group\">\n            <div class=\"summary-group-title\">{{group.title}}</div>\n            <ul>\n              @for (entity of group.entities; track entity) {\n                <li\n                  (click)=\"selectZitiEntity(entity.name, 'all')\"\n                  [ngClass]=\"{selected: selectedEntityType === 'all'}\"\n                  class=\"entity-item drop-target-svc\"\n                  >\n                  @if (entity.status === 'loading') {\n                    <span class=\"spinner\"></span>\n                  }\n                  @if (entity.status === 'done') {\n                    <input type=\"checkbox\" [disabled]=\"true\" [checked]=\"true\" class=\"success-check\">\n                  }\n                  @if (entity.status === 'error') {\n                    <div class=\"retry\" (click)=\"doRetry(entity)\"></div>\n                  }\n                  @if (entity.status === 'error') {\n                    <div class=\"icon-clear\"></div>\n                  }\n                  <span class=\"entity-name\" matTooltipShowDelay=\"1000\">\n                    {{ entity.name.length > 0 ? entity.name : 'SimpleService' }}\n                  </span>\n                </li>\n              }\n            </ul>\n          </div>\n        }\n      </div>\n    </div>\n  </lib-form-field-container>\n  <lib-form-field-container [showHeader]=\"false\" style=\"margin-top: 10px;\">\n    <div class=\"copy-links-container\">\n      <div class=\"copy-links-title\">\n        <div class=\"title-container\">\n          <span class=\"title\">Copy Links</span>\n          <div class=\"copy-icon\"></div>\n        </div>\n      </div>\n      <div class=\"copy-links\">\n        <div class=\"link-button\" (click)=\"copyCliCommands()\">CLI Commands</div>\n        <div class=\"link-button\" (click)=\"copyAPIRequests()\">API Requests</div>\n      </div>\n    </div>\n  </lib-form-field-container>\n\n  <div class=\"confirm-buttons-container\">\n    <button class=\"button save alert\" (click)=\"done()\">Done</button>\n    @if (!isEdit) {\n      <button class=\"button save cancel\" (click)=\"confirm()\">Create another</button>\n    }\n  </div>\n</div>\n","import {Component, EventEmitter, Inject, Input, Output} from '@angular/core';\nimport {ProjectableForm} from \"../../projectable-form.class\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../../../services/settings.service\";\nimport {SERVICE_EXTENSION_SERVICE, ServiceFormService} from \"../service-form.service\";\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../../services/ziti-data.service\";\nimport {GrowlerService} from \"../../../messaging/growler.service\";\nimport {ExtensionService} from \"../../../extendable/extensions-noop.service\";\nimport {GrowlerModel} from \"../../../messaging/growler.model\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {CreationSummaryDialogComponent} from \"../../../creation-summary-dialog/creation-summary-dialog.component\";\nimport {isEmpty, isNil, isNaN, unset, cloneDeep, isEqual, forEach, set, get} from 'lodash';\nimport {ValidationService} from '../../../../services/validation.service';\nimport {ServicesPageService} from \"../../../../pages/services/services-page.service\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {FilterObj} from \"../../../data-table/data-table-filter.service\";\nimport {ConfirmComponent} from \"../../../confirm/confirm.component\";\nimport {Location} from \"@angular/common\";\nimport {URLS} from \"../../../../urls\";\nimport {BehaviorSubject, forkJoin, Observable, of} from \"rxjs\";\nimport {PreviewSelectionsComponent} from \"../../../preview-selections/preview-selections.component\";\n\n@Component({\n    selector: 'lib-simple-service',\n    templateUrl: './simple-service.component.html',\n    styleUrls: ['./simple-service.component.scss'],\n    standalone: false\n})\nexport class SimpleServiceComponent extends ProjectableForm {\n  @Input() serviceRoleAttributes: any[] = [];\n  @Input() identityRoleAttributes: any[] = [];\n  @Input() identityNamedAttributes: any[] = [];\n\n  showForm = true;\n  formView = 'simple';\n  controllerDomain = '';\n  zitiSessionId;\n  interceptPort;\n  hostProtocol = 'tcp';\n  serviceCliCommand = '';\n  interceptConfigCliCommand = '';\n  hostConfigCliCommand = '';\n  dialPolicyCliCommand = '';\n  bindPolicyCliCommand = '';\n  serviceApiUrl = '';\n  interceptConfigApiUrl = '';\n  hostConfigApiUrl = '';\n  dialPolicyApiUrl = '';\n  bindPolicyApiUrl = '';\n  initServiceApiData = {\n    name: \"\",\n    roleAttributes: [],\n    configs: [],\n    encryptionRequired: true\n  };\n  initInterceptConfigApiData = {\n    name: \"\",\n    configTypeId:\"g7cIWbcGg\",\n    data: {\n      portRanges: [],\n      addresses: [],\n      protocols: ['tcp', 'udp']\n    }\n  };\n  initHostConfigApiData = {\n    name: '',\n    configTypeId: \"NH5p4FpGR\",\n    data: {\n      address: \"\",\n      port: undefined,\n      forwardProtocol: true,\n      allowedProtocols: ['tcp']\n    }\n  };\n  initDialPolicyApiData = {\n    name: \"\",\n    type: \"Dial\",\n    semantic: \"AnyOf\",\n    serviceRoles: [],\n    identityRoles: []\n  };\n  initBindPolicyApiData = {\n    name: \"\",\n    type: \"Bind\",\n    semantic: \"AnyOf\",\n    serviceRoles: [],\n    identityRoles: []\n  };\n  serviceApiData;\n  interceptConfigApiData;\n  hostConfigApiData;\n  dialPolicyApiData;\n  bindPolicyApiData;\n  dialPolicyNamedAttributes = [];\n  dialPolicyRoleAttributes = [];\n  bindPolicyNamedAttributes = [];\n  bindPolicyRoleAttributes = [];\n  identitiesNameIdMap = {};\n  identitiesIdNameMap = {};\n  interceptConfigId;\n  hostConfigId;\n  serviceId;\n  sdkOnlyDial = false;\n  sdkOnlyBind = false;\n  dialogRef: any;\n\n  interceptIncrement = -1;\n  hostIncrement = -1;\n  serviceIncrement = -1;\n  dialIncrement = -1;\n  bindIncrement = -1;\n\n  serviceDataChange = false;\n  interceptDataChange = false;\n  hostDataChange = false;\n  dialDataChange = false;\n  bindDataChange = false;\n  identitiesInit: BehaviorSubject<any> = new BehaviorSubject<any>(false);\n  entitiesInit = false;\n\n  override multiActions = [];\n\n  override entityType = 'services';\n\n  @Output() close: EventEmitter<any> = new EventEmitter<any>();\n  @Output() selected: EventEmitter<any> = new EventEmitter<any>();\n\n  constructor(\n      @Inject(SETTINGS_SERVICE) protected override settingsService: SettingsService,\n      public svc: ServiceFormService,\n      @Inject(ZITI_DATA_SERVICE) override zitiService: ZitiDataService,\n      growlerService: GrowlerService,\n      @Inject(SERVICE_EXTENSION_SERVICE) extService: ExtensionService,\n      protected override dialogForm: MatDialog,\n      private validationService: ValidationService,\n      private servicesPageService: ServicesPageService,\n      protected override router: Router,\n      protected override route: ActivatedRoute,\n      location: Location\n  ) {\n    super(growlerService, extService, zitiService, router, route, location, settingsService, dialogForm);\n    this.svc.formData = {};\n  }\n\n  serviceDataSet: boolean;\n  @Input() override set formData(data) {\n    if (!data?.configs) {\n      data.configs = [];\n    }\n    this.svc.formData = data;\n    if (!isEmpty(data?.id)) {\n      this.initAssociatedData();\n      if (get(this.formData, 'tags.service-type') === 'simple') {\n        this.multiActions = [\n          {id: 'convert-to-advanced', label: 'Convert to Advanced', hidden: false}\n        ]\n      } else {\n        this.multiActions = []\n      }\n    } else {\n      this.associatedDataInit = true;\n    }\n    this.serviceDataSet = true;\n    this.checkAllDataInit();\n  }\n\n  override get formData(): any {\n    return this.svc?.formData;\n  }\n\n  entityIdInit: boolean;\n  override set entityId(id: String) {\n    this._entityId = id;\n    if (isEmpty(id) || id === 'create') {\n      this.serviceDataSet = true;\n      this.associatedDataInit = true;\n    }\n    this.entityIdInit = true;\n    this.checkAllDataInit();\n  }\n\n  override get entityId(): String {\n    return this._entityId;\n  }\n\n  override get formPermissionSaveDisabled(): boolean {\n    return super.formPermissionSaveDisabled\n        || !this.managementPermissions.canCreate('service-policies');\n  }\n\n  override get formPermissionSaveTooltip(): string {\n    if (this.managementPermissions.isSaveDisabled(this.entityType, this.isEdit)) {\n      return this.managementPermissions.saveDeniedTooltip;\n    }\n    if (!this.managementPermissions.canCreate('service-policies')) {\n      return `Saving requires 'service-policy' permission (for dial and bind service policies)`;\n    }\n    return '';\n  }\n\n  override ngOnInit() {\n    super.ngOnInit();\n    this.controllerDomain = this.settingsService?.settings?.selectedEdgeController;\n    this.zitiSessionId = this.settingsService?.settings?.session?.id;\n    this.initFormData();\n    this.getIdentityNamedAttributes();\n  }\n\n  formDataSet = false;\n  initFormData() {\n    this.serviceApiUrl = `${this.controllerDomain}/edge/management/v1/services`;\n    this.interceptConfigApiUrl = `${this.controllerDomain}/edge/management/v1/configs`;\n    this.hostConfigApiUrl = `${this.controllerDomain}/edge/management/v1/configs`;\n    this.dialPolicyApiUrl = `${this.controllerDomain}/edge/management/v1/service-policies`;\n    this.bindPolicyApiUrl = `${this.controllerDomain}/edge/management/v1/service-policies`;\n    this.serviceCliCommand = '';\n    this.interceptConfigCliCommand = '';\n    this.hostConfigCliCommand = '';\n    this.dialPolicyCliCommand = '';\n    this.bindPolicyCliCommand = '';\n    this.interceptConfigId = '';\n    this.hostConfigId = '';\n    this.serviceId = '';\n    this.sdkOnlyDial = false;\n    this.sdkOnlyBind = false;\n    this.interceptPort = undefined;\n    this.dialPolicyNamedAttributes = [];\n    this.dialPolicyRoleAttributes = [];\n    this.bindPolicyNamedAttributes = [];\n    this.bindPolicyRoleAttributes = [];\n    this.serviceApiData = cloneDeep(this.initServiceApiData);\n    this.interceptConfigApiData = cloneDeep(this.initInterceptConfigApiData);\n    this.hostConfigApiData = cloneDeep(this.initHostConfigApiData);\n    this.dialPolicyApiData = cloneDeep(this.initDialPolicyApiData);\n    this.bindPolicyApiData = cloneDeep(this.initBindPolicyApiData);\n    const serviceRolesPromise = this.servicesPageService.getServiceRoleAttributes().then((result) => {\n      this.serviceRoleAttributes = result.data;\n    });\n    const identityRolesPromise = this.servicesPageService.getIdentityRoleAttributes().then((result) => {\n      this.identityRoleAttributes = result.data;\n    });\n    return Promise.all([serviceRolesPromise, identityRolesPromise]).finally(() => {\n      this.formDataSet = true;\n      this.checkAllDataInit();\n    });\n  }\n\n  associatedDataInit: boolean;\n  initAssociatedData() {\n    if (this.entitiesInit) {\n      this.dataInit = true;\n      this.isLoading = false;\n      return;\n    }\n    this.entitiesInit = true;\n    this.serviceApiData = this.svc.formData;\n    this.identitiesInit.subscribe((val) => {\n      if (val === true) {\n        const configsPromise = this.getAssociatedConfigs();\n        const policiesPromise = this.getAssocaitedPolicies();\n        Promise.all([configsPromise, policiesPromise]).finally(() => {\n          this.associatedDataInit = true;\n          this.setInitData();\n          this.checkAllDataInit();\n        });\n      }\n    });\n  }\n\n  setInitData() {\n    this.initServiceApiData = cloneDeep(this.serviceApiData);\n    this.initInterceptConfigApiData = cloneDeep(this.interceptConfigApiData);\n    this.initHostConfigApiData = cloneDeep(this.hostConfigApiData);\n    this.initDialPolicyApiData = cloneDeep(this.dialPolicyApiData);\n    this.initBindPolicyApiData = cloneDeep(this.bindPolicyApiData);\n    this._dataChange = false;\n  }\n\n  getAssociatedConfigs(): Promise<any> {\n    return this.zitiService.getSubdata('services', this.formData.id, 'configs').then((result: any) => {\n      const associatedConfigs = result.data;\n      associatedConfigs.forEach((config) => {\n        if (config.configTypeId == this.initInterceptConfigApiData.configTypeId) {\n          this.interceptConfigApiData = config;\n          const portRange = this.interceptConfigApiData.data.portRanges[0];\n          this.interceptPort = portRange?.high;\n        } else if (config.configTypeId == this.initHostConfigApiData.configTypeId) {\n          this.hostConfigApiData = config;\n        }\n      });\n    });\n  }\n\n  getAssocaitedPolicies(): Promise<any> {\n    return this.zitiService.getSubdata('services', this.formData.id, 'service-policies').then((result: any) => {\n      const associatedServicePolicies = result.data;\n      associatedServicePolicies.forEach((policy) => {\n        this.mergeIdentityRolesDisplayIntoMaps(policy);\n        if (policy.type?.toLowerCase() == 'dial') {\n          this.dialPolicyApiData = policy;\n          const roleAttributes = [];\n          const namedAttributes = [];\n          policy.identityRoles.forEach((attr) => {\n            if (attr.charAt(0) === '#') {\n              roleAttributes.push(attr.slice(1));\n            } else if (attr.charAt(0) === '@') {\n              const name = this.resolveIdentityNameForRole(attr);\n              if (name) {\n                namedAttributes.push(name);\n              }\n            }\n          });\n          this.dialPolicyRoleAttributes = roleAttributes;\n          this.dialPolicyNamedAttributes = namedAttributes;\n        } else if (policy.type?.toLowerCase() == 'bind') {\n          const roleAttributes = [];\n          const namedAttributes = [];\n          policy.identityRoles.forEach((attr) => {\n            if (attr.charAt(0) === '#') {\n              roleAttributes.push(attr.slice(1));\n            } else if (attr.charAt(0) === '@') {\n              const name = this.resolveIdentityNameForRole(attr);\n              if (name) {\n                namedAttributes.push(name);\n              }\n            }\n          });\n          this.bindPolicyRoleAttributes = roleAttributes;\n          this.bindPolicyNamedAttributes = namedAttributes;\n          this.bindPolicyApiData = policy;\n        }\n      });\n      this.mergeSelectedIdentityNamesIntoAvailableList();\n    })\n  }\n\n  /**\n   * Sublist identities query is capped; service-policy detail includes identityRolesDisplay\n   * so @-roles resolve to human-readable names even when the identity was not in the page.\n   */\n  private mergeIdentityRolesDisplayIntoMaps(policy: any): void {\n    const displays = policy?.identityRolesDisplay;\n    if (!Array.isArray(displays)) {\n      return;\n    }\n    displays.forEach((entry: any) => {\n      const role = entry?.role;\n      const id = typeof role === 'string' && role.charAt(0) === '@' ? role.slice(1) : undefined;\n      if (!id) {\n        return;\n      }\n      let displayName = entry?.name;\n      if (!displayName || typeof displayName !== 'string') {\n        return;\n      }\n      if (displayName.charAt(0) === '@') {\n        displayName = displayName.slice(1);\n      }\n      if (!this.identitiesIdNameMap[id]) {\n        this.identitiesIdNameMap[id] = displayName;\n      }\n      if (!this.identitiesNameIdMap[displayName]) {\n        this.identitiesNameIdMap[displayName] = id;\n      }\n    });\n  }\n\n  private resolveIdentityNameForRole(attr: string): string {\n    const id = attr.slice(1);\n    const name = this.identitiesIdNameMap[id];\n    if (name) {\n      return name;\n    }\n    this.identitiesIdNameMap[id] = id;\n    this.identitiesNameIdMap[id] = id;\n    return id;\n  }\n\n  private mergeSelectedIdentityNamesIntoAvailableList(): void {\n    const selected = [...this.dialPolicyNamedAttributes, ...this.bindPolicyNamedAttributes].filter(\n      (n) => n != null && n !== ''\n    );\n    if (selected.length === 0) {\n      return;\n    }\n    const merged = new Set([...(this.identityNamedAttributes || []), ...selected.map((n) => String(n))]);\n    this.identityNamedAttributes = Array.from(merged).sort((a, b) => String(a).localeCompare(String(b)));\n  }\n\n  getIdentityNamedAttributes(filter?) {\n    const paging = {\n      searchOn: 'name',\n      filter: filter || '',\n      total: 30,\n      page: 1,\n      sort: 'name',\n      order: 'asc'\n    };\n    const filters = [];\n    if (!isEmpty(filter)) {\n      filters.push({\n        filterName: 'name',\n        columnId: 'name',\n        value: filter || '%',\n        label: '',\n        type: 'TEXTINPUT',\n      });\n    }\n    this.zitiService.get('identities', paging, filters).then((result) => {\n      const namedAttributes = result.data.map((identity) => {\n        this.identitiesNameIdMap[identity.name] = identity.id;\n        this.identitiesIdNameMap[identity.id] = identity.name;\n        return identity.name;\n      });\n      this.identityNamedAttributes = namedAttributes;\n      this.mergeSelectedIdentityNamesIntoAvailableList();\n    }).finally(() => {\n      if (!this.identitiesInit.value) {\n        this.identitiesInit.next(true);\n      }\n    });\n  }\n\n  checkAllDataInit() {\n    if (this.associatedDataInit && this.formDataSet && this.entityIdInit && this.serviceDataSet) {\n      this.dataInit = true;\n      this.isLoading = false;\n    }\n  }\n\n  multiActionRequested(action) {\n    switch(action.id) {\n      case 'save':\n        this.save();\n        break;\n      case 'convert-to-advanced':\n        this.convertToAdvanced();\n        break;\n      case 'delete':\n        this.deleteEntity();\n        break;\n    }\n  }\n\n  headerActionRequested(action) {\n    switch(action.name) {\n      case 'save':\n        this.save();\n        break;\n      case 'close':\n        if (this.isEdit) {\n          this.router?.navigateByUrl(URLS.ZITI_SERVICES);\n        } else {\n          this.router?.navigateByUrl(URLS.ZITI_SERVICE_SELECT);\n        }\n        break;\n      case 'toggle-view':\n        this.formView = action.data;\n        break;\n      case 'delete':\n        this.deleteEntity();\n        break;\n    }\n  }\n\n  toggleSdkOnlyDial() {\n    this.sdkOnlyDial = !this.sdkOnlyDial;\n  }\n\n  toggleSdkOnlyBind() {\n    this.sdkOnlyBind = !this.sdkOnlyBind;\n  }\n\n  serviceNameChanged(event) {\n    this.interceptConfigApiData.name = `${this.serviceApiData.name}-intercept-config`\n    this.hostConfigApiData.name = `${this.serviceApiData.name}-host-config`\n    this.dialPolicyApiData.name = `${this.serviceApiData.name}-dial-policy`\n    this.bindPolicyApiData.name = `${this.serviceApiData.name}-bind-policy`\n  }\n\n  interceptPortChanged($event) {\n    if (isNil(this.interceptPort) || isNaN(this.interceptPort)) {\n      this.interceptConfigApiData.data.portRanges = [];\n      return;\n    }\n    this.interceptConfigApiData.data.portRanges[0] = {\n      high: this.interceptPort,\n      low: this.interceptPort\n    };\n  }\n\n  hostProtocolsChanged($event) {\n    switch (this.hostProtocol) {\n      case 'both':\n        this.hostConfigApiData.data.allowedProtocols = ['tcp', 'udp']\n        break;\n      default:\n        this.hostConfigApiData.data.allowedProtocols = [this.hostProtocol];\n        break;\n    }\n  }\n\n  async save(refresh?) {\n    if (!this.canSaveByPermissions()) {\n      return;\n    }\n    this.serviceApiData.name = this.serviceApiData.name.trim();\n    if (!this.validate()) {\n      return;\n    }\n    const isNewService = isEmpty(this.serviceApiData?.id);\n    if (isNewService) {\n      const hasConflicts: any = await this.checkNameConflicts();\n      if (hasConflicts) {\n        return;\n      }\n    }\n\n    const summaryData = this.showSummary();\n    this.serviceApiData.configs = [];\n\n    try { await this.saveInterceptConfig(summaryData); }\n    catch (e) { this.markEntityError(summaryData, 'configs', 'intercept'); }\n\n    try { await this.saveHostConfig(summaryData); }\n    catch (e) { this.markEntityError(summaryData, 'configs', 'host'); }\n\n    try { await this.saveService(summaryData); }\n    catch (e) { this.markEntityError(summaryData, 'services'); }\n\n    try { await this.savePolicy(summaryData, 'Dial'); }\n    catch (e) { this.markEntityError(summaryData, 'service-policies', 'dial'); }\n\n    try { await this.savePolicy(summaryData, 'Bind'); }\n    catch (e) { this.markEntityError(summaryData, 'service-policies', 'bind'); }\n\n    summaryData?.forEach((entityType) => {\n      entityType.entities?.forEach((entity) => {\n        if (entity.type === 'services') {\n          entity.cliCommand = this.serviceCliCommand;\n          entity.apiRequest = this.getServicesApiRequest();\n        } else if (entity.type === 'configs' && entity.subtype === 'intercept') {\n          entity.cliCommand = this.interceptConfigCliCommand;\n          entity.apiRequest = this.getInterceptConfigApiRequest();\n        } else if (entity.type === 'configs' && entity.subtype === 'host') {\n          entity.cliCommand = this.hostConfigCliCommand;\n          entity.apiRequest = this.getHostConfigApiRequest();\n        } else if (entity.type === 'service-policies' && entity.subtype === 'dial') {\n          entity.cliCommand = this.dialPolicyCliCommand;\n          entity.apiRequest = this.getDialApiRequest();\n        } else if (entity.type === 'service-policies' && entity.subtype === 'bind') {\n          entity.cliCommand = this.bindPolicyCliCommand;\n          entity.apiRequest = this.getBindApiRequest();\n        }\n      });\n    });\n  }\n\n  markEntityError(summaryData: any, type: string, subtype?: string) {\n    summaryData?.forEach((group: any) => {\n      group.entities?.forEach((entity: any) => {\n        if (entity.status === 'loading' && entity.type === type && (!subtype || entity.subtype === subtype)) {\n          entity.status = 'error';\n        }\n      });\n    });\n  }\n\n  showSummary() {\n    const interceptSummary = {\n      name: this.interceptConfigApiData.name,\n      type: 'configs',\n      subtype: 'intercept',\n      apiData: this.interceptConfigApiData,\n      cliCommand: this.interceptConfigCliCommand,\n      apiRequest: '',\n      apiUrl: this.interceptConfigApiUrl,\n      status: 'loading',\n      retry: this.saveInterceptConfig.bind(this),\n    };\n    const hostSummary = {\n      name: this.hostConfigApiData.name,\n      type: 'configs',\n      subtype: 'host',\n      apiData: this.hostConfigApiData,\n      cliCommand: this.hostConfigCliCommand,\n      apiRequest: '',\n      apiUrl: this.hostConfigApiUrl,\n      status: 'loading',\n      retry: this.saveHostConfig.bind(this)\n    };\n    const summaryData: any = [\n      {\n        title: 'Services',\n        entities: [\n          {\n            name: this.serviceApiData.name,\n            type: 'services',\n            apiData: this.serviceApiData,\n            cliCommand: this.serviceCliCommand,\n            apiRequest: '',\n            apiUrl: this.serviceApiUrl,\n            status: 'loading',\n            retry: this.saveService.bind(this)\n          }\n        ]\n      },\n      {\n        title: 'Service Policies',\n        entities: [\n          {\n            name: this.dialPolicyApiData.name,\n            type: 'service-policies',\n            subtype: 'dial',\n            apiData: this.dialPolicyApiData,\n            cliCommand: this.dialPolicyCliCommand,\n            apiRequest: '',\n            apiUrl: this.dialPolicyApiUrl,\n            status: 'loading',\n            retry: (summaryData) => { this.savePolicy(summaryData, 'Dial') }\n          },\n          {\n            name: this.bindPolicyApiData.name,\n            type: 'service-policies',\n            subtype: 'bind',\n            apiData: this.bindPolicyApiData,\n            cliCommand: this.bindPolicyCliCommand,\n            apiRequest: '',\n            apiUrl: this.bindPolicyApiUrl,\n            status: 'loading',\n            retry: (summaryData) => { this.savePolicy(summaryData, 'Bind') }\n          }\n        ]\n      }\n    ];\n    if (!this.sdkOnlyDial && !this.sdkOnlyBind) {\n      summaryData.splice(0,0,{\n        title: 'Configurations',\n        entities: [interceptSummary, hostSummary]\n      });\n    } else if (!this.sdkOnlyDial) {\n      summaryData.splice(0,0,{\n        title: 'Configurations',\n        entities: [interceptSummary]\n      });\n    } else if (!this.sdkOnlyBind) {\n      summaryData.splice(0,0,{\n        title: 'Configurations',\n        entities: [hostSummary]\n      });\n    }\n    const data = {\n      summaryData: summaryData,\n      isEdit: this.isEdit\n    };\n    this.dialogRef = this.dialogForm.open(CreationSummaryDialogComponent, {\n      data: data,\n      autoFocus: false,\n    });\n    this.dialogRef.afterClosed().subscribe((result) => {\n      if (result === 'new') {\n        this.initFormData();\n      } else if (result === 'cancel') {\n        /// Do nothing, stay on page\n      } else {\n        this.initDataModels();\n        this._dataChange = false;\n        this.router?.navigateByUrl(`${this.basePath}`);\n      }\n    });\n    return summaryData;\n  }\n\n  async checkNameConflicts() {\n    const filter: FilterObj = {\n      filterName: 'name',\n      columnId: 'name',\n      value: this.serviceApiData.name,\n      label: '',\n      type: 'TEXTINPUT',\n      hidden: false,\n      verb: '='\n    }\n\n    const results: any = {\n      serviceConflict: false,\n      interceptConflict: false,\n      hostConflict: false,\n      dialPolicyConflict: false,\n      bindPolicyConflict: false,\n      names: []\n    };\n    const paging = cloneDeep(this.zitiService.DEFAULT_PAGING);\n    paging.noSearch = false;\n    const serviceProm = this.zitiService.get('services', paging, [filter]).then((result) => {\n      if (result.data?.length > 0) {\n        results.serviceConflict = true;\n        results.names.push(this.serviceApiData.name);\n      }\n    });\n    filter.value = this.interceptConfigApiData.name;\n    const interceptProm = this.zitiService.get('configs', paging, [filter]).then((result) => {\n      if (result.data?.length > 0) {\n        results.interceptConflict = true;\n        results.names.push(this.interceptConfigApiData.name);\n      }\n    });\n    filter.value = this.hostConfigApiData.name;\n    const hostProm = this.zitiService.get('configs', paging, [filter]).then((result) => {\n      if (result.data?.length > 0) {\n        results.hostConflict = true;\n        results.names.push(this.hostConfigApiData.name);\n      }\n    });\n    filter.value = this.dialPolicyApiData.name;\n    const dialProm = this.zitiService.get('service-policies', paging, [filter]).then((result) => {\n      if (result.data?.length > 0) {\n        results.dialPolicyConflict = true;\n        results.names.push(this.dialPolicyApiData.name);\n      }\n    });\n    filter.value = this.bindPolicyApiData.name;\n    const bindProm = this.zitiService.get('service-policies', paging, [filter]).then((result) => {\n      if (result.data?.length > 0) {\n        results.bindPolicyConflict = true;\n        results.names.push(this.bindPolicyApiData.name);\n      }\n    });\n\n    return Promise.all([serviceProm, interceptProm, hostProm, dialProm, bindProm]).then(() => {\n      let hasConflict = results.names.length > 0;\n      if (hasConflict) {\n        this.errors.name = true;\n        this.showConflictWarning(results);\n      }\n      return hasConflict;\n    });\n  }\n\n  showConflictWarning(conflictData) {\n\n    const data = {\n      appendId: 'SimpleServiceConflicts',\n      title: 'Name Conflict',\n      message: `The name you have entered has conflicts for the following entities`,\n      bulletList: conflictData.names,\n      submessage: `Please update the entered name and try again.`,\n      confirmLabel: 'Return',\n      showCancelLink: false,\n      imageUrl: 'assets/svgs/Growl_Error.svg'\n    };\n    this.dialogRef = this.dialogForm.open(ConfirmComponent, {\n      data: data,\n      autoFocus: false,\n    });\n    this.dialogRef.afterClosed(() => {\n      this.nameFieldInput.nativeElement.focus();\n    })\n  }\n\n  async saveInterceptConfig(summaryData) {\n    const isNewConfig = isEmpty(this.interceptConfigApiData?.id);\n\n    // Conditional Deletion (Identical Logic)\n    if (this.sdkOnlyDial && !isNewConfig) {\n      return this.zitiService.delete('configs', this.interceptConfigApiData.id);\n    } else if (this.sdkOnlyDial && isNewConfig) {\n      return;\n    }\n\n    // Use the Helper Function\n    const { status } = await this.saveConfig(\n        this.interceptConfigApiData,\n        'interceptIncrement',\n        'interceptConfigId',\n        'interceptConfigCliCommand'\n    );\n\n    // Apply final status logic\n    summaryData[0].entities[0].status = status;\n  }\n\n  async saveHostConfig(summaryData) {\n    const isNewConfig = isEmpty(this.hostConfigApiData?.id);\n\n    if (this.sdkOnlyBind && !isNewConfig) {\n      return this.zitiService.delete('configs', this.hostConfigApiData.id);\n    } else if (this.sdkOnlyBind && isNewConfig) {\n      return;\n    }\n\n    // Use the Helper Function\n    const { status, configApiData } = await this.saveConfig(\n        this.hostConfigApiData,\n        'hostIncrement',\n        'hostConfigId',\n        'hostConfigCliCommand'\n    );\n\n    // When sdkOnlyDial=true, Configurations group has only [hostSummary] → entities[0]\n    // When sdkOnlyDial=false, Configurations group has [interceptSummary, hostSummary] → entities[1]\n    if (this.sdkOnlyDial) {\n      summaryData[0].entities[0].status = status;\n      summaryData[0].entities[0].apiData = configApiData;\n    } else {\n      summaryData[0].entities[1].status = status;\n      summaryData[0].entities[1].apiData = configApiData;\n    }\n  }\n\n  async saveConfig(\n      configApiData: any,      // e.g., this.interceptConfigApiData\n      incrementer: string,     // The name of the incrementer property ('interceptIncrement' or 'hostIncrement')\n      configIdProp: string,    // The name of the ID property ('interceptConfigId' or 'hostConfigId')\n      cliCommandProp: string   // The name of the CLI command property ('interceptConfigCliCommand' or 'hostConfigCliCommand')\n  ): Promise<any> {\n\n    const isNewConfig = isEmpty(configApiData?.id);\n    const incrementValue = this[incrementer] as number; // Get current increment value\n    let status: string;\n    let configResult: any;\n\n    if (isNewConfig) {\n      this[incrementer] = incrementValue + 1; // Increment for naming\n\n      let postFix = '';\n      if (this[incrementer] > 0) {\n        postFix = '_' + this[incrementer];\n      }\n\n      configApiData.name = configApiData.name + postFix;\n\n      configResult = await this.saveEntity('configs', configApiData).catch((result) => result);\n    } else {\n      configResult = await this.updateEntity('configs', configApiData).catch((result) => result);\n    }\n\n    if (configResult.error) {\n      status = 'error';\n    } else {\n      // Set the config ID property dynamically (e.g., this.interceptConfigId)\n      this[configIdProp] = configApiData.id || configResult.id || configResult.data.id;\n\n      // Add the new config ID to serviceApiData (assuming serviceApiData is accessible via 'this')\n      this.serviceApiData.configs.push(this[configIdProp]);\n\n      // Set the CLI command dynamically\n      this[cliCommandProp] = `ziti edge create config '${configApiData.name}' '${configApiData.configTypeId}' '${JSON.stringify(configApiData.data)}'`;\n\n      status = 'done';\n      this[incrementer] = -1; // Reset incrementer\n    }\n\n    return { status, configResult, configApiData };\n  }\n\n  async saveService(summaryData) {\n    const isNewService = isEmpty(this.serviceApiData?.id);\n\n    let serviceResult;\n    if (isNewService) {\n      this.serviceIncrement++;\n      let postFix = '';\n      if (this.serviceIncrement > 0) {\n        postFix = '_' + this.serviceIncrement;\n      }\n      this.serviceApiData.name = this.serviceApiData.name + postFix;\n      set(this.serviceApiData, 'tags.service-type', 'simple');\n      serviceResult = await this.saveEntity('services', this.serviceApiData).catch((result) => {\n        return result;\n      });\n    } else {\n      serviceResult = await this.updateEntity('services', this.serviceApiData).catch((result) => {\n        return result;\n      });\n    }\n\n    let serviceStatus;\n    if (serviceResult.error) {\n      serviceStatus = 'error';\n    } else {\n      this.serviceId = this.serviceApiData.id ? this.serviceApiData.id : (serviceResult.id ? serviceResult.id : serviceResult.data.id);\n      serviceStatus = 'done';\n      let cliConfigIds = '';\n      if (!this.sdkOnlyDial && !this.sdkOnlyBind) {\n        cliConfigIds = `--configs '${this.interceptConfigId},${this.hostConfigId}'`;\n      } else if (!this.sdkOnlyDial && this.sdkOnlyBind) {\n        cliConfigIds = `--configs '${this.interceptConfigId}'`;\n      } else if (this.sdkOnlyDial && !this.sdkOnlyBind) {\n        cliConfigIds = `--configs '${this.hostConfigId}'`;\n      }\n      this.serviceCliCommand = `ziti edge create service '${this.serviceApiData.name}' ${cliConfigIds}`\n      this.serviceIncrement = -1;\n    }\n    const summaryIndex = (this.sdkOnlyDial && this.sdkOnlyBind) ? 0 : 1;\n    summaryData[summaryIndex].entities[0].status = serviceStatus;\n  }\n\n  async savePolicy(summaryData, type = 'Dial') {\n    const isNewPolicy = isEmpty(this.serviceApiData?.id);\n\n    let policyApiData, policyResult, roleAttributes, namedAttributes;\n    let cliRoles = '';\n    let status = '';\n    if (isNewPolicy) {\n      if (type === 'Dial') {\n        this.dialIncrement++;\n        let postFix = '';\n        if (this.dialIncrement > 0) {\n          postFix = '_' + this.dialIncrement;\n        }\n        this.dialPolicyApiData.name = this.dialPolicyApiData.name + postFix;\n        policyApiData = this.dialPolicyApiData;\n        roleAttributes = this.dialPolicyRoleAttributes;\n        namedAttributes = this.dialPolicyNamedAttributes;\n      } else {\n        this.bindIncrement++;\n        let postFix = '';\n        if (this.bindIncrement > 0) {\n          postFix = '_' + this.bindIncrement;\n        }\n        this.bindPolicyApiData.name = this.bindPolicyApiData.name + postFix;\n        policyApiData = this.bindPolicyApiData;\n        roleAttributes = this.bindPolicyRoleAttributes;\n        namedAttributes = this.bindPolicyNamedAttributes;\n      }\n      policyApiData.serviceRoles = [`@${this.serviceId}`];\n      policyApiData.identityRoles = namedAttributes.map((name) => {\n        cliRoles += '@' + this.identitiesNameIdMap[name] + ',';\n        return '@' + this.identitiesNameIdMap[name];\n      });\n      policyApiData.identityRoles = [...policyApiData.identityRoles, ...roleAttributes.map((role) => {\n        cliRoles += '#' + role + ',';\n        return '#' + role;\n      })];\n      cliRoles = cliRoles.slice(0, -1);\n      policyResult = await this.saveEntity('service-policies', policyApiData).catch((result) => {\n        return result;\n      });\n    } else {\n      if (type === 'Dial') {\n        policyApiData = this.dialPolicyApiData;\n        roleAttributes = this.dialPolicyRoleAttributes;\n        namedAttributes = this.dialPolicyNamedAttributes;\n      } else {\n        policyApiData = this.bindPolicyApiData;\n        roleAttributes = this.bindPolicyRoleAttributes;\n        namedAttributes = this.bindPolicyNamedAttributes;\n      }\n      policyApiData.serviceRoles = [`@${this.serviceId}`];\n      policyApiData.identityRoles = namedAttributes.map((name) => {\n        cliRoles += '@' + this.identitiesNameIdMap[name] + ',';\n        return '@' + this.identitiesNameIdMap[name];\n      });\n      policyApiData.identityRoles = [...policyApiData.identityRoles, ...roleAttributes.map((role) => {\n        cliRoles += '#' + role + ',';\n        return '#' + role;\n      })];\n      cliRoles = cliRoles.slice(0, -1);\n      policyResult = await this.updateEntity('service-policies', policyApiData).catch((result) => {\n        return result;\n      });\n    }\n\n    if (policyResult.error) {\n      status = 'error';\n    } else {\n      status = 'done';\n    }\n    const summaryIndex = (this.sdkOnlyDial && this.sdkOnlyBind) ? 1 : 2;\n    const entityIndex = type === 'Dial' ? 0 : 1;\n    summaryData[summaryIndex].entities[entityIndex].status = status;\n    const cliCommand = `ziti edge create service-policy '${policyApiData.name}' ${type} --semantic AnyOf --service-roles '@${this.serviceId}' --identity-roles '${cliRoles}'`;\n    if (type === 'Dial') {\n      this.dialPolicyCliCommand = cliCommand;\n      if (status === 'done') {\n        this.dialIncrement = -1;\n      } else {\n        this.bindIncrement = -1;\n      }\n    } else {\n      this.bindPolicyCliCommand = cliCommand;\n    }\n  }\n\n  saveEntity(type, data) {\n    return this.zitiService.post(type, data, true);\n  }\n\n  updateEntity(type, data) {\n    return this.zitiService.patch(type, data, data.id, true);\n  }\n\n  validate() {\n    this.errors = {};\n    this.validateServiceName();\n    this.validateInterceptAddress();\n    this.validateInterceptPort();\n    this.validateHostAddress();\n    this.validateHostPort();\n    this.validateDialIdentities()\n    this.validateBindIdentities();\n    return isEmpty(this.errors);\n  }\n\n  validateServiceName() {\n    if (isEmpty(this.serviceApiData.name)) {\n      this.errors.name = true;\n    } else {\n      unset(this.errors, 'name');\n    }\n  }\n\n  validateInterceptAddress() {\n    if (this.sdkOnlyDial) {\n      unset(this.errors, 'interceptAddress');\n      unset(this.errors, 'interceptAddressFormat');\n      return;\n    }\n    if (isEmpty(this.interceptConfigApiData.data.addresses) || isEmpty(this.interceptConfigApiData.data.addresses[0])) {\n      this.errors.interceptAddress = true;\n    } else if (!this.validationService.isValidInterceptHost(this.interceptConfigApiData.data.addresses[0])) {\n      this.errors.interceptAddress = true;\n      this.errors.interceptAddressFormat = true;\n    } else {\n      unset(this.errors, 'interceptAddress');\n      unset(this.errors, 'interceptAddressFormat');\n    }\n  }\n\n  validateInterceptPort() {\n    if (this.sdkOnlyDial) {\n      unset(this.errors, 'interceptPort');\n      return;\n    }\n    if (isEmpty(this.interceptConfigApiData.data.portRanges)) {\n      this.errors.interceptPort = true;\n    } else if (this.validationService.validatePortRanges(this.interceptConfigApiData.data.portRanges)) {\n      this.errors.interceptPort = true;\n    } else {\n      unset(this.errors, 'interceptPort');\n    }\n  }\n\n  validateHostAddress() {\n    if (!this.sdkOnlyBind && isEmpty(this.hostConfigApiData.data.address)) {\n      this.errors.hostAddress = true;\n    } else {\n      unset(this.errors, 'hostAddress');\n    }\n  }\n\n  validateHostPort() {\n    if (this.sdkOnlyBind) {\n      unset(this.errors, 'hostPort');\n      return;\n    }\n    if (isNil(this.hostConfigApiData.data.port) || isNaN(this.hostConfigApiData.data.port)) {\n      this.errors.hostPort = true;\n    } else if (!this.validationService.isValidPort(this.hostConfigApiData.data.port)) {\n      this.errors.hostPort = true;\n    } else {\n      unset(this.errors, 'hostPort');\n    }\n  }\n\n  validateDialIdentities() {\n    if (isEmpty([...this.dialPolicyNamedAttributes, ...this.dialPolicyRoleAttributes])) {\n      this.errors.dialIdentities = true;\n    } else {\n      unset(this.errors, 'dialIdentities');\n    }\n  }\n\n  validateBindIdentities() {\n    if (isEmpty([...this.bindPolicyNamedAttributes, ...this.bindPolicyRoleAttributes])) {\n      this.errors.bindIdentities = true;\n    } else {\n      unset(this.errors, 'bindIdentities');\n    }\n  }\n\n  getServicesApiRequest() {\n    return `curl '${this.controllerDomain}/edge/management/v1/services' \\\\\n      -H 'accept: application/json, text/plain, */*' \\\\\n      -H 'content-type: application/json' \\\\\n      -H 'zt-session: ${this.zitiSessionId}' \\\\\n      --data-raw '${JSON.stringify(this.serviceApiData)}' \\\\`\n  }\n\n  getInterceptConfigApiRequest() {\n    return `curl '${this.controllerDomain}/edge/management/v1/configs' \\\\\n      -H 'accept: application/json, text/plain, */*' \\\\\n      -H 'content-type: application/json' \\\\\n      -H 'zt-session: ${this.zitiSessionId}' \\\\\n      --data-raw '${JSON.stringify(this.interceptConfigApiData)}' \\\\`\n  }\n\n  getHostConfigApiRequest() {\n    return `curl '${this.controllerDomain}/edge/management/v1/configs' \\\\\n      -H 'accept: application/json, text/plain, */*' \\\\\n      -H 'content-type: application/json' \\\\\n      -H 'zt-session: ${this.zitiSessionId}' \\\\\n      --data-raw '${JSON.stringify(this.hostConfigApiData)}' \\\\`\n  }\n\n  getDialApiRequest() {\n    return `curl '${this.controllerDomain}/edge/management/v1/service-policies' \\\\\n      -H 'accept: application/json, text/plain, */*' \\\\\n      -H 'content-type: application/json' \\\\\n      -H 'zt-session: ${this.zitiSessionId}' \\\\\n      --data-raw '${JSON.stringify(this.dialPolicyApiData)}' \\\\`;\n  }\n\n  getBindApiRequest() {\n    return `curl '${this.controllerDomain}/edge/management/v1/service-policies' \\\\\n      -H 'accept: application/json, text/plain, */*' \\\\\n      -H 'content-type: application/json' \\\\\n      -H 'zt-session: ${this.zitiSessionId}' \\\\\n      --data-raw '${JSON.stringify(this.bindPolicyApiData)}' \\\\`;\n  }\n\n  initDataModels() {\n    this.serviceApiData = this.initServiceApiData;\n    this.interceptConfigApiData.data = this.initInterceptConfigApiData.data;\n    this.hostConfigApiData.data = this.initHostConfigApiData.data;\n    this.dialPolicyApiData = this.initDialPolicyApiData;\n    this.bindPolicyApiData = this.initBindPolicyApiData;\n  }\n\n  convertToAdvanced() {\n    const data = {\n      appendId: 'ConvertSimpleService',\n      title: 'Convert Service',\n      message: `Are you sure you would like to convert this simple service to an advanced service? This change cannot be undone.`,\n      bulletList: [],\n      confirmLabel: 'Yes',\n      cancelLabel: 'Oops, no get me out of here',\n      imageUrl: 'assets/svgs/Growl_Warning.svg',\n      showCancelLink: true\n    };\n    this.dialogRef = this.dialogForm.open(ConfirmComponent, {\n      data: data,\n      autoFocus: false,\n    });\n    this.dialogRef.afterClosed().subscribe((result) => {\n      if (result?.confirmed) {\n        this.serviceApiData.tags['service-type'] = 'advanced';\n        this.updateEntity('services', this.serviceApiData)\n          .then(() => {\n            const growlerData = new GrowlerModel(\n                'success',\n                'Success',\n                `Service Updated`,\n                `Successfully converted ${this.serviceApiData.name} to an advanced service.`,\n            );\n            this.growlerService.show(growlerData);\n            this.setInitData();\n            this.router.navigate([URLS.ZITI_ADVANCED_SERVICE + '/' + this.serviceApiData.id]);\n          })\n          .catch((result) => {\n            const growlerData = new GrowlerModel(\n                'error',\n                'Error',\n                `Failed to Update Service`,\n                `Unable to convert ${this.serviceApiData.name} to an advanced service.`,\n            );\n            this.growlerService.show(growlerData);\n          });\n      }\n    });\n\n  }\n\n  protected override deleteServiceWithOrphans(): Promise<any> {\n    return this.getOrphanedEntities().then((orphans) => {\n      return this.deleteServiceAndOrphans(orphans);\n    });\n  }\n\n  protected override openPreviewDeletions() {\n    // Close the confirm dialog first\n    if (this['deleteConfirmDialogRef']) {\n      this['deleteConfirmDialogRef'].close();\n    }\n\n    this.getOrphanedEntities().then((serviceItem) => {\n      const data = {\n        appendId: 'PreviewServiceDeletions',\n        title: 'Preview Deletions',\n        subtitle: 'Preview of all associated entities that will be orphaned and deleted',\n        selectedItems: [serviceItem],\n        deleteConfirmed: true\n      };\n\n      const dialogRef = this.dialogForm.open(PreviewSelectionsComponent, {\n        data: data,\n        autoFocus: false,\n      });\n\n      dialogRef.afterClosed().subscribe((result) => {\n        if (result?.confirmed) {\n          this.isLoading = true;\n          this.deleteServiceAndOrphans(serviceItem).then(() => {\n            const growlerData = new GrowlerModel(\n              'success',\n              'Success',\n              `Service Deleted`,\n              `Successfully deleted service \"${this.serviceApiData.name}\" and all orphaned entities`,\n            );\n            this.growlerService.show(growlerData);\n            this.router?.navigateByUrl(URLS.ZITI_SERVICES);\n          }).catch((error) => {\n            const growlerData = new GrowlerModel(\n              'error',\n              'Error',\n              `Delete Failed`,\n              `Failed to delete service: ${error?.error?.error?.message || error?.message || 'Unknown error'}`,\n            );\n            this.growlerService.show(growlerData);\n          }).finally(() => {\n            this.isLoading = false;\n          });\n        }\n      });\n    });\n  }\n\n  private getOrphanedEntities(): Promise<any> {\n    const serviceItem = {\n      id: this.serviceApiData.id,\n      name: this.serviceApiData.name,\n      associatedConfigs: [],\n      associatedServicePolicies: []\n    };\n\n    const configsPromise = this.zitiService.getSubdata('services', this.serviceApiData.id, 'configs').then((result) => {\n      const configs = result.data;\n      const configPromises = configs.map((config) => {\n        return this.zitiService.getSubdata('configs', config.id, 'services').then((result) => {\n          const associatedServices = result.data;\n          const isOrphan = !associatedServices.some((svc) => svc.id !== this.serviceApiData.id);\n          if (isOrphan) {\n            serviceItem.associatedConfigs.push({id: config.id, name: config.name});\n          }\n        });\n      });\n      return Promise.all(configPromises);\n    }).catch(() => Promise.resolve());\n\n    const policiesPromise = this.zitiService.getSubdata('services', this.serviceApiData.id, 'service-policies').then((result) => {\n      const policies = result.data;\n      const policyPromises = policies.map((pol) => {\n        const roleAttributes = pol.serviceRoles.filter((attr) => attr.charAt(0) === '#').map((attr) => attr.substring(1));\n        if (roleAttributes.length === 0) {\n          // Policy uses direct service references (@serviceId), not role attributes\n          // If it only references this service, it's an orphan\n          const directRefs = pol.serviceRoles.filter((attr) => attr.charAt(0) === '@').map((attr) => attr.substring(1));\n          const onlyReferencesThisService = directRefs.length === 1 && directRefs[0] === this.serviceApiData.id;\n          if (onlyReferencesThisService) {\n            serviceItem.associatedServicePolicies.push({id: pol.id, name: pol.name});\n          }\n          return Promise.resolve();\n        }\n        return this.zitiService.get('services', {}, roleAttributes).then((result: any) => {\n          const services = result.data || [];\n          const isOrphan = !services.some((svc) => svc.id !== this.serviceApiData.id);\n          if (isOrphan) {\n            serviceItem.associatedServicePolicies.push({id: pol.id, name: pol.name});\n          }\n        });\n      });\n      return Promise.all(policyPromises);\n    }).catch(() => Promise.resolve());\n\n    return Promise.all([configsPromise, policiesPromise]).then(() => serviceItem);\n  }\n\n  private deleteServiceAndOrphans(serviceItem): Promise<any> {\n    const promises = [];\n    promises.push(this.zitiService.delete('services', serviceItem.id));\n\n    serviceItem.associatedConfigs.forEach((config) => {\n      promises.push(this.zitiService.delete('configs', config.id));\n    });\n\n    serviceItem.associatedServicePolicies.forEach((policy) => {\n      promises.push(this.zitiService.delete('service-policies', policy.id));\n    });\n\n    return Promise.all(promises);\n  }\n\n  override checkDataChange() {\n    const serviceDataChange = !isEqual(this.initServiceApiData, this.serviceApiData);\n    const interceptDataChange = !isEqual(this.initInterceptConfigApiData.data, this.interceptConfigApiData.data);\n    const hostDataChange = !isEqual(this.initHostConfigApiData.data, this.hostConfigApiData.data);\n    const dialDataChange = !isEqual(this.initDialPolicyApiData, this.dialPolicyApiData);\n    const bindDataChange = !isEqual(this.initBindPolicyApiData, this.bindPolicyApiData);\n    const dataChange = serviceDataChange !== this.serviceDataChange || interceptDataChange !== this.interceptDataChange || hostDataChange !== this.hostDataChange ||\n        dialDataChange !== this.dialDataChange || bindDataChange !== this.bindDataChange;\n    if (dataChange) {\n      this.serviceDataChange = serviceDataChange;\n      this.interceptDataChange = interceptDataChange;\n      this.hostDataChange = hostDataChange;\n      this.dialDataChange = dialDataChange;\n      this.bindDataChange = bindDataChange;\n      this.dataChange.emit(dataChange);\n    }\n    this._dataChange = serviceDataChange || interceptDataChange || hostDataChange || dialDataChange || bindDataChange;\n  }\n\n  clear(): void {\n  }\n}\n","<div class=\"projectable-form-wrapper simple-service-wrapper\"\n  (keyup.enter)=\"save($event)\"\n  (keyup.escape)=\"closeModal(true, false, 'cards', $event)\"\n  tabindex=\"0\"\n  [class.projectable-form-hidden]=\"!dataInit\"\n  >\n  <lib-form-header\n    [data]=\"formData\"\n    [title]=\"isEdit ? 'Edit Simple Service' : 'Create a Simple Service'\"\n    [actionButtonText]=\"'Save'\"\n    [multiActions]=\"multiActions\"\n    (actionRequested)=\"headerActionRequested($event)\"\n    (multiActionRequested)=\"multiActionRequested($event)\"\n    [(formView)]=\"formView\"\n    [moreActions]=\"moreActions\"\n    [class.is-scrolled]=\"isScrolled\"\n    [strictReadonlyUi]=\"useStrictReadonlyForm\"\n    [saveDisabled]=\"formPermissionSaveDisabled\"\n    [saveTooltip]=\"formPermissionSaveTooltip\"\n  ></lib-form-header>\n\n  <div class=\"simple-service-form-container projectable-form-container\" #formContainer>\n    @if (showForm) {\n      <div class=\"form-group-column three-fifths\">\n        <div  id=\"InlineServiceArea\" class=\"anyadd\">\n          <div class=\"simple-service-inputs\">\n            <lib-form-field-container [title]=\"'Service Details'\">\n              <div class=\"form-field-input-group service-group\">\n                <div class=\"form-field-sub-group\">\n                  <div class=\"config-title-row\">\n                    <span class=\"form-field-title\">Service Name</span>\n                  </div>\n                  @if (!useStrictReadonlyForm) {\n                    <input\n                    class=\"form-field-input\"\n                    placeholder=\"Name this service\"\n                    autofocus\n                    #nameFieldInput\n                    [ngClass]=\"{error: errors.name}\"\n                    [(ngModel)]=\"serviceApiData.name\"\n                    (keyup)=\"serviceNameChanged($event)\"\n                    (change)=\"validateServiceName()\"\n                    />\n                  } @else {\n                    <div class=\"form-field-readonly-value\">{{ serviceApiData.name }}</div>\n                  }\n                </div>\n                <div class=\"form-field-sub-group\">\n                  <div class=\"config-title-row\">\n                    <span class=\"form-field-title\">SELECT OR CREATE SERVICE ATTRIBUTES</span>\n                  </div>\n                  <lib-tag-selector\n                    [disableField]=\"useStrictReadonlyForm\"\n                    [disableCreate]=\"useStrictReadonlyForm\"\n                    [(selectedRoleAttributes)]=\"serviceApiData.roleAttributes\"\n                    [availableRoleAttributes]=\"serviceRoleAttributes\"\n                    [placeholder]=\"'Add attributes to group services'\"\n                  ></lib-tag-selector>\n                </div>\n              </div>\n            </lib-form-field-container>\n          </div>\n        </div>\n      </div>\n    }\n    @if (showForm) {\n      <div class=\"simple-service-center-content\">\n        <div class=\"form-group-row\">\n          <lib-form-field-container\n            [title]=\"'ACCESSING CONFIGURATION'\"\n            [contentStyle]=\"'z-index: 10001'\"\n            [helpText]=\"'How will client applications use this service? Specify an address and port, or use the &quot;SDK Only&quot; toggle for an application embedded configuration.'\"\n            >\n            <div class=\"form-field-input-group accessing-group\">\n              @if (canReadRelated('identities')) {\n              <div class=\"form-field-sub-group\">\n                <div class=\"config-title-row\">\n                  <span class=\"form-field-title\">What identities can access this service?</span>\n                </div>\n                <lib-tag-selector\n                  [disableField]=\"useStrictReadonlyForm\"\n                  [disableCreate]=\"useStrictReadonlyForm\"\n                  [(selectedNamedAttributes)]=\"dialPolicyNamedAttributes\"\n                  [(selectedRoleAttributes)]=\"dialPolicyRoleAttributes\"\n                  [availableNamedAttributes]=\"identityNamedAttributes\"\n                  [availableRoleAttributes]=\"identityRoleAttributes\"\n                  [placeholder]=\"'Select identity attributes to grant access'\"\n                  [hasError]=\"errors.dialIdentities\"\n                  (selectedNamedAttributesChange)=\"validateDialIdentities()\"\n                  (selectedRoleAttributesChange)=\"validateDialIdentities()\"\n                  (filterChange)=\"getIdentityNamedAttributes($event)\"\n                ></lib-tag-selector>\n              </div>\n              }\n              <div class=\"form-field-sub-group\">\n                <div class=\"config-title-row\">\n                  <span class=\"form-field-title\">How will the service be accessed?</span>\n                </div>\n                <div class=\"grid addressPort\">\n                  <div class=\"config-item-container\">\n                    <span class=\"config-item-label\">SDK ONLY</span>\n                    <div\n                      class=\"sdk-toggle form-field-toggle\"\n                      >\n                      <div class=\"switchGrid\">\n                        <div>\n                          <div\n                            (click)=\"toggleSdkOnlyDial()\"\n                            [ngClass]=\"{ on: sdkOnlyDial }\"\n                            class=\"toggle\"\n                            >\n                            <span [hidden]=\"!sdkOnlyDial\" class=\"on-label\">YES</span>\n                            <span [hidden]=\"sdkOnlyDial\" class=\"off-label\">NO</span>\n                            <div class=\"switch\"></div>\n                          </div>\n                        </div>\n                      </div>\n                    </div>\n                  </div>\n                  <div class=\"config-item-container\" [ngClass]=\"{disabled: sdkOnlyDial}\">\n                    <div class=\"config-hostname-label\">\n                      <span class=\"config-item-label\">Address</span>\n                      <div\n                        class=\"form-field-info infoicon\"\n                        matTooltip=\"Accessing hostnames must include a '.'\"\n                        matTooltipPosition=\"above\"\n                      ></div>\n                      @if (errors.interceptAddressFormat) {\n                        <span class=\"error-label\">Accessing address must include a '.'</span>\n                      }\n                    </div>\n                    <input id=\"HowTo\" type=\"text\" maxlength=\"100\" data-i18n=\"EgHost\" (change)=\"validateInterceptAddress()\" [ngClass]=\"{error: errors.interceptAddress}\" [placeholder]=\"sdkOnlyDial ? '' : 'e.g. myservice.ziti'\" [ngModel]=\"sdkOnlyDial ? '' : interceptConfigApiData.data.addresses[0]\" (ngModelChange)=\"sdkOnlyDial ? '' : interceptConfigApiData.data.addresses[0] = $event\"/>\n                  </div>\n                  <div class=\"config-item-container\" [ngClass]=\"{disabled: sdkOnlyDial}\">\n                    <span class=\"config-item-label\">PORT</span>\n                    <input id=\"HowToPort\" type=\"number\" maxlength=\"10\" (change)=\"validateInterceptPort()\" [ngClass]=\"{error: errors.interceptPort}\" [placeholder]=\"sdkOnlyDial ? '' : 443\" (keyup)=\"interceptPortChanged($event)\" [ngModel]=\"sdkOnlyDial ? '' : interceptPort\" (ngModelChange)=\"sdkOnlyDial ? '' : interceptPort = $event\"/>\n                  </div>\n                </div>\n              </div>\n            </div>\n          </lib-form-field-container>\n          <lib-form-field-container\n            [title]=\"'HOSTING CONFIGURATION'\"\n            [contentStyle]=\"'z-index: 10000'\"\n            [helpText]=\"'Where should traffic for this service be sent? Specify a protocol, address, and port, or use the &quot;SDK Only&quot; toggle for an application embedded configuration.'\"\n            >\n            <div class=\"form-field-input-group hosting-group\">\n              @if (canReadRelated('identities')) {\n              <div class=\"form-field-sub-group\">\n                <div class=\"config-title-row\">\n                  <span class=\"form-field-title\">What identities can host this service?</span>\n                </div>\n                <lib-tag-selector\n                  [disableField]=\"useStrictReadonlyForm\"\n                  [disableCreate]=\"useStrictReadonlyForm\"\n                  [(selectedNamedAttributes)]=\"bindPolicyNamedAttributes\"\n                  [(selectedRoleAttributes)]=\"bindPolicyRoleAttributes\"\n                  [availableNamedAttributes]=\"identityNamedAttributes\"\n                  [availableRoleAttributes]=\"identityRoleAttributes\"\n                  [placeholder]=\"'Select identity attributes'\"\n                  [hasError]=\"errors.bindIdentities\"\n                  (selectedNamedAttributesChange)=\"validateBindIdentities()\"\n                  (selectedRoleAttributesChange)=\"validateBindIdentities()\"\n                  (filterChange)=\"getIdentityNamedAttributes($event)\"\n                ></lib-tag-selector>\n              </div>\n              }\n              <div class=\"form-field-sub-group\">\n                <div class=\"config-title-row\">\n                  <span class=\"form-field-title\">Where should traffic be sent?</span>\n                </div>\n                <div class=\"grid addressFull\">\n                  <div class=\"config-item-container\">\n                    <span class=\"config-item-label\">SDK ONLY</span>\n                    <div\n                      class=\"sdk-toggle form-field-toggle\"\n                      >\n                      <div class=\"switchGrid\">\n                        <div>\n                          <div\n                            (click)=\"toggleSdkOnlyBind()\"\n                            [ngClass]=\"{ on: sdkOnlyBind }\"\n                            class=\"toggle\"\n                            >\n                            <span [hidden]=\"!sdkOnlyBind\" class=\"on-label\">YES</span>\n                            <span [hidden]=\"sdkOnlyBind\" class=\"off-label\">NO</span>\n                            <div class=\"switch\"></div>\n                          </div>\n                        </div>\n                      </div>\n                    </div>\n                  </div>\n                  <div class=\"config-item-container\" [ngClass]=\"{disabled: sdkOnlyBind}\">\n                    <span class=\"config-item-label\">PROTOCOL</span>\n                    <select id=\"HostedProtocol\" (change)=\"hostProtocolsChanged($event)\" [ngModel]=\"sdkOnlyBind ? '' : hostProtocol\" (ngModelChange)=\"sdkOnlyBind ? '' : hostProtocol = $event\">\n                      <option value=\"tcp\">TCP</option>\n                      <option value=\"udp\" >UDP</option>\n                      <option value=\"both\" >TCP/UDP</option>\n                    </select>\n                  </div>\n                  <div class=\"config-item-container\" [ngClass]=\"{disabled: sdkOnlyBind}\">\n                    <span class=\"config-item-label\">Address</span>\n                    <input id=\"HostedHost\" type=\"text\" maxlength=\"100\" data-i18n=\"EgHost\" (change)=\"validateHostAddress()\" [ngClass]=\"{error: errors.hostAddress}\" [placeholder]=\"sdkOnlyBind ? '' : 'e.g. myservice.ziti'\" [ngModel]=\"sdkOnlyBind ? '' : hostConfigApiData.data.address\" (ngModelChange)=\"sdkOnlyBind ? '' : hostConfigApiData.data.address = $event\"/>\n                  </div>\n                  <div class=\"config-item-container\" [ngClass]=\"{disabled: sdkOnlyBind}\">\n                    <span class=\"config-item-label\">PORT</span>\n                    <input id=\"HostedPort\" type=\"number\" maxlength=\"10\" (change)=\"validateHostPort()\" [ngClass]=\"{error: errors.hostPort}\" [placeholder]=\"sdkOnlyBind ? '' : 443\" [ngModel]=\"sdkOnlyBind ? '' : hostConfigApiData.data.port\" (ngModelChange)=\"sdkOnlyBind ? '' : hostConfigApiData.data.port = $event\"/>\n                  </div>\n                </div>\n              </div>\n            </div>\n          </lib-form-field-container>\n        </div>\n      </div>\n    }\n  </div>\n</div>\n@if (isLoading || !dataInit) {\n  <lib-loading-indicator [isLoading]=\"isLoading || !dataInit\"></lib-loading-indicator>\n}\n","export class EdgeRouterPolicy {\n    name = '';\n    edgeRouterRoles: any[] = [];\n    identityRoles: any[] = [];\n    semantic = 'AnyOf';\n    tags: any = {}\n};","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Injectable, Inject} from \"@angular/core\";\nimport {cloneDeep, isEmpty} from 'lodash';\nimport moment from 'moment';\nimport {DataTableFilterService, FilterObj} from \"../../features/data-table/data-table-filter.service\";\nimport {ListPageServiceClass} from \"../../shared/list-page-service.class\";\nimport {\n    TableColumnDefaultComponent\n} from \"../../features/data-table/column-headers/table-column-default/table-column-default.component\";\nimport {CallbackResults} from \"../../features/list-page-features/list-page-form/list-page-form.component\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../services/settings.service\";\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../services/ziti-data.service\";\nimport {CsvDownloadService} from \"../../services/csv-download.service\";\nimport {EdgeRouterPolicy} from \"../../models/edge-router-policy\";\nimport {unset} from \"lodash\";\nimport {GrowlerModel} from \"../../features/messaging/growler.model\";\nimport {GrowlerService} from \"../../features/messaging/growler.service\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {SettingsServiceClass} from \"../../services/settings-service.class\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../features/extendable/extensions-noop.service\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {TableCellNameComponent} from \"../../features/data-table/cells/table-cell-name/table-cell-name.component\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class EdgeRouterPoliciesPageService extends ListPageServiceClass {\n\n    private paging = this.DEFAULT_PAGING;\n    public modalType = 'edge-router-policy';\n\n    serviceType = '';\n    selectedEdgeRouterPolicy: any = new EdgeRouterPolicy();\n\n    routerRoleAttributes = [];\n    routerNamedAttributes = [];\n    routerNamedAttributesMap = {};\n    selectedRouterRoleAttributes = [];\n    selectedRouterNamedAttributes = [];\n\n    identityRoleAttributes = [];\n    identityNamedAttributes = [];\n    identityNamedAttributesMap = {};\n    selectedIdentityRoleAttributes = [];\n    selectedIdentityNamedAttributes = [];\n\n    postureRoleAttributes = [];\n    postureNamedAttributes = [];\n    postureNamedAttributesMap = {};\n    selectedPostureRoleAttributes = [];\n    selectedPostureNamedAttributes = [];\n\n    columnFilters: any = {\n        name: '',\n        os: '',\n        createdAt: '',\n    };\n\n    override menuItems = [\n        {name: 'Edit', action: 'update'},\n        {name: 'Delete', action: 'delete'},\n    ]\n\n    override tableHeaderActions = [\n        {name: 'Download All', action: 'download-all'},\n        {name: 'Download Selected', action: 'download-selected'},\n    ]\n\n    resourceType = 'edge-router-policies';\n    constructor(\n        @Inject(SETTINGS_SERVICE) settings: SettingsServiceClass,\n        filterService: DataTableFilterService,\n        @Inject(ZITI_DATA_SERVICE) private zitiService: ZitiDataService,\n        override csvDownloadService: CsvDownloadService,\n        private growlerService: GrowlerService,\n        private dialogForm: MatDialog,\n        @Inject(SHAREDZ_EXTENSION) private extService: ExtensionService,\n        protected override router: Router\n    ) {\n        super(settings, filterService, csvDownloadService, extService, router);\n        this.filterService.filtersChanged.subscribe(filters => {\n            let routerFilter, identityFilter, postureFilter;\n            filters.forEach((filter) => {\n                switch (filter.columnId) {\n                    case 'edgeRouterRoles':\n                        routerFilter = true;\n                        break;\n                    case 'identityRoles':\n                        identityFilter = true;\n                        break;\n                    case 'postureRoles':\n                        postureFilter = true;\n                        break;\n                }\n            });\n            if (!routerFilter) {\n                this.selectedRouterRoleAttributes = [];\n                this.selectedRouterNamedAttributes = [];\n            }\n            if (!identityFilter) {\n                this.selectedIdentityRoleAttributes = [];\n                this.selectedIdentityNamedAttributes = [];\n            }\n        });\n    }\n\n    validate = (formData): Promise<CallbackResults> => {\n        return Promise.resolve({ passed: true});\n    }\n\n    initTableColumns(): any {\n        const createdAtHeaderComponentParams = {\n            filterType: 'DATETIME',\n        };\n        const self = this;\n        const routerRolesHeaderComponentParams = {\n            filterType: 'ATTRIBUTE',\n            enableSorting: true,\n            getRoleAttributes: () => {\n                return self.routerRoleAttributes;\n            },\n            getNamedAttributes: () => {\n                return self.routerNamedAttributes;\n            },\n            getSelectedRoleAttributes: () => {\n                return self.selectedRouterRoleAttributes;\n            },\n            getSelectedNamedAttributes: () => {\n                return self.selectedRouterNamedAttributes;\n            },\n            setSelectedRoleAttributes: (attributes) => {\n                self.selectedRouterRoleAttributes = attributes;\n            },\n            setSelectedNamedAttributes: (attributes) => {\n                self.selectedRouterNamedAttributes = attributes;\n            },\n            getNamedAttributesMap: () => {\n                return self.routerNamedAttributesMap;\n            }\n        };\n        const identityRolesHeaderComponentParams = {\n            filterType: 'ATTRIBUTE',\n            enableSorting: true,\n            getRoleAttributes: () => {\n                return self.identityRoleAttributes;\n            },\n            getNamedAttributes: () => {\n                return self.identityNamedAttributes;\n            },\n            getSelectedRoleAttributes: () => {\n                return self.selectedIdentityRoleAttributes;\n            },\n            getSelectedNamedAttributes: () => {\n                return self.selectedIdentityNamedAttributes;\n            },\n            setSelectedRoleAttributes: (attributes) => {\n                self.selectedIdentityRoleAttributes = attributes;\n            },\n            setSelectedNamedAttributes: (attributes) => {\n                self.selectedIdentityNamedAttributes = attributes;\n            },\n            getNamedAttributesMap: () => {\n                return self.identityNamedAttributesMap;\n            }\n        };\n\n        const postureRolesHeaderComponentParams = {\n            filterType: 'ATTRIBUTE',\n            enableSorting: true,\n            getRoleAttributes: () => {\n                return self.postureRoleAttributes;\n            },\n            getNamedAttributes: () => {\n                return self.postureNamedAttributes;\n            },\n            getSelectedRoleAttributes: () => {\n                return self.selectedPostureRoleAttributes;\n            },\n            getSelectedNamedAttributes: () => {\n                return self.selectedPostureNamedAttributes;\n            },\n            setSelectedRoleAttributes: (attributes) => {\n                self.selectedPostureRoleAttributes = attributes;\n            },\n            setSelectedNamedAttributes: (attributes) => {\n                self.selectedPostureNamedAttributes = attributes;\n            },\n            getNamedAttributesMap: () => {\n                return self.postureNamedAttributesMap;\n            }\n        };\n\n        const semanticHeaderComponentParams = {\n            filterType: 'SELECT',\n            enableSorting: true,\n            filterOptions: [\n                { label: 'Any Of', value: 'AnyOf', columnId: 'semantic'},\n                { label: 'All Of', value: 'AllOf', columnId: 'semantic' },\n            ],\n            getFilterOptions: () => {\n                return semanticHeaderComponentParams.filterOptions;\n            }\n        };\n\n        const typeHeaderComponentParams = {\n            filterType: 'SELECT',\n            enableSorting: true,\n            filterOptions: [\n                { label: 'Dial', value: 'Dial', columnId: 'type' },\n                { label: 'Bind', value: 'Bind', columnId: 'type' },\n            ],\n            getFilterOptions: () => {\n                return typeHeaderComponentParams.filterOptions;\n            }\n        };\n\n        return [\n            {\n                colId: 'name',\n                field: 'name',\n                headerName: 'Name',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: this.headerComponentParams,\n                cellRenderer: TableCellNameComponent,\n                cellRendererParams: { pathRoot: this.basePath },\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.serviceType = 'advanced';\n                    this.openEditForm(data.data.id);\n                },\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: true,\n                filter: true,\n                sortColumn: this.sort.bind(this),\n                sortDir: 'asc',\n                width: 300,\n            },\n            {\n                colId: 'edgeRouterRoles',\n                field: 'edgeRouterRoles',\n                headerName: 'Router Attributes',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: routerRolesHeaderComponentParams,\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.serviceType = '';\n                    this.openEditForm(data.data.id);\n                },\n                resizable: true,\n                cellRenderer: this.rolesRenderer,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: false,\n                filter: false,\n            },\n            {\n                colId: 'identityRoles',\n                field: 'identityRoles',\n                headerName: 'Identity Attributes',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: identityRolesHeaderComponentParams,\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.serviceType = '';\n                    this.openEditForm(data.data.id);\n                },\n                resizable: true,\n                cellRenderer: this.rolesRenderer,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: false,\n                filter: false,\n            },\n            {\n                colId: 'semantic',\n                field: 'semantic',\n                headerName: 'Semantic',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: semanticHeaderComponentParams,\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.serviceType = '';\n                    this.openEditForm(data.data.id);\n                },\n                resizable: true,\n                cellRenderer: (row) => {\n                    return row.data?.semantic === 'AnyOf' ? 'Any Of' : 'All Of';\n                },\n                cellClass: 'nf-cell-vert-align tCol',\n                width: 100,\n            },\n            {\n                colId: 'createdAt',\n                field: 'createdAt',\n                headerName: 'Created At',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: createdAtHeaderComponentParams,\n                valueFormatter: this.createdAtFormatter,\n                resizable: true,\n                sortable: true,\n                sortColumn: this.sort.bind(this),\n                cellClass: 'nf-cell-vert-align tCol',\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.serviceType = '';\n                    this.openEditForm(data.data.id);\n                },\n                hide: true\n            },\n            this.ID_COLUMN_DEF\n        ];\n    }\n\n    getData(filters?: FilterObj[], sort?: any, page?: any): Promise<any> {\n        // we can customize filters or sorting here before moving on...\n        this.paging.page = page || this.paging.page;\n        return super.getTableData('edge-router-policies', this.paging, filters, sort)\n            .then((results: any) => {\n                return this.processData(results);\n            });\n    }\n\n    private processData(results: any) {\n        if (!isEmpty(results?.data)) {\n            //pre-process data before rendering\n            results.data = this.addActionsPerRow(results);\n        }\n        if (!isEmpty(results?.meta?.pagination)) {\n            this.totalCount = results.meta?.pagination.totalCount;\n        }\n        return results;\n    }\n\n    private addActionsPerRow(results: any): any[] {\n        return results.data.map((row) => {\n            row.actionList = ['update', 'delete'];\n            return row;\n        });\n    }\n\n    public getEdgeRouterRoleAttributes() {\n        return this.zitiService.get('edge-router-role-attributes', {}, []).then((result) => {\n            this.routerRoleAttributes = result.data;\n            return result;\n        });\n    }\n\n    public getIdentityNamedAttributes() {\n        return this.zitiService.get('identities', {}, []).then((result) => {\n            const namedAttributes = result.data.map((identity) => {\n                this.identityNamedAttributesMap[identity.name] = identity.id;\n                return identity.name;\n            });\n            this.identityNamedAttributes = namedAttributes;\n            return namedAttributes;\n        });\n    }\n\n    public getServiceNamedAttributes() {\n        return this.zitiService.get('edge-routers', {}, []).then((result) => {\n            const namedAttributes = result.data.map((router) => {\n                this.routerNamedAttributesMap[router.name] = router.id;\n                return router.name;\n            });\n            this.routerNamedAttributes = namedAttributes;\n            return namedAttributes;\n        });\n    }\n\n    public getIdentityRoleAttributes() {\n        return this.zitiService.get('identity-role-attributes', {}, []).then((result) => {\n            this.identityRoleAttributes = result.data;\n            return result;\n        });\n    }\n\n    public getPostureNamedAttributes() {\n        return this.zitiService.get('posture-checks', {}, []).then((result) => {\n            const namedAttributes = result.data.map((postureCheck) => {\n                this.postureNamedAttributesMap[postureCheck.name] = postureCheck.id;\n                return postureCheck.name;\n            });\n            this.postureNamedAttributes = namedAttributes;\n            return namedAttributes;\n        });\n    }\n\n    public openUpdate(item?: any) {\n        this.modalType = 'edge-router-policies';\n        if (item) {\n            this.selectedEdgeRouterPolicy = item;\n            this.selectedEdgeRouterPolicy.badges = [];\n            unset(this.selectedEdgeRouterPolicy, '_links');\n        } else {\n            this.selectedEdgeRouterPolicy = new EdgeRouterPolicy();\n        }\n        this.sideModalOpen = true;\n    }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, Inject, OnDestroy, OnInit} from '@angular/core';\nimport {ListPageComponent} from \"../../shared/list-page-component.class\";\nimport {DataTableFilterService} from \"../../features/data-table/data-table-filter.service\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {TabNameService} from \"../../services/tab-name.service\";\nimport {ConsoleEventsService} from \"../../services/console-events.service\";\nimport {EdgeRouterPoliciesPageService} from \"./edge-router-policies-page.service\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../features/extendable/extensions-noop.service\";\n\n@Component({\n    selector: 'lib-edge-router-policies-page',\n    templateUrl: './edge-router-policies-page.component.html',\n    styleUrls: ['./edge-router-policies-page.component.scss'],\n    standalone: false\n})\nexport class EdgeRouterPoliciesPageComponent extends ListPageComponent implements OnInit, OnDestroy  {\n\n  routerRoleAttributes: any[] = [];\n  identityRoleAttributes: any[] = [];\n  formDataChanged = false;\n  isLoading: boolean;\n  tabs: { url: string; label: string }[];\n  title = 'Edge Router Policies';\n\n  constructor(\n      public override svc: EdgeRouterPoliciesPageService,\n      filterService: DataTableFilterService,\n      dialogForm: MatDialog,\n      private tabNames: TabNameService,\n      consoleEvents: ConsoleEventsService,\n      @Inject(SHAREDZ_EXTENSION) private extService: ExtensionService,\n  ) {\n    super(filterService, svc, consoleEvents, dialogForm, extService);\n    let userLang = navigator.language || 'en-us';\n    userLang = userLang.toLowerCase();\n  }\n\n  override ngOnInit() {\n    super.ngOnInit();\n    this.getRoleAttributes();\n    this.tabs = this.tabNames.getTabs('policies');\n  }\n\n  headerActionClicked(action: string) {\n    switch(action) {\n      case 'add':\n        this.svc.serviceType = '';\n        this.svc.openEditForm();\n        break;\n      case 'edit':\n        this.svc.openEditForm();\n        break;\n      case 'delete':\n        const selectedItems = this.rowData.filter((row) => {\n          return row.selected;\n        });\n        const label = selectedItems.length > 1 ? 'services' : 'edge router';\n        this.openBulkDelete(selectedItems, label);\n        break;\n      default:\n    }\n  }\n\n  tableAction(event: any) {\n    this.trackMenuAction(event?.action, event?.item);\n    switch(event?.action) {\n      case 'toggleAll':\n      case 'toggleItem':\n        this.itemToggled(event.item);\n        this.rowData.forEach((item) => {\n          if (item.isSystem) {\n            item.selected = false;\n          }\n        });\n        break;\n      case 'update':\n        this.svc.serviceType = 'advanced';\n        this.svc.openEditForm(event.item.id);\n        break;\n      case 'create':\n        this.svc.openEditForm();\n        break;\n      case 'delete':\n        this.deleteItem(event.item)\n        break;\n      case 'download-all':\n        this.downloadAllItems();\n        break;\n      case 'download-selected':\n        this.svc.downloadItems(this.selectedItems);\n        break;\n      default:\n        break;\n    }\n  }\n\n  trackMenuAction(action: string, item: any) {\n    this.extService?.consoleActionTriggered?.emit({\n      action,\n      page: 'edge-router-policy',\n      item,\n      type:'menu-action'\n    });\n  }\n  getRoleAttributes() {\n    this.svc.getEdgeRouterRoleAttributes().then((result: any) => {\n      this.routerRoleAttributes = result.data;\n    });\n    this.svc.getIdentityRoleAttributes().then((result: any) => {\n      this.identityRoleAttributes = result.data;\n    });\n    this.svc.getServiceNamedAttributes();\n    this.svc.getIdentityNamedAttributes();\n    this.svc.getPostureNamedAttributes();\n  }\n\n  deleteItem(item: any) {\n    this.openBulkDelete([item], 'edge-router-policies');\n  }\n\n  closeModal(event: any) {\n    this.svc.sideModalOpen = false;\n    if(event?.refresh) {\n      this.refreshData();\n    }\n  }\n\n  dataChanged(event) {\n    this.formDataChanged = event;\n  }\n\n  serviceTypeSelected(event) {\n    this.svc.serviceType = event;\n  }\n\n}\n","<div class=\"ziti-page-container edge-router-policies-container\">\n  <lib-list-page-header [title]=\"title\"\n    [tabs]=\"tabs\"\n    [showAdd]=\"!itemsSelected\"\n    [blockCreate]=\"headerBlockCreate\"\n    [blockDelete]=\"headerBlockDelete\"\n  (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n\n  <lib-data-table [tableId]=\"'edge-router-policies'\"\n    [noItemsReadonly]=\"headerBlockCreate\"\n    [accessDenied]=\"headerBlockRead\"\n    [rowData]=\"rowData\"\n    [isLoading]=\"isLoading\"\n    [columnDefinitions]=\"columnDefs\"\n    (actionRequested)=\"tableAction($event)\"\n    [startCount]=\"startCount\"\n    [endCount]=\"endCount\"\n    [totalCount]=\"totalCount\"\n    [emptyMsg]=\"'No Edge Router Policies defined, Click the plus to add a Edge Router Policy.'\"\n    [filterApplied]=\"filterApplied\"\n    [menuItems]=\"svc.menuItems\"\n    (gridReady)=\"gridReady($event)\"\n    >\n  </lib-data-table>\n</div>\n@if (isLoading) {\n  <lib-loading-indicator [isLoading]=\"isLoading\"></lib-loading-indicator>\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Injectable, Inject} from \"@angular/core\";\nimport {cloneDeep, isEmpty} from 'lodash';\nimport moment from 'moment';\nimport {DataTableFilterService, FilterObj} from \"../../features/data-table/data-table-filter.service\";\nimport {ListPageServiceClass} from \"../../shared/list-page-service.class\";\nimport {\n    TableColumnDefaultComponent\n} from \"../../features/data-table/column-headers/table-column-default/table-column-default.component\";\nimport {CallbackResults} from \"../../features/list-page-features/list-page-form/list-page-form.component\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../services/settings.service\";\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../services/ziti-data.service\";\nimport {CsvDownloadService} from \"../../services/csv-download.service\";\nimport {Service} from \"../../models/service\";\nimport {unset} from \"lodash\";\nimport {GrowlerModel} from \"../../features/messaging/growler.model\";\nimport {GrowlerService} from \"../../features/messaging/growler.service\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {SettingsServiceClass} from \"../../services/settings-service.class\";\nimport {ExtensionService} from \"../../features/extendable/extensions-noop.service\";\nimport {Router} from \"@angular/router\";\nimport {TableCellNameComponent} from \"../../features/data-table/cells/table-cell-name/table-cell-name.component\";\nimport {SERVICE_POLICY_EXTENSION_SERVICE} from \"../../features/projectable-forms/service-policy/service-policy-form.service\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class ServicePoliciesPageService extends ListPageServiceClass {\n\n    private paging = this.DEFAULT_PAGING;\n    public modalType = 'service-policy';\n\n    serviceType = '';\n    selectedServicePolicy: any = new Service();\n\n    serviceRoleAttributes = [];\n    serviceNamedAttributes = [];\n    serviceNamedAttributesMap = {};\n    selectedServiceRoleAttributes = [];\n    selectedServiceNamedAttributes = [];\n\n    identityRoleAttributes = [];\n    identityNamedAttributes = [];\n    identityNamedAttributesMap = {};\n    selectedIdentityRoleAttributes = [];\n    selectedIdentityNamedAttributes = [];\n\n    postureRoleAttributes = [];\n    postureNamedAttributes = [];\n    postureNamedAttributesMap = {};\n    selectedPostureRoleAttributes = [];\n    selectedPostureNamedAttributes = [];\n\n    columnFilters: any = {\n        name: '',\n        os: '',\n        createdAt: '',\n    };\n\n    override menuItems = [\n        {name: 'Edit', action: 'update'},\n        {name: 'Delete', action: 'delete'},\n    ]\n\n    override tableHeaderActions = [\n        {name: 'Download All', action: 'download-all'},\n        {name: 'Download Selected', action: 'download-selected'},\n    ]\n\n    resourceType = 'service-policies';\n    constructor(\n        @Inject(SETTINGS_SERVICE) settings: SettingsServiceClass,\n        filterService: DataTableFilterService,\n        @Inject(ZITI_DATA_SERVICE) private zitiService: ZitiDataService,\n        override csvDownloadService: CsvDownloadService,\n        private growlerService: GrowlerService,\n        private dialogForm: MatDialog,\n        @Inject(SERVICE_POLICY_EXTENSION_SERVICE) private extService: ExtensionService,\n        protected override router: Router\n    ) {\n        super(settings, filterService, csvDownloadService, extService, router);\n        this.filterService.filtersChanged.subscribe(filters => {\n            let serviceFilter, identityFilter, postureFilter;\n            filters.forEach((filter) => {\n                switch (filter.columnId) {\n                    case 'serviceRoles':\n                        serviceFilter = true;\n                        break;\n                    case 'identityRoles':\n                        identityFilter = true;\n                        break;\n                    case 'postureRoles':\n                        postureFilter = true;\n                        break;\n                }\n            });\n            if (!serviceFilter) {\n                this.selectedServiceRoleAttributes = [];\n                this.selectedServiceNamedAttributes = [];\n            }\n            if (!identityFilter) {\n                this.selectedIdentityRoleAttributes = [];\n                this.selectedIdentityNamedAttributes = [];\n            }\n        });\n    }\n\n    validate = (formData): Promise<CallbackResults> => {\n        return Promise.resolve({ passed: true});\n    }\n\n    initTableColumns(): any {\n        this.initMenuActions();\n        const createdAtHeaderComponentParams = {\n            filterType: 'DATETIME',\n        };\n        const self = this;\n        const serviceRolesHeaderComponentParams = {\n            filterType: 'ATTRIBUTE',\n            enableSorting: true,\n            getRoleAttributes: () => {\n                return self.serviceRoleAttributes;\n            },\n            getNamedAttributes: () => {\n                return self.serviceNamedAttributes;\n            },\n            getSelectedRoleAttributes: () => {\n                return self.selectedServiceRoleAttributes;\n            },\n            getSelectedNamedAttributes: () => {\n                return self.selectedServiceNamedAttributes;\n            },\n            setSelectedRoleAttributes: (attributes) => {\n                self.selectedServiceRoleAttributes = attributes;\n            },\n            setSelectedNamedAttributes: (attributes) => {\n                self.selectedServiceNamedAttributes = attributes;\n            },\n            getNamedAttributesMap: () => {\n                return self.serviceNamedAttributesMap;\n            }\n        };\n        const identityRolesHeaderComponentParams = {\n            filterType: 'ATTRIBUTE',\n            enableSorting: true,\n            getRoleAttributes: () => {\n                return self.identityRoleAttributes;\n            },\n            getNamedAttributes: () => {\n                return self.identityNamedAttributes;\n            },\n            getSelectedRoleAttributes: () => {\n                return self.selectedIdentityRoleAttributes;\n            },\n            getSelectedNamedAttributes: () => {\n                return self.selectedIdentityNamedAttributes;\n            },\n            setSelectedRoleAttributes: (attributes) => {\n                self.selectedIdentityRoleAttributes = attributes;\n            },\n            setSelectedNamedAttributes: (attributes) => {\n                self.selectedIdentityNamedAttributes = attributes;\n            },\n            getNamedAttributesMap: () => {\n                return self.identityNamedAttributesMap;\n            }\n        };\n\n        const postureRolesHeaderComponentParams = {\n            filterType: 'ATTRIBUTE',\n            enableSorting: true,\n            getRoleAttributes: () => {\n                return self.postureRoleAttributes;\n            },\n            getNamedAttributes: () => {\n                return self.postureNamedAttributes;\n            },\n            getSelectedRoleAttributes: () => {\n                return self.selectedPostureRoleAttributes;\n            },\n            getSelectedNamedAttributes: () => {\n                return self.selectedPostureNamedAttributes;\n            },\n            setSelectedRoleAttributes: (attributes) => {\n                self.selectedPostureRoleAttributes = attributes;\n            },\n            setSelectedNamedAttributes: (attributes) => {\n                self.selectedPostureNamedAttributes = attributes;\n            },\n            getNamedAttributesMap: () => {\n                return self.postureNamedAttributesMap;\n            }\n        };\n\n        const semanticHeaderComponentParams = {\n            filterType: 'SELECT',\n            enableSorting: true,\n            filterOptions: [\n                { label: 'Any Of', value: 'AnyOf', columnId: 'semantic'},\n                { label: 'All Of', value: 'AllOf', columnId: 'semantic' },\n            ],\n            getFilterOptions: () => {\n                return semanticHeaderComponentParams.filterOptions;\n            }\n        };\n\n        const typeHeaderComponentParams = {\n            filterType: 'SELECT',\n            enableSorting: true,\n            filterOptions: [\n                { label: 'Dial', value: 'Dial', columnId: 'type' },\n                { label: 'Bind', value: 'Bind', columnId: 'type' },\n            ],\n            getFilterOptions: () => {\n                return typeHeaderComponentParams.filterOptions;\n            }\n        };\n\n        let tableColumns = [\n            {\n                colId: 'name',\n                field: 'name',\n                headerName: 'Name',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: this.headerComponentParams,\n                cellRenderer: TableCellNameComponent,\n                cellRendererParams: { pathRoot: this.basePath },\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.serviceType = 'advanced';\n                    this.openEditForm(data?.data.id);\n                },\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: true,\n                filter: true,\n                sortColumn: this.sort.bind(this),\n                sortDir: 'asc',\n                width: 300,\n            },\n            {\n                colId: 'serviceRoles',\n                field: 'serviceRoles',\n                headerName: 'Service Attributes',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: serviceRolesHeaderComponentParams,\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.serviceType = '';\n                    this.openEditForm(data.data.id);\n                },\n                resizable: true,\n                cellRenderer: this.rolesRenderer,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: false,\n                filter: false,\n            },\n            {\n                colId: 'identityRoles',\n                field: 'identityRoles',\n                headerName: 'Identity Attributes',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: identityRolesHeaderComponentParams,\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.serviceType = '';\n                    this.openEditForm(data.data.id);\n                },\n                resizable: true,\n                cellRenderer: this.rolesRenderer,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: false,\n                filter: false,\n            },\n            {\n                colId: 'postureCheckRoles',\n                field: 'postureCheckRoles',\n                headerName: 'Posture Check Attributes',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: postureRolesHeaderComponentParams,\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.serviceType = '';\n                    this.openEditForm(data.data.id);\n                },\n                resizable: true,\n                cellRenderer: this.rolesRenderer,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: false,\n                filter: false,\n            },\n            {\n                colId: 'semantic',\n                field: 'semantic',\n                headerName: 'Semantic',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: semanticHeaderComponentParams,\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.serviceType = '';\n                    this.openEditForm(data.data.id);\n                },\n                resizable: true,\n                cellRenderer: (row) => {\n                    return row.data?.semantic === 'AnyOf' ? 'Any Of' : 'All Of';\n                },\n                cellClass: 'nf-cell-vert-align tCol',\n                width: 100,\n            },\n            {\n                colId: 'type',\n                field: 'type',\n                headerName: 'Type',\n                headerComponent: TableColumnDefaultComponent,\n                //headerComponentParams: typeHeaderComponentParams,\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.serviceType = '';\n                    this.openEditForm(data.data.id);\n                },\n                resizable: true,\n                cellRenderer: (row) => {\n                    return row.data?.type;\n                },\n                cellClass: 'nf-cell-vert-align tCol',\n                width: 100,\n            },\n            {\n                colId: 'createdAt',\n                field: 'createdAt',\n                headerName: 'Created At',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: createdAtHeaderComponentParams,\n                valueFormatter: this.createdAtFormatter,\n                resizable: true,\n                sortable: true,\n                sortColumn: this.sort.bind(this),\n                cellClass: 'nf-cell-vert-align tCol',\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.serviceType = '';\n                    this.openEditForm(data.data.id);\n                },\n                hide: true\n            },\n            this.ID_COLUMN_DEF\n        ];\n        if (this.extService?.processTableColumns) {\n            tableColumns = this.extService.processTableColumns(tableColumns);\n        }\n        return tableColumns;\n    }\n\n    getData(filters?: FilterObj[], sort?: any, page?: any): Promise<any> {\n        // we can customize filters or sorting here before moving on...\n        this.paging.page = page || this.paging.page;\n        return super.getTableData('service-policies', this.paging, filters, sort)\n            .then((results: any) => {\n                return this.processData(results);\n            });\n    }\n\n    private async processData(results: any) {\n        if (!isEmpty(results?.data)) {\n            //pre-process data before rendering\n            results.data = this.addActionsPerRow(results);\n        }\n        if (this.extService?.emitEvent) {\n            try {\n                const transformed = await this.extService.emitEvent({\n                    type: 'tableDataUpdated',\n                    data: { resourceType: this.resourceType, results },\n                });\n                if (transformed !== undefined) {\n                    results = transformed;\n                }\n            } catch (_e) {\n                // keep original results on extension failure\n            }\n        }\n        if (!isEmpty(results?.meta?.pagination)) {\n            this.totalCount = results.meta?.pagination.totalCount;\n        }\n        return results;\n    }\n\n    private addActionsPerRow(results: any): any[] {\n        return results.data.map((row) => {\n            row.actionList = ['update', 'delete'];\n            this.addListItemExtensionActions(row);\n            return row;\n        });\n    }\n\n    public getServiceRoleAttributes() {\n        return this.zitiService.get('service-role-attributes', {}, []).then((result) => {\n            this.serviceRoleAttributes = result.data;\n            return result;\n        });\n    }\n\n    public getIdentityNamedAttributes() {\n        return this.zitiService.get('identities', {rawFilter: true, filter: '', sort: 'name', order: 'asc', total: -1, page: 1}, []).then((result) => {\n            const namedAttributes = result.data.map((identity) => {\n                this.identityNamedAttributesMap[identity.name] = identity.id;\n                return identity.name;\n            });\n            this.identityNamedAttributes = namedAttributes;\n            return namedAttributes;\n        });\n    }\n\n    public getServiceNamedAttributes() {\n        return this.zitiService.get('services', {rawFilter: true, filter: '', sort: 'name', order: 'asc', total: -1, page: 1}, []).then((result) => {\n            const namedAttributes = result.data.map((service) => {\n                this.serviceNamedAttributesMap[service.name] = service.id;\n                return service.name;\n            });\n            this.serviceNamedAttributes = namedAttributes;\n            return namedAttributes;\n        });\n    }\n\n    public getIdentityRoleAttributes() {\n        return this.zitiService.get('identity-role-attributes', {}, []).then((result) => {\n            this.identityRoleAttributes = result.data;\n            return result;\n        });\n    }\n\n    public getPostureNamedAttributes() {\n        return this.zitiService.get('posture-checks', {}, []).then((result) => {\n            const namedAttributes = result.data.map((postureCheck) => {\n                this.postureNamedAttributesMap[postureCheck.name] = postureCheck.id;\n                return postureCheck.name;\n            });\n            this.postureNamedAttributes = namedAttributes;\n            return namedAttributes;\n        });\n    }\n\n    public openUpdate(item?: any) {\n        this.modalType = 'service-policies';\n        if (item) {\n            this.selectedServicePolicy = item;\n            this.selectedServicePolicy.badges = [];\n            unset(this.selectedServicePolicy, '_links');\n        } else {\n            this.selectedServicePolicy = new Service();\n        }\n        this.sideModalOpen = true;\n    }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, Inject, OnDestroy, OnInit} from '@angular/core';\nimport {ListPageComponent} from \"../../shared/list-page-component.class\";\nimport {DataTableFilterService} from \"../../features/data-table/data-table-filter.service\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {TabNameService} from \"../../services/tab-name.service\";\nimport {ConsoleEventsService} from \"../../services/console-events.service\";\nimport {ServicePoliciesPageService} from \"./service-policies-page.service\";\nimport {ExtensionService} from \"../../features/extendable/extensions-noop.service\";\nimport {SERVICE_POLICY_EXTENSION_SERVICE} from \"../../features/projectable-forms/service-policy/service-policy-form.service\";\n\n@Component({\n    selector: 'lib-service-policies-page',\n    templateUrl: './service-policies-page.component.html',\n    styleUrls: ['./service-policies-page.component.scss'],\n    standalone: false\n})\nexport class ServicePoliciesPageComponent extends ListPageComponent implements OnInit, OnDestroy  {\n\n  serviceType = '';\n  serviceRoleAttributes: any[] = [];\n  identityRoleAttributes: any[] = [];\n  formDataChanged = false;\n  isLoading: boolean;\n  tabs: { url: string; label: string }[];\n  title = 'Service Policies';\n\n  constructor(\n      public override svc: ServicePoliciesPageService,\n      filterService: DataTableFilterService,\n      dialogForm: MatDialog,\n      private tabNames: TabNameService,\n      consoleEvents: ConsoleEventsService,\n      @Inject(SERVICE_POLICY_EXTENSION_SERVICE) private extService: ExtensionService,\n  ) {\n    super(filterService, svc, consoleEvents, dialogForm, extService);\n    let userLang = navigator.language || 'en-us';\n    userLang = userLang.toLowerCase();\n  }\n\n  override ngOnInit() {\n    super.ngOnInit();\n    this.getRoleAttributes();\n    this.tabs = this.tabNames.getTabs('policies');\n  }\n\n  headerActionClicked(action: string) {\n    switch(action) {\n      case 'add':\n        this.svc.serviceType = '';\n        this.svc.openEditForm();\n        break;\n      case 'edit':\n        this.svc.openEditForm();\n        break;\n      case 'delete':\n        const selectedItems = this.rowData.filter((row) => {\n          return row.selected;\n        });\n        const label = selectedItems.length > 1 ? 'services' : 'service';\n        this.openBulkDelete(selectedItems, label);\n        break;\n      default:\n    }\n  }\n\n  tableAction(event: any) {\n    const extensionActionFound = this.handleExtensionActions(event);\n    this.trackMenuAction(event?.action, event?.item);\n    if (extensionActionFound) {\n      return;\n    }\n    switch(event?.action) {\n      case 'toggleAll':\n      case 'toggleItem':\n        this.itemToggled(event.item)\n        break;\n      case 'update':\n        this.svc.serviceType = 'advanced';\n        this.svc.openEditForm(event.item.id);\n        break;\n      case 'create':\n        this.svc.openEditForm();\n        break;\n      case 'delete':\n        this.deleteItem(event.item)\n        break;\n      case 'download-all':\n        this.downloadAllItems();\n        break;\n      case 'download-selected':\n        this.svc.downloadItems(this.selectedItems);\n        break;\n      default:\n        break;\n    }\n  }\n\n  trackMenuAction(action: string, item: any) {\n    this.extService?.consoleActionTriggered?.emit({\n      action,\n      page: 'service-policy',\n      item,\n      type:'menu-action'\n    });\n  }\n  getRoleAttributes() {\n    this.svc.getServiceRoleAttributes().then((result: any) => {\n      this.serviceRoleAttributes = result.data;\n    });\n    this.svc.getIdentityRoleAttributes().then((result: any) => {\n      this.identityRoleAttributes = result.data;\n    });\n    this.svc.getServiceNamedAttributes();\n    this.svc.getIdentityNamedAttributes();\n    this.svc.getPostureNamedAttributes();\n  }\n\n  deleteItem(item: any) {\n    this.openBulkDelete([item], 'service-policies');\n  }\n\n  closeModal(event: any) {\n    this.svc.sideModalOpen = false;\n    if(event?.refresh) {\n      this.refreshData();\n    }\n  }\n\n  dataChanged(event) {\n    this.formDataChanged = event;\n  }\n\n  serviceTypeSelected(event) {\n    this.svc.serviceType = event;\n  }\n\n}\n","<div class=\"ziti-page-container ziti-service-policies-container\">\n  <lib-list-page-header [title]=\"title\"\n    [tabs]=\"tabs\"\n    [showAdd]=\"!itemsSelected\"\n    [blockCreate]=\"headerBlockCreate\"\n    [blockDelete]=\"headerBlockDelete\"\n  (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n\n  <lib-data-table [tableId]=\"'service-policies'\"\n    [noItemsReadonly]=\"headerBlockCreate\"\n    [accessDenied]=\"headerBlockRead\"\n    [rowData]=\"rowData\"\n    [isLoading]=\"isLoading\"\n    [columnDefinitions]=\"columnDefs\"\n    (actionRequested)=\"tableAction($event)\"\n    [startCount]=\"startCount\"\n    [endCount]=\"endCount\"\n    [totalCount]=\"totalCount\"\n    [emptyMsg]=\"'No Service Policies defined, Click the plus to add a Service Policy.'\"\n    [filterApplied]=\"filterApplied\"\n    [menuItems]=\"svc.menuItems\"\n    (gridReady)=\"gridReady($event)\"\n    >\n  </lib-data-table>\n</div>\n@if (isLoading) {\n  <lib-loading-indicator [isLoading]=\"isLoading\"></lib-loading-indicator>\n}\n","import {\n  Component,\n  EventEmitter,\n  Input,\n  OnInit,\n  OnDestroy,\n  Output,\n  OnChanges,\n  SimpleChanges,\n  AfterViewInit,\n  Inject\n} from '@angular/core';\nimport {Subscription} from 'rxjs';\nimport {ProjectableForm} from \"../projectable-form.class\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../../services/settings.service\";\n\nimport {isEmpty, cloneDeep, invert, debounce} from 'lodash';\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../services/ziti-data.service\";\nimport {GrowlerService} from \"../../messaging/growler.service\";\nimport {ServicePolicyFormService, SERVICE_POLICY_EXTENSION_SERVICE} from './service-policy-form.service';\nimport {MatDialogRef, MatDialog} from \"@angular/material/dialog\";\nimport {ExtensionService} from \"../../extendable/extensions-noop.service\";\nimport {ServicePolicy} from \"../../../models/service-policy\";\nimport {GrowlerModel} from \"../../messaging/growler.model\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {Location} from \"@angular/common\";\n\n@Component({\n    selector: 'lib-service-policy-form',\n    templateUrl: './service-policy-form.component.html',\n    styleUrls: ['./service-policy-form.component.scss'],\n    providers: [\n        {\n            provide: MatDialogRef,\n            useValue: {}\n        }\n    ],\n    standalone: false\n})\nexport class ServicePolicyFormComponent extends ProjectableForm implements OnInit, OnChanges, OnDestroy, AfterViewInit {\n  @Output() close: EventEmitter<any> = new EventEmitter<any>();\n\n  selectedServiceRoleAttributes = [];\n  selectedServiceNamedAttributes = [];\n  selectedIdentityRoleAttributes = [];\n  selectedIdentityNamedAttributes = [];\n  selectedPostureRoleAttributes = [];\n  selectedPostureNamedAttributes = [];\n\n  formView = 'simple';\n  isEditing = false;\n  servicesLoading = false;\n  identitiesLoading = false;\n  postureChecksLoading = false;\n\n  settings: any = {};\n\n  override entityType = 'service-policies';\n  override entityClass = ServicePolicy;\n\n  constructor(\n      @Inject(SETTINGS_SERVICE) protected override settingsService: SettingsService,\n      public svc: ServicePolicyFormService,\n      @Inject(ZITI_DATA_SERVICE) override zitiService: ZitiDataService,\n      growlerService: GrowlerService,\n      @Inject(SERVICE_POLICY_EXTENSION_SERVICE) extService: ExtensionService,\n      protected override router: Router,\n      protected override route: ActivatedRoute,\n      location: Location,\n      dialogForm: MatDialog\n  ) {\n    super(growlerService, extService, zitiService, router, route, location, settingsService, dialogForm);\n  }\n\n  override ngOnInit(): void {\n    super.ngOnInit();\n    this.subscription.add(\n        this.settingsService.settingsChange.subscribe((results:any) => {\n          this.settings = results;\n        })\n    );\n  }\n\n  getServiceNamedAttributesDebounced = debounce((filter: string) => this.svc.getServiceNamedAttributes(filter).then(() => this.mergeSelectedIntoAvailable()), 250);\n  getIdentityNamedAttributesDebounced = debounce((filter: string) => this.svc.getIdentityNamedAttributes(filter).then(() => this.mergeSelectedIntoAvailable()), 250);\n  getPostureNamedAttributesDebounced = debounce((filter: string) => this.svc.getPostureNamedAttributes(filter).then(() => this.mergeSelectedIntoAvailable()), 250);\n\n  override entityUpdated() {\n    super.entityUpdated();\n    this.svc.mergeRolesDisplayIntoMaps(this.formData);\n    const promises = [];\n    promises.push(this.svc.getServiceRoleAttributes());\n    promises.push(this.svc.getIdentityRoleAttributes());\n    promises.push(this.svc.getServiceNamedAttributes());\n    promises.push(this.svc.getIdentityNamedAttributes());\n    promises.push(this.svc.getPostureNamedAttributes());\n    Promise.all(promises).then(() => {\n      this.initSelectedAttributes();\n    });\n    if (isEmpty(this.formData.id)) {\n      this.formData = new ServicePolicy();\n    }\n    this.initData = cloneDeep(this.formData);\n    this.extService.updateFormData(this.formData);\n    this.subscription.add(\n        this.extService.formDataChanged.subscribe((data) => {\n          if (data.isEmpty) {\n            return;\n          }\n          this.formData = data;\n        })\n    );\n    this.initData = cloneDeep(this.formData);\n  }\n\n  ngOnDestroy() {\n    this.extService?.closed?.emit({});\n    this.subscription.unsubscribe();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    this.isEditing = !isEmpty(this.formData.id);\n  }\n\n  /**\n   * Keeps already-selected names visible in each picker's available list even though the\n   * underlying fetch only returns a bounded/filtered page.\n   */\n  mergeSelectedIntoAvailable() {\n    const serviceNames = new Set([...(this.svc.serviceNamedAttributes || []), ...this.selectedServiceNamedAttributes.filter((n) => n != null)]);\n    this.svc.serviceNamedAttributes = Array.from(serviceNames).sort((a, b) => String(a).localeCompare(String(b)));\n    const identityNames = new Set([...(this.svc.identityNamedAttributes || []), ...this.selectedIdentityNamedAttributes.filter((n) => n != null)]);\n    this.svc.identityNamedAttributes = Array.from(identityNames).sort((a, b) => String(a).localeCompare(String(b)));\n    const postureNames = new Set([...(this.svc.postureNamedAttributes || []), ...this.selectedPostureNamedAttributes.filter((n) => n != null)]);\n    this.svc.postureNamedAttributes = Array.from(postureNames).sort((a, b) => String(a).localeCompare(String(b)));\n  }\n\n  initSelectedAttributes() {\n    if (isEmpty(this.formData.id)) {\n      this.svc.associatedServices = [];\n      this.svc.associatedServiceNames = [];\n      this.svc.associatedIdentities = [];\n      this.svc.associatedIdentityNames = [];\n      this.svc.associatedPostureChecks = [];\n      this.svc.associatedPostureCheckNames = [];\n      return;\n    }\n    const serviceIdAttributesMap = invert(this.svc.serviceNamedAttributesMap);\n    const identityIdAttributesMap = invert(this.svc.identityNamedAttributesMap);\n    const postureIdAttributesMap = invert(this.svc.postureNamedAttributesMap);\n    this.selectedServiceRoleAttributes = [];\n    this.selectedServiceNamedAttributes = [];\n    this.selectedIdentityRoleAttributes = [];\n    this.selectedIdentityNamedAttributes = [];\n    this.selectedPostureRoleAttributes = [];\n    this.selectedPostureNamedAttributes = [];\n    this.formData.serviceRoles?.forEach(attr => {\n      if (attr.indexOf('@') === 0) {\n        this.selectedServiceNamedAttributes.push(serviceIdAttributesMap[attr.substring(1)]);\n      } else {\n        this.selectedServiceRoleAttributes.push(attr.substring(1));\n      }\n    });\n    this.formData.identityRoles?.forEach(attr => {\n      if (attr.indexOf('@') === 0) {\n        this.selectedIdentityNamedAttributes.push(identityIdAttributesMap[attr.substring(1)]);\n      } else {\n        this.selectedIdentityRoleAttributes.push(attr.substring(1));\n      }\n    });\n    this.formData.postureCheckRoles?.forEach(attr => {\n      if (attr.indexOf('@') === 0) {\n        this.selectedPostureNamedAttributes.push(postureIdAttributesMap[attr.substring(1)]);\n      } else {\n        this.selectedPostureRoleAttributes.push(attr.substring(1));\n      }\n    });\n    this.mergeSelectedIntoAvailable();\n    this.updateAssociations();\n  }\n\n  updateAssociations() {\n    this.svc.getAssociatedServicesByAttribute(this.selectedServiceRoleAttributes, this.selectedServiceNamedAttributes, this.formData.semantic);\n    this.svc.getAssociatedIdentitiesByAttribute(this.selectedIdentityRoleAttributes, this.selectedIdentityNamedAttributes, this.formData.semantic);\n    this.svc.getAssociatedPostureChecksByAttribute(this.selectedPostureRoleAttributes, this.selectedPostureNamedAttributes, this.formData.semantic);\n  }\n\n  onServiceAttributesChanged(): void {\n    this.svc.getAssociatedServicesByAttribute(this.selectedServiceRoleAttributes, this.selectedServiceNamedAttributes, this.formData.semantic);\n    this.emitInputChange('service-attributes-changed');\n  }\n\n  onIdentityAttributesChanged(): void {\n    this.svc.getAssociatedIdentitiesByAttribute(this.selectedIdentityRoleAttributes, this.selectedIdentityNamedAttributes, this.formData.semantic);\n    this.emitInputChange('identity-attributes-changed');\n  }\n\n  onPolicyTypeChanged(): void {\n    this.emitInputChange('policy-type-changed');\n  }\n\n  onPolicySemanticChanged(): void {\n    this.updateAssociations();\n    this.emitInputChange('policy-semantic-changed');\n  }\n\n  emitInputChange(type: string): void {\n    this.extService.emitEvent?.({\n      type,\n      data: {\n        entityType: 'service-policy',\n        servicePolicyId: this.formData?.id,\n        identityRoles: this.svc.getSelectedRoles(\n          this.selectedIdentityRoleAttributes,\n          this.selectedIdentityNamedAttributes,\n          this.svc.identityNamedAttributesMap\n        ),\n        serviceRoles: this.svc.getSelectedRoles(\n          this.selectedServiceRoleAttributes,\n          this.selectedServiceNamedAttributes,\n          this.svc.serviceNamedAttributesMap\n        ),\n        semantic: this.formData?.semantic || 'AnyOf',\n        policyType: this.formData?.type || 'Bind',\n      },\n    });\n  }\n\n  multiActionRequested(action) {\n    switch(action.id) {\n      case 'save':\n        this.save();\n        break;\n      case 'delete':\n        this.deleteEntity();\n        break;\n    }\n  }\n\n  headerActionRequested(action) {\n    switch(action.name) {\n      case 'save':\n        this.save();\n        break;\n      case 'close':\n        this.returnToListPage();\n        break;\n      case 'toggle-view':\n        this.formView = action.data;\n        break;\n      case 'delete':\n        this.deleteEntity();\n        break;\n    }\n  }\n\n  async save(event?) {\n    if (!this.canSaveByPermissions()) {\n      return;\n    }\n    this.formData.name = this.formData.name.trim();\n    const isValid = this.validate();\n    const isExtValid = await this.extService.validateData();\n    if(!isValid || !isExtValid) {\n      const growlerData = new GrowlerModel(\n          'error',\n          'Error',\n          `Data Invalid`,\n          `Service Policy data is invalid. Please update the highlighted fields and try again.`,\n      );\n      this.growlerService.show(growlerData);\n      return;\n    }\n\n    this.isLoading = true;\n    this.applySelectedAttributes();\n    this.svc.save(this.formData).then((result) => {\n      if (result?.close) {\n        this.closeModal(true, true);\n      }\n      const data = result?.data?.id ? result.data : result;\n      this._dataChange = false;\n      if (!isEmpty(data.id)) {\n        this.formData = data || this.formData;\n        this.initData = this.formData;\n      } else {\n        this.initData = this.formData;\n      }\n      this.returnToListPage();\n    }).finally(() => {\n      this.isLoading = false;\n    });\n  }\n\n  applySelectedAttributes() {\n    this.formData.serviceRoles = this.svc.getSelectedRoles(this.selectedServiceRoleAttributes, this.selectedServiceNamedAttributes, this.svc.serviceNamedAttributesMap);\n    this.formData.identityRoles = this.svc.getSelectedRoles(this.selectedIdentityRoleAttributes, this.selectedIdentityNamedAttributes, this.svc.identityNamedAttributesMap);\n    this.formData.postureCheckRoles = this.svc.getSelectedRoles(this.selectedPostureRoleAttributes, this.selectedPostureNamedAttributes, this.svc.postureNamedAttributesMap);\n  }\n\n  validate() {\n    this.errors = {};\n    if (isEmpty(this.formData.name)) {\n      this.errors['name'] = true;\n    }\n    return isEmpty(this.errors);\n  }\n\n  apiActionRequested(action) {\n    switch (action.id) {\n      case 'cli':\n        this.copyCLICommand();\n        break;\n      case 'curl':\n        this.copyCURLCommand();\n        break;\n    }\n  }\n\n  copyCLICommand() {\n    const serviceRoles = this.svc.getSelectedRoles(this.selectedServiceRoleAttributes, this.selectedServiceNamedAttributes, this.svc.serviceNamedAttributesMap);\n    const serviceRolesVar = this.getRolesCLIVariable(serviceRoles);\n\n    const identityRoles = this.svc.getSelectedRoles(this.selectedIdentityRoleAttributes, this.selectedIdentityNamedAttributes, this.svc.identityNamedAttributesMap);\n    const identityRolesVar = this.getRolesCLIVariable(identityRoles);\n\n    const pcRoles = this.svc.getSelectedRoles(this.selectedPostureRoleAttributes, this.selectedPostureNamedAttributes, this.svc.postureNamedAttributesMap);\n    const pcRolesVar = this.getRolesCLIVariable(pcRoles);\n\n    const command = `ziti edge ${this.formData.id ? 'update' : 'create'} service-policy ${this.formData.id ? `'${this.formData.id}'` : ''} ${this.formData.id ? '--name' : ''} '${this.formData.name}' ${this.formData.id ? '' : this.formData.type}${this.formData.id ? '' : ` --semantic '${this.formData.semantic}'`} --service-roles '${serviceRolesVar}' --identity-roles '${identityRolesVar}' --posture-check-roles '${pcRolesVar}'`;\n\n    navigator.clipboard.writeText(command);\n    const growlerData = new GrowlerModel(\n        'success',\n        'Success',\n        `Text Copied`,\n        `CLI command copied to clipboard`,\n    );\n    this.growlerService.show(growlerData);\n  }\n\n  copyCURLCommand() {\n    const serviceRoles = this.svc.getSelectedRoles(this.selectedServiceRoleAttributes, this.selectedServiceNamedAttributes, this.svc.serviceNamedAttributesMap);\n    const serviceRolesVar = this.getRolesCURLVariable(serviceRoles);\n\n    const identityRoles = this.svc.getSelectedRoles(this.selectedIdentityRoleAttributes, this.selectedIdentityNamedAttributes, this.svc.identityNamedAttributesMap);\n    const identityRolesVar = this.getRolesCURLVariable(identityRoles);\n\n    const pcRoles = this.svc.getSelectedRoles(this.selectedPostureRoleAttributes, this.selectedPostureNamedAttributes, this.svc.postureNamedAttributesMap);\n    const pcRolesVar = this.getRolesCURLVariable(pcRoles);\n\n    const command = `curl '${this.apiCallURL}' \\\\\n    ${this.formData.id ? '--request PATCH \\\\' : '\\\\'}\n    -H 'accept: application/json' \\\\\n    -H 'content-type: application/json' \\\\\n    -H 'zt-session: ${this.settings.session.id}' \\\\\n    --data-raw '{\"name\":\"${this.formData.name}\",\"serviceRoles\":${serviceRolesVar},\"identityRoles\":${identityRolesVar},\"postureCheckRoles\":${pcRolesVar},\"semantic\":\"${this.formData.semantic}\",\"type\":\"${this.formData.type}\"}'`;\n\n    navigator.clipboard.writeText(command);\n    const growlerData = new GrowlerModel(\n        'success',\n        'Success',\n        `Text Copied`,\n        `CURL command copied to clipboard`,\n    );\n    this.growlerService.show(growlerData);\n  }\n\n  get apiCallURL() {\n    return this.settings.selectedEdgeController + '/edge/management/v1/service-policies' + (this.formData.id ? `/${this.formData.id}` : '');\n  }\n\n  get apiData() {\n    const data: any = {\n      name: this.formData?.name || '',\n      appData: this.formData?.appData || '',\n      serviceRoles: this.svc.getSelectedRoles(this.selectedServiceRoleAttributes, this.selectedServiceNamedAttributes, this.svc.serviceNamedAttributesMap),\n      identityRoles: this.svc.getSelectedRoles(this.selectedIdentityRoleAttributes, this.selectedIdentityNamedAttributes, this.svc.identityNamedAttributesMap),\n      postureCheckRoles: this.svc.getSelectedRoles(this.selectedPostureRoleAttributes, this.selectedPostureNamedAttributes, this.svc.postureNamedAttributesMap),\n      semantic: this.formData?.semantic,\n      type: this.formData?.type,\n      tags: this.formData?.tags\n    }\n    return data;\n  }\n\n  _apiData = {};\n  set apiData(data) {\n    this._apiData = data;\n  }\n\n  clear(): void {\n  }\n}\n","<div class=\"projectable-form-wrapper\"\n  (keyup.enter)=\"save($event)\"\n  (keyup.escape)=\"closeModal(false)\"\n  [class.projectable-form-hidden]=\"!dataInit\"\n  >\n  <lib-form-header\n    [data]=\"formData\"\n    [title]=\"formData.id ? 'Edit Service Policy: ' : 'Create New Service Policy'\"\n    [moreActions]=\"moreActions\"\n    [multiActions]=\"multiActions\"\n    (actionRequested)=\"headerActionRequested($event)\"\n    (multiActionRequested)=\"multiActionRequested($event)\"\n    [(formView)]=\"formView\"\n    [class.is-scrolled]=\"isScrolled\"\n    [saveDisabled]=\"formPermissionSaveDisabled\"\n    [saveTooltip]=\"formPermissionSaveTooltip\"\n    [strictReadonlyUi]=\"useStrictReadonlyForm\"\n  ></lib-form-header>\n  <div class=\"service-policy-form-container projectable-form-container\" #formContainer>\n    @if (formView === 'simple') {\n      <div class=\"projectable-form-main-column form-group-row\">\n        <div class=\"form-group-column three-fifths\">\n          <lib-form-field-container [title]=\"'Service Policy Name'\" [label]=\"useStrictReadonlyForm ? '' : 'REQUIRED'\">\n              <input\n                class=\"form-field-input\"\n                placeholder=\"Name this service policy\"\n                [ngClass]=\"{error: errors['name']}\"\n                [(ngModel)]=\"formData.name\"\n                autofocus\n                #nameFieldInput\n                [disabled]=\"useStrictReadonlyForm\"\n                />\n          </lib-form-field-container>\n          <lib-form-field-container\n            [title]=\"'Select Service Attributes'\"\n            [label]=\"'OPTIONAL'\"\n            [contentStyle]=\"'z-index: 100003'\"\n            [helpText]=\"'Choose which services to associate to this policy by picking from the list of available attributes'\"\n            >\n            <lib-tag-selector\n              [disableField]=\"useStrictReadonlyForm\"\n              [disableCreate]=\"useStrictReadonlyForm\"\n              [(selectedRoleAttributes)]=\"selectedServiceRoleAttributes\"\n              [(selectedNamedAttributes)]=\"selectedServiceNamedAttributes\"\n              [availableRoleAttributes]=\"svc.serviceRoleAttributes\"\n              [availableNamedAttributes]=\"svc.serviceNamedAttributes\"\n              (selectedNamedAttributesChange)=\"onServiceAttributesChanged()\"\n              (selectedRoleAttributesChange)=\"onServiceAttributesChanged()\"\n              (filterChange)=\"getServiceNamedAttributesDebounced($event)\"\n              [namedAttributesServerFiltered]=\"true\"\n              [placeholder]=\"'Select service attributes'\"\n            ></lib-tag-selector>\n          </lib-form-field-container>\n          <lib-form-field-container\n            [title]=\"'Select Identity Attributes'\"\n            [label]=\"'OPTIONAL'\"\n            [contentStyle]=\"'z-index: 100002'\"\n            [helpText]=\"'Choose which identities to associate to this policy by picking from the list of available attributes'\"\n            >\n            <lib-tag-selector\n              [disableField]=\"useStrictReadonlyForm\"\n              [disableCreate]=\"useStrictReadonlyForm\"\n              [(selectedRoleAttributes)]=\"selectedIdentityRoleAttributes\"\n              [(selectedNamedAttributes)]=\"selectedIdentityNamedAttributes\"\n              [availableRoleAttributes]=\"svc.identityRoleAttributes\"\n              [availableNamedAttributes]=\"svc.identityNamedAttributes\"\n              (selectedNamedAttributesChange)=\"onIdentityAttributesChanged()\"\n              (selectedRoleAttributesChange)=\"onIdentityAttributesChanged()\"\n              (filterChange)=\"getIdentityNamedAttributesDebounced($event)\"\n              [namedAttributesServerFiltered]=\"true\"\n              [placeholder]=\"'Select identity attributes'\"\n            ></lib-tag-selector>\n          </lib-form-field-container>\n          <lib-form-field-container\n            [title]=\"'Select Posture Check Attributes'\"\n            [label]=\"'OPTIONAL'\"\n            [contentStyle]=\"'z-index: 100001'\"\n            [helpText]=\"'Choose which posture checks to associate to this policy by picking from the list of available attributes'\"\n            >\n            <lib-tag-selector\n              [disableField]=\"useStrictReadonlyForm\"\n              [disableCreate]=\"useStrictReadonlyForm\"\n              [(selectedRoleAttributes)]=\"selectedPostureRoleAttributes\"\n              [(selectedNamedAttributes)]=\"selectedPostureNamedAttributes\"\n              [(selectedRoleAttributes)]=\"svc.postureRoleAttributes\"\n              [availableNamedAttributes]=\"svc.postureNamedAttributes\"\n              (selectedNamedAttributesChange)=\"svc.getAssociatedPostureChecksByAttribute(selectedPostureRoleAttributes, selectedPostureNamedAttributes, formData.semantic)\"\n              (selectedRoleAttributesChange)=\"svc.getAssociatedPostureChecksByAttribute(selectedPostureRoleAttributes, selectedPostureNamedAttributes, formData.semantic)\"\n              (filterChange)=\"getPostureNamedAttributesDebounced($event)\"\n              [namedAttributesServerFiltered]=\"true\"\n              [placeholder]=\"'Select posture check attributes'\"\n            ></lib-tag-selector>\n          </lib-form-field-container>\n          <lib-form-field-container\n            [title]=\"'Type'\"\n            [title2]=\"'Semantic'\"\n            [layout]=\"'row'\"\n            >\n            <select\n              [(ngModel)]=\"formData.type\"\n              (change)=\"onPolicyTypeChanged()\"\n              id=\"PolicyType\"\n              class=\"form-field-dropdown\"\n              [disabled]=\"useStrictReadonlyForm\"\n              >\n              <option value=\"Bind\">Bind</option>\n              <option value=\"Dial\">Dial</option>\n            </select>\n            <select\n              [(ngModel)]=\"formData.semantic\"\n              (change)=\"onPolicySemanticChanged()\"\n              id=\"PolicySemantic\"\n              class=\"form-field-dropdown\"\n              [disabled]=\"useStrictReadonlyForm\"\n              >\n              <option value=\"AnyOf\">AnyOf</option>\n              <option value=\"AllOf\">AllOf</option>\n            </select>\n          </lib-form-field-container>\n          <ng-content select=\"[slot=column-1-slot-1]\"></ng-content>\n          <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n          <div [hidden]=\"!showMore\" class=\"form-group-column\">\n            @if (!hideTags) {\n              <lib-form-field-container\n                [title]=\"'Custom Tags'\"\n                [label]=\"'OPTIONAL'\"\n                class=\"form-field-advanced\"\n                >\n                <lib-custom-tags [(tags)]=\"formData.tags\" [readOnly]=\"useStrictReadonlyForm\"></lib-custom-tags>\n              </lib-form-field-container>\n            }\n          </div>\n        </div>\n        <div class=\"form-group-column two-fifths\">\n          <ng-content select=\"[slot=column-2-slot-1]\"></ng-content>\n          <lib-form-field-container\n            [title]=\"'Associated Services'\"\n            [count]=\"svc.associatedServiceNames.length\"\n            [class]=\"'hide-overflow'\"\n            [helpText]=\"'Preview list of all services that this Service Policy is associated with.'\"\n            >\n            <lib-preview-list\n              [clickable]=\"false\"\n              [isLoading]=\"servicesLoading\"\n              [allNames]=\"svc.associatedServiceNames\"\n            ></lib-preview-list>\n          </lib-form-field-container>\n          <lib-form-field-container\n            [title]=\"'Associated Identities'\"\n            [count]=\"svc.associatedIdentityNames.length\"\n            [helpText]=\"'Preview list of all Identities that this Service Policy is associated with.'\"\n            >\n            <lib-preview-list\n              [clickable]=\"false\"\n              [isLoading]=\"identitiesLoading\"\n              [allNames]=\"svc.associatedIdentityNames\"\n            ></lib-preview-list>\n          </lib-form-field-container>\n          <lib-form-field-container\n            [title]=\"'Associated Posture Checks'\"\n            [count]=\"svc.associatedPostureCheckNames.length\"\n            [helpText]=\"'Preview list of all Posture Checks that this Service Policy is associated with.'\"\n            >\n            <lib-preview-list\n              [clickable]=\"false\"\n              [isLoading]=\"postureChecksLoading\"\n              [allNames]=\"svc.associatedPostureCheckNames\"\n            ></lib-preview-list>\n          </lib-form-field-container>\n          @if (showApiCalls) {\n            <lib-form-field-container\n              [title]=\"'API Calls'\"\n              [headerActions]=\"apiOptions\"\n              (actionRequested)=\"apiActionRequested($event)\"\n              >\n              <div class=\"form-row\">\n                <input class=\"form-field-input\" [value]=\"apiCallURL\"/>\n                <div class=\"icon-copy copy-text\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n              </div>\n              @if (formData) {\n                <lib-json-view [(data)]=\"apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n              }\n            </lib-form-field-container>\n          }\n        </div>\n      </div>\n    }\n    @if (formView === 'raw') {\n      <div class=\"form-group-column\">\n        @if (formData) {\n          <lib-json-view [(data)]=\"formData\" [readOnly]=\"useStrictReadonlyForm\"></lib-json-view>\n        }\n      </div>\n    }\n  </div>\n</div>\n@if (isLoading || !dataInit) {\n  <lib-loading-indicator [isLoading]=\"isLoading || !dataInit\"></lib-loading-indicator>\n}\n","import {Injectable, Inject, InjectionToken} from \"@angular/core\";\nimport {isEmpty, unset, keys, sortBy} from 'lodash';\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../services/ziti-data.service\";\nimport {GrowlerService} from \"../../messaging/growler.service\";\nimport {GrowlerModel} from \"../../messaging/growler.model\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../../services/settings.service\";\nimport {ExtensionService} from \"../../extendable/extensions-noop.service\";\n\nimport {sortedUniq} from 'lodash';\n\nimport {EdgeRouterPolicy} from \"../../../models/edge-router-policy\";\n\nexport const EDGE_ROUTER_POLICY_EXTENSION_SERVICE = new InjectionToken<any>('EDGE_ROUTER_POLICY_EXTENSION_SERVICE');\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class EdgeRouterPolicyFormService {\n\n    associatedIdentities: any = [];\n    associatedIdentityNames: any = [];\n    associatedEdgeRouters: any = [];\n    associatedEdgeRouterNames: any = [];\n\n    edgeRouterNamedAttributesMap: any = {};\n    identityNamedAttributesMap: any = {};\n\n    identityNamedAttributes: any = [];\n    edgeRouterNamedAttributes: any = [];\n\n    edgeRouterRoleAttributes: any = [];\n    identityRoleAttributes: any = [];\n\n    constructor(\n        @Inject(SETTINGS_SERVICE) public settingsService: SettingsService,\n        @Inject(ZITI_DATA_SERVICE) private zitiService: ZitiDataService,\n        private growlerService: GrowlerService,\n        @Inject(EDGE_ROUTER_POLICY_EXTENSION_SERVICE)private extService: ExtensionService\n    ) {}\n\n    save(formData): Promise<any> {\n        const isUpdate = !isEmpty(formData.id);\n        const data: any = this.getEdgeRouterPolicyDataModel(formData, isUpdate);\n        const svc = isUpdate ? this.zitiService.patch.bind(this.zitiService) : this.zitiService.post.bind(this.zitiService);\n        return svc('edge-router-policies', data, formData.id).then(async (result: any) => {\n            const id = result?.data?.id || formData.id;\n            let router = await this.zitiService.getSubdata('edge-router-policies', id, '').then((routerData) => {\n                return routerData.data;\n            });\n            return this.extService.formDataSaved(router).then((formSavedResult: any) => {\n                const returnVal = {\n                    data: router,\n                    close: this.extService.closeAfterSave\n                };\n                const growlerData = new GrowlerModel(\n                    'success',\n                    'Success',\n                    `Edge Router Policy ${isUpdate ? 'Updated' : 'Created'}`,\n                    `Successfully ${isUpdate ? 'updated' : 'created'} Edge Router Policy: ${formData.name}`,\n                );\n                this.growlerService.show(growlerData);\n                return returnVal;\n            }).catch((result) => {\n                return false;\n            });\n        }).catch((resp) => {\n            const errorMessage = this.zitiService.getErrorMessage(resp);\n            const growlerData = new GrowlerModel(\n                'error',\n                'Error',\n                `Error ${isUpdate ? 'Updating' : 'Creating'} Edge Router Policy`,\n                errorMessage,\n            );\n            this.growlerService.show(growlerData);\n            throw resp;\n        })\n    }\n\n    getAssociatedServicesByRole(id) {\n        this.zitiService.getSubdata('edge-router-policies', id, 'edge-routers',this.zitiService.DEFAULT_PAGING).then((result: any) => {\n            this.associatedEdgeRouters = result.data;\n            this.associatedEdgeRouterNames = this.associatedEdgeRouters.map((svc) => {\n                return svc.name;\n            });\n        });\n    }\n\n    getAssociatedIdentitiesById(id) {\n        this.zitiService.getSubdata('edge-router-policies', id, 'identities',this.zitiService.DEFAULT_PAGING).then((result: any) => {\n            this.associatedIdentities = result.data;\n            this.associatedIdentityNames = this.associatedIdentities.map((ident) => {\n                return ident.name;\n            });\n        });\n    }\n\n    getAssociatedEdgeRoutersByAttribute(roleAttributes, namedAttributes, semantic = 'AnyOf') {\n        this.associatedEdgeRouterNames = [];\n        if (isEmpty(roleAttributes)) {\n            this.associatedEdgeRouterNames = [...namedAttributes];\n            return;\n        }\n        const filters = this.zitiService.getRoleFilter(roleAttributes, semantic);\n        const paging = this.zitiService.DEFAULT_PAGING;\n        paging.noSearch = false;\n        this.zitiService.get('edge-routers', paging, filters).then((result: any) => {\n            this.associatedEdgeRouters = result.data;\n            this.associatedEdgeRouterNames = this.associatedEdgeRouters.map((svc) => {\n                return svc.name;\n            });\n            this.associatedEdgeRouterNames = [...this.associatedEdgeRouterNames, ...namedAttributes];\n            this.associatedEdgeRouterNames = sortBy(this.associatedEdgeRouterNames);\n            this.associatedEdgeRouterNames = sortedUniq(this.associatedEdgeRouterNames);\n            this.associatedEdgeRouterNames = this.associatedEdgeRouterNames.filter(item => item !== undefined);\n        });\n    }\n\n    getAssociatedIdentitiesByAttribute(roleAttributes, namedAttributes, semantic = 'AnyOf') {\n        this.associatedIdentityNames = [];\n        if (isEmpty(roleAttributes)) {\n            this.associatedIdentityNames = [...namedAttributes];\n            return;\n        }\n        const filters = this.zitiService.getRoleFilter(roleAttributes, semantic);\n        const paging = this.zitiService.DEFAULT_PAGING;\n        paging.noSearch = false;\n        this.zitiService.get('identities', paging, filters).then((result: any) => {\n            this.associatedIdentities = result.data;\n            this.associatedIdentityNames = this.associatedIdentities.map((svc) => {\n                return svc.name;\n            });\n            this.associatedIdentityNames = [...this.associatedIdentityNames, ...namedAttributes];\n            this.associatedIdentityNames = sortBy(this.associatedIdentityNames);\n            this.associatedIdentityNames = sortedUniq(this.associatedIdentityNames);\n            this.associatedIdentityNames = this.associatedIdentityNames.filter(item => item !== undefined);\n        });\n    }\n\n    public getEdgeRouterRoleAttributes() {\n        return this.zitiService.get('edge-router-role-attributes', {}, []).then((result) => {\n            this.edgeRouterRoleAttributes = result.data;\n            return result;\n        });\n    }\n\n    private identityNamedAttributesRequestId = 0;\n\n    public getIdentityNamedAttributes(filter?: string) {\n        const requestId = ++this.identityNamedAttributesRequestId;\n        const paging = {searchOn: 'name', filter: filter || '', total: 100, page: 1, sort: 'name', order: 'asc'};\n        const filters = [];\n        if (!isEmpty(filter)) {\n            filters.push({filterName: 'name', columnId: 'name', value: filter || '%', label: '', type: 'TEXTINPUT'});\n        }\n        return this.zitiService.get('identities', paging, filters).then((result) => {\n            // a newer search has since started; discard this now-stale response\n            if (requestId !== this.identityNamedAttributesRequestId) {\n                return this.identityNamedAttributes;\n            }\n            const namedAttributes = result.data.map((identity) => {\n                this.identityNamedAttributesMap[identity.name] = identity.id;\n                return identity.name;\n            });\n            this.identityNamedAttributes = namedAttributes;\n            return namedAttributes;\n        });\n    }\n\n    private edgeRouterNamedAttributesRequestId = 0;\n\n    public getEdgeRouterNamedAttributes(filter?: string) {\n        const requestId = ++this.edgeRouterNamedAttributesRequestId;\n        const paging = {searchOn: 'name', filter: filter || '', total: 100, page: 1, sort: 'name', order: 'asc'};\n        const filters = [];\n        if (!isEmpty(filter)) {\n            filters.push({filterName: 'name', columnId: 'name', value: filter || '%', label: '', type: 'TEXTINPUT'});\n        }\n        return this.zitiService.get('edge-routers', paging, filters).then((result) => {\n            if (requestId !== this.edgeRouterNamedAttributesRequestId) {\n                return this.edgeRouterNamedAttributes;\n            }\n            const namedAttributes = result.data.map((router) => {\n                this.edgeRouterNamedAttributesMap[router.name] = router.id;\n                return router.name;\n            });\n            this.edgeRouterNamedAttributes = namedAttributes;\n            return namedAttributes;\n        });\n    }\n\n    public getIdentityRoleAttributes() {\n        return this.zitiService.get('identity-role-attributes', {}, []).then((result) => {\n            this.identityRoleAttributes = result.data;\n            return result;\n        });\n    }\n\n    /**\n     * The policy response includes edgeRouterRolesDisplay/identityRolesDisplay alongside the\n     * raw #role/@id arrays, resolving every referenced name for free (no extra request) even\n     * when that entity falls outside the paged named-attribute fetch above.\n     */\n    public mergeRolesDisplayIntoMaps(formData: any): void {\n        this.mergeDisplayIntoMap(formData?.edgeRouterRolesDisplay, this.edgeRouterNamedAttributesMap);\n        this.mergeDisplayIntoMap(formData?.identityRolesDisplay, this.identityNamedAttributesMap);\n    }\n\n    private mergeDisplayIntoMap(displays: any, namedAttributesMap: any): void {\n        if (!Array.isArray(displays)) {\n            return;\n        }\n        displays.forEach((entry: any) => {\n            const role = entry?.role;\n            const id = typeof role === 'string' && role.charAt(0) === '@' ? role.slice(1) : undefined;\n            if (!id) {\n                return;\n            }\n            let displayName = entry?.name;\n            if (!displayName || typeof displayName !== 'string') {\n                return;\n            }\n            if (displayName.charAt(0) === '@') {\n                displayName = displayName.slice(1);\n            }\n            if (!namedAttributesMap[displayName]) {\n                namedAttributesMap[displayName] = id;\n            }\n        });\n    }\n\n    getEdgeRouterPolicyDataModel(formData, isUpdate) {\n        const saveModel = new EdgeRouterPolicy();\n        const modelProperties = keys(saveModel);\n        modelProperties.forEach((prop) => {\n            switch(prop) {\n                default:\n                    saveModel[prop] = formData[prop];\n            }\n        });\n        return saveModel;\n    }\n\n    copyToClipboard(val) {\n        navigator.clipboard.writeText(val);\n        const growlerData = new GrowlerModel(\n            'success',\n            'Success',\n            `Text Copied`,\n            `API call URL copied to clipboard`,\n        );\n        this.growlerService.show(growlerData);\n    }\n\n    getSelectedRoles(roleAttributes, namedAttributes, namedAttributeMap) {\n        const prependedRoleAttributes = roleAttributes.map((attr) => {\n            return '#' + attr;\n        })\n        const prependedNamedAttributes = namedAttributes.map((attr) => {\n            return '@' + namedAttributeMap[attr];\n        })\n        return [...prependedRoleAttributes, ...prependedNamedAttributes];\n    }\n}\n","import {\n  Component,\n  EventEmitter,\n  Input,\n  OnInit,\n  OnDestroy,\n  Output,\n  OnChanges,\n  SimpleChanges,\n  AfterViewInit,\n  Inject\n} from '@angular/core';\nimport {Subscription} from 'rxjs';\nimport {ProjectableForm} from \"../projectable-form.class\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../../services/settings.service\";\n\nimport {isEmpty, cloneDeep, invert, debounce} from 'lodash';\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../services/ziti-data.service\";\nimport {GrowlerService} from \"../../messaging/growler.service\";\nimport {EdgeRouterPolicyFormService, EDGE_ROUTER_POLICY_EXTENSION_SERVICE} from './edge-router-policy-form.service';\nimport {MatDialogRef, MatDialog} from \"@angular/material/dialog\";\nimport {ExtensionService} from \"../../extendable/extensions-noop.service\";\nimport {GrowlerModel} from \"../../messaging/growler.model\";\nimport {EdgeRouterPolicy} from \"../../../models/edge-router-policy\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {Location} from \"@angular/common\";\n\n@Component({\n    selector: 'lib-edge-router-policy-form',\n    templateUrl: './edge-router-policy-form.component.html',\n    styleUrls: ['./edge-router-policy-form.component.scss'],\n    providers: [\n        {\n            provide: MatDialogRef,\n            useValue: {}\n        }\n    ],\n    standalone: false\n})\nexport class EdgeRouterPolicyFormComponent extends ProjectableForm implements OnInit, OnChanges, OnDestroy, AfterViewInit {\n\n  @Output() close: EventEmitter<any> = new EventEmitter<any>();\n\n  selectedEdgeRouterRoleAttributes = [];\n  selectedEdgeRouterNamedAttributes = [];\n  selectedIdentityRoleAttributes = [];\n  selectedIdentityNamedAttributes = [];\n\n  formView = 'simple';\n  isEditing = false;\n  edgeRoutersLoading = false;\n  identitiesLoading = false;\n  postureChecksLoading = false;\n\n  settings: any = {};\n\n  override entityType = 'edge-router-policies';\n  override entityClass = EdgeRouterPolicy;\n\n  constructor(\n      @Inject(SETTINGS_SERVICE) protected override settingsService: SettingsService,\n      public svc: EdgeRouterPolicyFormService,\n      @Inject(ZITI_DATA_SERVICE) override zitiService: ZitiDataService,\n      growlerService: GrowlerService,\n      @Inject(EDGE_ROUTER_POLICY_EXTENSION_SERVICE) extService: ExtensionService,\n      protected override router: Router,\n      protected override route: ActivatedRoute,\n      location: Location,\n      dialogForm: MatDialog\n  ) {\n    super(growlerService, extService, zitiService, router, route, location, settingsService, dialogForm);\n  }\n\n  override ngOnInit(): void {\n    super.ngOnInit();\n    this.subscription.add(\n        this.settingsService.settingsChange.subscribe((results:any) => {\n          this.settings = results;\n        })\n    );\n    if (isEmpty(this.formData.id)) {\n      this.formData = new EdgeRouterPolicy();\n    }\n    this.initData = cloneDeep(this.formData);\n    this.initSelectedAttributes();\n    this.extService.updateFormData(this.formData);\n    this.subscription.add(\n        this.extService.formDataChanged.subscribe((data) => {\n          if (data.isEmpty) {\n            return;\n          }\n          this.formData = data;\n        })\n    );\n    this.svc.edgeRouterNamedAttributesMap = this.svc.edgeRouterNamedAttributesMap;\n    this.svc.identityNamedAttributesMap = this.svc.identityNamedAttributesMap;\n    this.initData = cloneDeep(this.formData);\n  }\n\n  override entityUpdated() {\n    super.entityUpdated();\n    this.loadAttributes();\n    if (isEmpty(this.formData.id)) {\n      this.formData = new EdgeRouterPolicy();\n    }\n    this.initData = cloneDeep(this.formData);\n    this.initSelectedAttributes();\n    this.extService.updateFormData(this.formData);\n    this.subscription.add(\n        this.extService.formDataChanged.subscribe((data) => {\n          if (data.isEmpty) {\n            return;\n          }\n          this.formData = data;\n        })\n    );\n    this.svc.edgeRouterNamedAttributesMap = this.svc.edgeRouterNamedAttributesMap;\n    this.svc.identityNamedAttributesMap = this.svc.identityNamedAttributesMap;\n    this.initData = cloneDeep(this.formData);\n  }\n\n  ngOnDestroy() {\n    this.extService?.closed?.emit({});\n    this.subscription.unsubscribe();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    this.isEditing = !isEmpty(this.formData.id);\n  }\n\n  getEdgeRouterNamedAttributesDebounced = debounce((filter: string) => this.svc.getEdgeRouterNamedAttributes(filter).then(() => this.mergeSelectedIntoAvailable()), 250);\n  getIdentityNamedAttributesDebounced = debounce((filter: string) => this.svc.getIdentityNamedAttributes(filter).then(() => this.mergeSelectedIntoAvailable()), 250);\n\n  loadAttributes() {\n    this.svc.mergeRolesDisplayIntoMaps(this.formData);\n    const promises = [];\n    promises.push(this.svc.getEdgeRouterRoleAttributes());\n    promises.push(this.svc.getIdentityRoleAttributes());\n    promises.push(this.svc.getEdgeRouterNamedAttributes());\n    promises.push(this.svc.getIdentityNamedAttributes());\n    Promise.all(promises).then(() => {\n      this.initSelectedAttributes();\n    });\n  }\n\n  /**\n   * Keeps already-selected names visible in the picker's available list even though the\n   * underlying fetch only returns a bounded/filtered page.\n   */\n  mergeSelectedIntoAvailable() {\n    const edgeRouterNames = new Set([...(this.svc.edgeRouterNamedAttributes || []), ...this.selectedEdgeRouterNamedAttributes.filter((n) => n != null)]);\n    this.svc.edgeRouterNamedAttributes = Array.from(edgeRouterNames).sort((a, b) => String(a).localeCompare(String(b)));\n    const identityNames = new Set([...(this.svc.identityNamedAttributes || []), ...this.selectedIdentityNamedAttributes.filter((n) => n != null)]);\n    this.svc.identityNamedAttributes = Array.from(identityNames).sort((a, b) => String(a).localeCompare(String(b)));\n  }\n\n  initSelectedAttributes() {\n    if (isEmpty(this.formData.id)) {\n      this.svc.associatedEdgeRouters = [];\n      this.svc.associatedEdgeRouterNames = [];\n      this.svc.associatedIdentities = [];\n      this.svc.associatedIdentityNames = [];\n      return;\n    }\n    const edgeRouterIdAttributesMap = invert(this.svc.edgeRouterNamedAttributesMap);\n    const identityIdAttributesMap = invert(this.svc.identityNamedAttributesMap);\n    this.selectedEdgeRouterRoleAttributes = [];\n    this.selectedEdgeRouterNamedAttributes = [];\n    this.selectedIdentityRoleAttributes = [];\n    this.selectedIdentityNamedAttributes = [];\n    this.formData.edgeRouterRoles?.forEach(attr => {\n      if (attr.indexOf('@') === 0) {\n        this.selectedEdgeRouterNamedAttributes.push(edgeRouterIdAttributesMap[attr.substring(1)]);\n      } else {\n        this.selectedEdgeRouterRoleAttributes.push(attr.substring(1));\n      }\n    });\n    this.formData.identityRoles?.forEach(attr => {\n      if (attr.indexOf('@') === 0) {\n        this.selectedIdentityNamedAttributes.push(identityIdAttributesMap[attr.substring(1)]);\n      } else {\n        this.selectedIdentityRoleAttributes.push(attr.substring(1));\n      }\n    });\n    this.mergeSelectedIntoAvailable();\n\n    this.updateAssociations();\n  }\n\n  updateAssociations() {\n    this.svc.getAssociatedEdgeRoutersByAttribute(this.selectedEdgeRouterRoleAttributes, this.selectedEdgeRouterNamedAttributes, this.formData?.semantic);\n    this.svc.getAssociatedIdentitiesByAttribute(this.selectedIdentityRoleAttributes, this.selectedIdentityNamedAttributes, this.formData?.semantic);\n  }\n\n  headerActionRequested(action) {\n    switch(action.name) {\n      case 'save':\n        this.save();\n        break;\n      case 'close':\n        this.returnToListPage();\n        break;\n      case 'toggle-view':\n        this.formView = action.data;\n        break;\n      case 'delete':\n        this.deleteEntity();\n        break;\n    }\n  }\n\n  multiActionRequested(action) {\n    switch (action.id) {\n      case 'save':\n        this.save();\n        break;\n      case 'delete':\n        this.deleteEntity();\n        break;\n    }\n  }\n\n  async save(event?) {\n    if (!this.canSaveByPermissions()) {\n      return;\n    }\n    this.formData.name = this.formData.name.trim();\n    const isValid = this.validate();\n    const isExtValid = await this.extService.validateData();\n    if(!isValid || !isExtValid) {\n      const growlerData = new GrowlerModel(\n          'error',\n          'Error',\n          `Data Invalid`,\n          `Edge Router Policy data is invalid. Please update the highlighted fields and try again.`,\n      );\n      this.growlerService.show(growlerData);\n      return;\n    }\n\n    this.isLoading = true;\n    this.applySelectedAttributes();\n    this.svc.save(this.formData).then((result) => {\n      const data = result?.data?.id ? result.data : result;\n      this._dataChange = false;\n      if (!isEmpty(data.id)) {\n        this.formData = data || this.formData;\n        this.initData = this.formData;\n      } else {\n        this.initData = this.formData;\n      }\n      if (result?.close) {\n        this.closeModal(true, true);\n        this.returnToListPage();\n      }\n    }).finally(() => {\n      this.isLoading = false;\n    });\n  }\n\n  applySelectedAttributes() {\n    this.formData.edgeRouterRoles = this.svc.getSelectedRoles(this.selectedEdgeRouterRoleAttributes, this.selectedEdgeRouterNamedAttributes, this.svc.edgeRouterNamedAttributesMap);\n    this.formData.identityRoles = this.svc.getSelectedRoles(this.selectedIdentityRoleAttributes, this.selectedIdentityNamedAttributes, this.svc.identityNamedAttributesMap);\n  }\n\n  validate() {\n    this.errors = {};\n    if (isEmpty(this.formData.name)) {\n      this.errors['name'] = true;\n    }\n    return isEmpty(this.errors);\n  }\n\n  apiActionRequested(action) {\n    switch (action.id) {\n      case 'cli':\n        this.copyCLICommand();\n        break;\n      case 'curl':\n        this.copyCURLCommand();\n        break;\n    }\n  }\n\n  copyCLICommand() {\n    const erRoles = this.svc.getSelectedRoles(this.selectedEdgeRouterRoleAttributes, this.selectedEdgeRouterNamedAttributes, this.svc.edgeRouterNamedAttributesMap);\n    let erRolesVar = this.getRolesCLIVariable(erRoles);\n\n    const identityRoles = this.svc.getSelectedRoles(this.selectedIdentityRoleAttributes, this.selectedIdentityNamedAttributes, this.svc.identityNamedAttributesMap);\n    let identityRolesVar = this.getRolesCLIVariable(identityRoles);\n\n    const command = `ziti edge ${this.formData.id ? 'update' : 'create'} edge-router-policy ${this.formData.id ? `'${this.formData.id}'` : ''} ${this.formData.id ? '--name' : ''} '${this.formData.name}'${this.formData.id ? '' : ` --semantic '${this.formData.semantic}`} --edge-router-roles '${erRolesVar}' --identity-roles '${identityRolesVar}'`;\n\n    navigator.clipboard.writeText(command);\n    const growlerData = new GrowlerModel(\n        'success',\n        'Success',\n        `Text Copied`,\n        `CLI command copied to clipboard`,\n    );\n    this.growlerService.show(growlerData);\n  }\n\n  copyCURLCommand() {\n    const erRoles = this.svc.getSelectedRoles(this.selectedEdgeRouterRoleAttributes, this.selectedEdgeRouterNamedAttributes, this.svc.edgeRouterNamedAttributesMap);\n    let erRolesVar = this.getRolesCURLVariable(erRoles);\n\n    const identityRoles = this.svc.getSelectedRoles(this.selectedIdentityRoleAttributes, this.selectedIdentityNamedAttributes, this.svc.identityNamedAttributesMap);\n    let identityRolesVar = this.getRolesCURLVariable(identityRoles);\n\n    const command = `curl '${this.apiCallURL}' \\\\\n${this.formData.id ? '--request PATCH \\\\' : ''}\n  -H 'accept: application/json' \\\\\n  -H 'content-type: application/json' \\\\\n  -H 'zt-session: ${this.settings.session.id}' \\\\\n  --data-raw '{\"name\":\"${this.formData.name}\",\"edgeRouterRoles\":${erRolesVar},\"identityRoles\":${identityRolesVar},\"semantic\":\"${this.formData.semantic}\"}'`;\n\n    navigator.clipboard.writeText(command);\n    const growlerData = new GrowlerModel(\n        'success',\n        'Success',\n        `Text Copied`,\n        `CURL command copied to clipboard`,\n    );\n    this.growlerService.show(growlerData);\n  }\n\n  get apiCallURL() {\n    return this.settings.selectedEdgeController + '/edge/management/v1/edge-router-policies' + (this.formData.id ? `/${this.formData.id}` : '');\n  }\n\n  get apiData() {\n    const data: any = {\n      name: this.formData?.name || '',\n      appData: this.formData?.appData || '',\n      edgeRouterRoles: this.svc.getSelectedRoles(this.selectedEdgeRouterRoleAttributes, this.selectedEdgeRouterNamedAttributes, this.svc.edgeRouterNamedAttributesMap),\n      identityRoles: this.svc.getSelectedRoles(this.selectedIdentityRoleAttributes, this.selectedIdentityNamedAttributes, this.svc.identityNamedAttributesMap),\n      semantic: this.formData.semantic,\n      type: this.formData.type,\n      tags: this.formData.tags\n    }\n    return data;\n  }\n\n  _apiData = {};\n  set apiData(data) {\n    this._apiData = data;\n  }\n\n  clear(): void {\n  }\n}\n","<div class=\"projectable-form-wrapper\"\n  (keyup.enter)=\"save($event)\"\n  (keyup.escape)=\"closeModal(false)\"\n  [class.projectable-form-hidden]=\"!dataInit\"\n  >\n  <lib-form-header\n    [data]=\"formData\"\n    [title]=\"formData.id ? 'Edit Edge Router Policy: ' : 'Create New Edge Router Policy'\"\n    [moreActions]=\"moreActions\"\n    [multiActions]=\"multiActions\"\n    (actionRequested)=\"headerActionRequested($event)\"\n    (multiActionRequested)=\"multiActionRequested($event)\"\n    [(formView)]=\"formView\"\n    [class.is-scrolled]=\"isScrolled\"\n    [saveDisabled]=\"formPermissionSaveDisabled\"\n    [saveTooltip]=\"formPermissionSaveTooltip\"\n    [strictReadonlyUi]=\"useStrictReadonlyForm\"\n  ></lib-form-header>\n  <div class=\"edge-router-policy-form-container projectable-form-container\" #formContainer>\n    @if (formView === 'simple') {\n      <div class=\"projectable-form-main-column form-group-row\">\n        <div class=\"form-group-column three-fifths\">\n          <lib-form-field-container [title]=\"'Edge Router Policy Name'\" [label]=\"useStrictReadonlyForm ? '' : 'REQUIRED'\">\n              <input\n                class=\"form-field-input\"\n                placeholder=\"Name this edge router policy\"\n                [ngClass]=\"{error: errors['name']}\"\n                [(ngModel)]=\"formData.name\"\n                autofocus\n                #nameFieldInput\n                [disabled]=\"useStrictReadonlyForm\"\n                />\n          </lib-form-field-container>\n          <lib-form-field-container\n            [title]=\"'Select Edge Router Attributes'\"\n            [label]=\"'OPTIONAL'\"\n            [contentStyle]=\"'z-index: 100003'\"\n            [helpText]=\"'Choose which edge router to associate to this policy by picking from the list of available attributes'\"\n            >\n            <lib-tag-selector\n              [disableField]=\"useStrictReadonlyForm\"\n              [disableCreate]=\"useStrictReadonlyForm\"\n              [(selectedRoleAttributes)]=\"selectedEdgeRouterRoleAttributes\"\n              [(selectedNamedAttributes)]=\"selectedEdgeRouterNamedAttributes\"\n              [availableRoleAttributes]=\"svc.edgeRouterRoleAttributes\"\n              [availableNamedAttributes]=\"svc.edgeRouterNamedAttributes\"\n              (selectedNamedAttributesChange)=\"svc.getAssociatedEdgeRoutersByAttribute(selectedEdgeRouterRoleAttributes, selectedEdgeRouterNamedAttributes, formData.semantic)\"\n              (selectedRoleAttributesChange)=\"svc.getAssociatedEdgeRoutersByAttribute(selectedEdgeRouterRoleAttributes, selectedEdgeRouterNamedAttributes, formData.semantic)\"\n              (filterChange)=\"getEdgeRouterNamedAttributesDebounced($event)\"\n              [namedAttributesServerFiltered]=\"true\"\n              [placeholder]=\"'Select edge router attributes'\"\n            ></lib-tag-selector>\n          </lib-form-field-container>\n          <lib-form-field-container\n            [title]=\"'Select Identity Attributes'\"\n            [label]=\"'OPTIONAL'\"\n            [contentStyle]=\"'z-index: 100002'\"\n            [helpText]=\"'Choose which identities to associate to this policy by picking from the list of available attributes'\"\n            >\n            <lib-tag-selector\n              [disableField]=\"useStrictReadonlyForm\"\n              [disableCreate]=\"useStrictReadonlyForm\"\n              [(selectedRoleAttributes)]=\"selectedIdentityRoleAttributes\"\n              [(selectedNamedAttributes)]=\"selectedIdentityNamedAttributes\"\n              [availableRoleAttributes]=\"svc.identityRoleAttributes\"\n              [availableNamedAttributes]=\"svc.identityNamedAttributes\"\n              (selectedNamedAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes, formData.semantic)\"\n              (selectedRoleAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes, formData.semantic)\"\n              (filterChange)=\"getIdentityNamedAttributesDebounced($event)\"\n              [namedAttributesServerFiltered]=\"true\"\n              [placeholder]=\"'Select identity attributes'\"\n            ></lib-tag-selector>\n          </lib-form-field-container>\n          <lib-form-field-container\n            [title]=\"'Semantic'\"\n            [layout]=\"'row'\"\n            >\n            <select\n              [(ngModel)]=\"formData.semantic\"\n              (change)=\"updateAssociations()\"\n              id=\"PolicySemantic\"\n              class=\"form-field-dropdown\"\n              [disabled]=\"useStrictReadonlyForm\"\n              >\n              <option value=\"AnyOf\">AnyOf</option>\n              <option value=\"AllOf\">AllOf</option>\n            </select>\n          </lib-form-field-container>\n          <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n          <div [hidden]=\"!showMore\" class=\"form-group-column\">\n            @if (!hideTags) {\n              <lib-form-field-container\n                [title]=\"'Custom Tags'\"\n                [label]=\"'OPTIONAL'\"\n                class=\"form-field-advanced\"\n                >\n                <lib-custom-tags [(tags)]=\"formData.tags\" [readOnly]=\"useStrictReadonlyForm\"></lib-custom-tags>\n              </lib-form-field-container>\n            }\n          </div>\n        </div>\n        <div class=\"form-group-column two-fifths\">\n          <lib-form-field-container\n            [title]=\"'Associated Edge Routers'\"\n            [count]=\"svc.associatedEdgeRouterNames.length\"\n            [class]=\"'hide-overflow'\"\n            [helpText]=\"'Preview list of all Edge Routers that this Edge Router Policy is associated with.'\"\n            >\n            <lib-preview-list\n              [clickable]=\"false\"\n              [isLoading]=\"edgeRoutersLoading\"\n              [allNames]=\"svc.associatedEdgeRouterNames\"\n            ></lib-preview-list>\n          </lib-form-field-container>\n          <lib-form-field-container\n            [title]=\"'Associated Identities'\"\n            [count]=\"svc.associatedIdentityNames.length\"\n            [helpText]=\"'Preview list of all Identities that this Edge Router Policy is associated with.'\"\n            >\n            <lib-preview-list\n              [clickable]=\"false\"\n              [isLoading]=\"identitiesLoading\"\n              [allNames]=\"svc.associatedIdentityNames\"\n            ></lib-preview-list>\n          </lib-form-field-container>\n          @if (showApiCalls) {\n            <lib-form-field-container\n              [title]=\"'API Calls'\"\n              [headerActions]=\"apiOptions\"\n              (actionRequested)=\"apiActionRequested($event)\"\n              >\n              <div class=\"form-row\">\n                <input class=\"form-field-input\" [value]=\"apiCallURL\"/>\n                <div class=\"icon-copy copy-text\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n              </div>\n              @if (formData) {\n                <lib-json-view [(data)]=\"apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n              }\n            </lib-form-field-container>\n          }\n        </div>\n      </div>\n    }\n    @if (formView === 'raw') {\n      <div class=\"form-group-column\">\n        @if (formData) {\n          <lib-json-view [(data)]=\"formData\" [readOnly]=\"useStrictReadonlyForm\"></lib-json-view>\n        }\n      </div>\n    }\n  </div>\n</div>\n@if (isLoading || !dataInit) {\n  <lib-loading-indicator [isLoading]=\"isLoading || !dataInit\"></lib-loading-indicator>\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Injectable, Inject} from \"@angular/core\";\nimport {cloneDeep, isEmpty} from 'lodash';\nimport moment from 'moment';\nimport {DataTableFilterService, FilterObj} from \"../../features/data-table/data-table-filter.service\";\nimport {ListPageServiceClass} from \"../../shared/list-page-service.class\";\nimport {\n    TableColumnDefaultComponent\n} from \"../../features/data-table/column-headers/table-column-default/table-column-default.component\";\nimport {CallbackResults} from \"../../features/list-page-features/list-page-form/list-page-form.component\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../services/settings.service\";\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../services/ziti-data.service\";\nimport {CsvDownloadService} from \"../../services/csv-download.service\";\nimport {EdgeRouterPolicy} from \"../../models/edge-router-policy\";\nimport {unset} from \"lodash\";\nimport {GrowlerModel} from \"../../features/messaging/growler.model\";\nimport {GrowlerService} from \"../../features/messaging/growler.service\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {SettingsServiceClass} from \"../../services/settings-service.class\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../features/extendable/extensions-noop.service\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {TableCellNameComponent} from \"../../features/data-table/cells/table-cell-name/table-cell-name.component\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class ServiceEdgeRouterPoliciesPageService extends ListPageServiceClass {\n\n    private paging = this.DEFAULT_PAGING;\n    public modalType = 'service-edge-router-policy';\n\n    serviceType = '';\n    selectedEdgeRouterPolicy: any = new EdgeRouterPolicy();\n\n    routerRoleAttributes = [];\n    routerNamedAttributes = [];\n    routerNamedAttributesMap = {};\n    selectedRouterRoleAttributes = [];\n    selectedRouterNamedAttributes = [];\n\n    serviceRoleAttributes = [];\n    serviceNamedAttributes = [];\n    serviceNamedAttributesMap = {};\n    selectedServiceRoleAttributes = [];\n    selectedServiceNamedAttributes = [];\n\n    columnFilters: any = {\n        name: '',\n        os: '',\n        createdAt: '',\n    };\n\n    override menuItems = [\n        {name: 'Edit', action: 'update'},\n        {name: 'Delete', action: 'delete'},\n    ]\n\n    override tableHeaderActions = [\n        {name: 'Download All', action: 'download-all'},\n        {name: 'Download Selected', action: 'download-selected'},\n    ]\n\n    resourceType = 'service-edge-router-policies';\n    constructor(\n        @Inject(SETTINGS_SERVICE) settings: SettingsServiceClass,\n        filterService: DataTableFilterService,\n        @Inject(ZITI_DATA_SERVICE) private zitiService: ZitiDataService,\n        override csvDownloadService: CsvDownloadService,\n        private growlerService: GrowlerService,\n        private dialogForm: MatDialog,\n        @Inject(SHAREDZ_EXTENSION) private extService: ExtensionService,\n        protected override router: Router\n    ) {\n        super(settings, filterService, csvDownloadService, extService, router);\n        this.filterService.filtersChanged.subscribe(filters => {\n            let routerFilter, serviceFilter, postureFilter;\n            filters.forEach((filter) => {\n                switch (filter.columnId) {\n                    case 'edgeRouterRoles':\n                        routerFilter = true;\n                        break;\n                    case 'serviceRoles':\n                        serviceFilter = true;\n                        break;\n                    case 'postureRoles':\n                        postureFilter = true;\n                        break;\n                }\n            });\n            if (!routerFilter) {\n                this.selectedRouterRoleAttributes = [];\n                this.selectedRouterNamedAttributes = [];\n            }\n            if (!serviceFilter) {\n                this.selectedServiceRoleAttributes = [];\n                this.selectedServiceNamedAttributes = [];\n            }\n        });\n    }\n\n    validate = (formData): Promise<CallbackResults> => {\n        return Promise.resolve({ passed: true});\n    }\n\n    initTableColumns(): any {\n        const createdAtHeaderComponentParams = {\n            filterType: 'DATETIME',\n        };\n        const self = this;\n        const routerRolesHeaderComponentParams = {\n            filterType: 'ATTRIBUTE',\n            enableSorting: true,\n            getRoleAttributes: () => {\n                return self.routerRoleAttributes;\n            },\n            getNamedAttributes: () => {\n                return self.routerNamedAttributes;\n            },\n            getSelectedRoleAttributes: () => {\n                return self.selectedRouterRoleAttributes;\n            },\n            getSelectedNamedAttributes: () => {\n                return self.selectedRouterNamedAttributes;\n            },\n            setSelectedRoleAttributes: (attributes) => {\n                self.selectedRouterRoleAttributes = attributes;\n            },\n            setSelectedNamedAttributes: (attributes) => {\n                self.selectedRouterNamedAttributes = attributes;\n            },\n            getNamedAttributesMap: () => {\n                return self.routerNamedAttributesMap;\n            }\n        };\n        const serviceRolesHeaderComponentParams = {\n            filterType: 'ATTRIBUTE',\n            enableSorting: true,\n            getRoleAttributes: () => {\n                return self.serviceRoleAttributes;\n            },\n            getNamedAttributes: () => {\n                return self.serviceNamedAttributes;\n            },\n            getSelectedRoleAttributes: () => {\n                return self.selectedServiceRoleAttributes;\n            },\n            getSelectedNamedAttributes: () => {\n                return self.selectedServiceNamedAttributes;\n            },\n            setSelectedRoleAttributes: (attributes) => {\n                self.selectedServiceRoleAttributes = attributes;\n            },\n            setSelectedNamedAttributes: (attributes) => {\n                self.selectedServiceNamedAttributes = attributes;\n            },\n            getNamedAttributesMap: () => {\n                return self.serviceNamedAttributesMap;\n            }\n        };\n\n        const semanticHeaderComponentParams = {\n            filterType: 'SELECT',\n            enableSorting: true,\n            filterOptions: [\n                { label: 'Any Of', value: 'AnyOf', columnId: 'semantic'},\n                { label: 'All Of', value: 'AllOf', columnId: 'semantic' },\n            ],\n            getFilterOptions: () => {\n                return semanticHeaderComponentParams.filterOptions;\n            }\n        };\n\n        const typeHeaderComponentParams = {\n            filterType: 'SELECT',\n            enableSorting: true,\n            filterOptions: [\n                { label: 'Dial', value: 'Dial', columnId: 'type' },\n                { label: 'Bind', value: 'Bind', columnId: 'type' },\n            ],\n            getFilterOptions: () => {\n                return typeHeaderComponentParams.filterOptions;\n            }\n        };\n\n        return [\n            {\n                colId: 'name',\n                field: 'name',\n                headerName: 'Name',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: this.headerComponentParams,\n                cellRenderer: TableCellNameComponent,\n                cellRendererParams: { pathRoot: this.basePath },\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.serviceType = 'advanced';\n                    this.openEditForm(data.data.id);\n                },\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: true,\n                filter: true,\n                sortColumn: this.sort.bind(this),\n                sortDir: 'asc',\n                width: 300,\n            },\n            {\n                colId: 'serviceRoles',\n                field: 'serviceRoles',\n                headerName: 'Service Attributes',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: serviceRolesHeaderComponentParams,\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.serviceType = '';\n                    this.openEditForm(data.data.id);\n                },\n                resizable: true,\n                cellRenderer: this.rolesRenderer,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: false,\n                filter: false,\n            },\n            {\n                colId: 'edgeRouterRoles',\n                field: 'edgeRouterRoles',\n                headerName: 'Router Attributes',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: routerRolesHeaderComponentParams,\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.serviceType = '';\n                    this.openEditForm(data.data.id);\n                },\n                resizable: true,\n                cellRenderer: this.rolesRenderer,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: false,\n                filter: false,\n            },\n            {\n                colId: 'semantic',\n                field: 'semantic',\n                headerName: 'Semantic',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: semanticHeaderComponentParams,\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.serviceType = '';\n                    this.openEditForm(data.data.id);\n                },\n                resizable: true,\n                cellRenderer: (row) => {\n                    return row.data?.semantic === 'AnyOf' ? 'Any Of' : 'All Of';\n                },\n                cellClass: 'nf-cell-vert-align tCol',\n                width: 100,\n            },\n            {\n                colId: 'createdAt',\n                field: 'createdAt',\n                headerName: 'Created At',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: createdAtHeaderComponentParams,\n                valueFormatter: this.createdAtFormatter,\n                resizable: true,\n                sortable: true,\n                sortColumn: this.sort.bind(this),\n                cellClass: 'nf-cell-vert-align tCol',\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.serviceType = '';\n                    this.openEditForm(data.data.id);\n                },\n                hide: true\n            },\n            this.ID_COLUMN_DEF\n        ];\n    }\n\n    getData(filters?: FilterObj[], sort?: any, page?: any): Promise<any> {\n        // we can customize filters or sorting here before moving on...\n        this.paging.page = page || this.paging.page;\n        return super.getTableData('service-edge-router-policies', this.paging, filters, sort)\n            .then((results: any) => {\n                return this.processData(results);\n            });\n    }\n\n    private processData(results: any) {\n        if (!isEmpty(results?.data)) {\n            //pre-process data before rendering\n            results.data = this.addActionsPerRow(results);\n        }\n        if (!isEmpty(results?.meta?.pagination)) {\n            this.totalCount = results.meta?.pagination.totalCount;\n        }\n        return results;\n    }\n\n    private addActionsPerRow(results: any): any[] {\n        return results.data.map((row) => {\n            row.actionList = ['update', 'delete'];\n            return row;\n        });\n    }\n\n    public getEdgeRouterRoleAttributes() {\n        return this.zitiService.get('edge-router-role-attributes', {}, []).then((result) => {\n            this.routerRoleAttributes = result.data;\n            return result;\n        });\n    }\n\n    public getServiceNamedAttributes() {\n        return this.zitiService.get('services', {}, []).then((result) => {\n            const namedAttributes = result.data.map((service) => {\n                this.serviceNamedAttributesMap[service.name] = service.id;\n                return service.name;\n            });\n            this.serviceNamedAttributes = namedAttributes;\n            return namedAttributes;\n        });\n    }\n\n    public getRouterNamedAttributes() {\n        return this.zitiService.get('edge-routers', {}, []).then((result) => {\n            const namedAttributes = result.data.map((router) => {\n                this.serviceNamedAttributesMap[router.name] = router.id;\n                return router.name;\n            });\n            this.routerNamedAttributes = namedAttributes;\n            return namedAttributes;\n        });\n    }\n\n    public getServiceRoleAttributes() {\n        return this.zitiService.get('service-role-attributes', {}, []).then((result) => {\n            this.serviceRoleAttributes = result.data;\n            return result;\n        });\n    }\n\n\n    public openUpdate(item?: any) {\n        this.modalType = 'service-edge-router-policies';\n        if (item) {\n            this.selectedEdgeRouterPolicy = item;\n            this.selectedEdgeRouterPolicy.badges = [];\n            unset(this.selectedEdgeRouterPolicy, '_links');\n        } else {\n            this.selectedEdgeRouterPolicy = new EdgeRouterPolicy();\n        }\n        this.sideModalOpen = true;\n    }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, Inject, OnDestroy, OnInit} from '@angular/core';\nimport {ListPageComponent} from \"../../shared/list-page-component.class\";\nimport {DataTableFilterService} from \"../../features/data-table/data-table-filter.service\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {TabNameService} from \"../../services/tab-name.service\";\nimport {ConsoleEventsService} from \"../../services/console-events.service\";\nimport {ServiceEdgeRouterPoliciesPageService} from \"./service-edge-router-policies-page.service\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../features/extendable/extensions-noop.service\";\n\n@Component({\n    selector: 'lib-service-edge-router-policies-page',\n    templateUrl: './service-edge-router-policies-page.component.html',\n    styleUrls: ['./service-edge-router-policies-page.component.scss'],\n    standalone: false\n})\nexport class ServiceEdgeRouterPoliciesPageComponent extends ListPageComponent implements OnInit, OnDestroy  {\n\n  routerRoleAttributes: any[] = [];\n  serviceRoleAttributes: any[] = [];\n  formDataChanged = false;\n  isLoading: boolean;\n  tabs: { url: string; label: string }[];\n  title = 'Service Edge Router Policies';\n\n  constructor(\n      public override svc: ServiceEdgeRouterPoliciesPageService,\n      filterService: DataTableFilterService,\n      dialogForm: MatDialog,\n      private tabNames: TabNameService,\n      consoleEvents: ConsoleEventsService,\n      @Inject(SHAREDZ_EXTENSION) private extService: ExtensionService,\n  ) {\n    super(filterService, svc, consoleEvents, dialogForm, extService);\n    let userLang = navigator.language || 'en-us';\n    userLang = userLang.toLowerCase();\n  }\n\n  override ngOnInit() {\n    super.ngOnInit();\n    this.getRoleAttributes();\n    this.tabs = this.tabNames.getTabs('policies');\n  }\n\n  headerActionClicked(action: string) {\n    switch(action) {\n      case 'add':\n        this.svc.serviceType = '';\n        this.svc.openEditForm();\n        break;\n      case 'edit':\n        this.svc.openEditForm();\n        break;\n      case 'delete':\n        const selectedItems = this.rowData.filter((row) => {\n          return row.selected;\n        });\n        const label = selectedItems.length > 1 ? 'service edge router policies' : 'service edge router policy';\n        this.openBulkDelete(selectedItems, label);\n        break;\n      default:\n    }\n  }\n\n  tableAction(event: any) {\n    this.trackMenuAction(event?.action, event?.item);\n    switch(event?.action) {\n      case 'toggleAll':\n      case 'toggleItem':\n        this.itemToggled(event.item)\n        break;\n      case 'update':\n        this.svc.serviceType = 'advanced';\n        this.svc.openEditForm(event.item.id);\n        break;\n      case 'create':\n        this.svc.openEditForm();\n        break;\n      case 'delete':\n        this.deleteItem(event.item)\n        break;\n      case 'download-all':\n        this.downloadAllItems();\n        break;\n      case 'download-selected':\n        this.svc.downloadItems(this.selectedItems);\n        break;\n      default:\n        break;\n    }\n  }\n\n  trackMenuAction(action: string, item: any) {\n    this.extService?.consoleActionTriggered?.emit({\n      action,\n      page: 'service-edge-router-policy',\n      item,\n      type:'menu-action'\n    });\n  }\n  getRoleAttributes() {\n    this.svc.getEdgeRouterRoleAttributes().then((result: any) => {\n      this.routerRoleAttributes = result.data;\n    });\n    this.svc.getServiceRoleAttributes().then((result: any) => {\n      this.serviceRoleAttributes = result.data;\n    });\n    this.svc.getServiceNamedAttributes();\n    this.svc.getRouterNamedAttributes();\n  }\n\n  deleteItem(item: any) {\n    this.openBulkDelete([item], 'service-edge-router-policies');\n  }\n\n  closeModal(event: any) {\n    this.svc.sideModalOpen = false;\n    if(event?.refresh) {\n      this.refreshData();\n    }\n  }\n\n  dataChanged(event) {\n    this.formDataChanged = event;\n  }\n\n  serviceTypeSelected(event) {\n    this.svc.serviceType = event;\n  }\n\n}\n","<div class=\"ziti-page-container service-edge-router-policies-container\">\n  <lib-list-page-header [title]=\"title\"\n    [tabs]=\"tabs\"\n    [showAdd]=\"!itemsSelected\"\n    [blockCreate]=\"headerBlockCreate\"\n    [blockDelete]=\"headerBlockDelete\"\n  (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n\n  <lib-data-table [tableId]=\"'service-edge-router-policies'\"\n    [noItemsReadonly]=\"headerBlockCreate\"\n    [accessDenied]=\"headerBlockRead\"\n    [rowData]=\"rowData\"\n    [isLoading]=\"isLoading\"\n    [columnDefinitions]=\"columnDefs\"\n    (actionRequested)=\"tableAction($event)\"\n    [startCount]=\"startCount\"\n    [endCount]=\"endCount\"\n    [totalCount]=\"totalCount\"\n    [emptyMsg]=\"'No Service Edge Router Policies defined, Click the plus to add a Service Edge Router Policy.'\"\n    [filterApplied]=\"filterApplied\"\n    [menuItems]=\"svc.menuItems\"\n    (gridReady)=\"gridReady($event)\"\n    >\n  </lib-data-table>\n</div>\n@if (isLoading) {\n  <lib-loading-indicator [isLoading]=\"isLoading\"></lib-loading-indicator>\n}\n","export class ServiceEdgeRouterPolicy {\n    name = '';\n    edgeRouterRoles: any[] = [];\n    serviceRoles: any[] = [];\n    semantic = 'AnyOf';\n    tags: any = {};\n};","import {Injectable, Inject, InjectionToken} from \"@angular/core\";\nimport {isEmpty, unset, keys, sortBy} from 'lodash';\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../services/ziti-data.service\";\nimport {GrowlerService} from \"../../messaging/growler.service\";\nimport {GrowlerModel} from \"../../messaging/growler.model\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../../services/settings.service\";\nimport {ExtensionService} from \"../../extendable/extensions-noop.service\";\n\nimport {sortedUniq} from 'lodash';\n\nimport {ServiceEdgeRouterPolicy} from \"../../../models/service-edge-router-policy\";\n\nexport const SERVICE_EDGE_ROUTER_POLICY_EXTENSION_SERVICE = new InjectionToken<any>('SERVICE_EDGE_ROUTER_POLICY_EXTENSION_SERVICE');\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class ServiceEdgeRouterPolicyFormService {\n\n    associatedServices: any = [];\n    associatedServiceNames: any = [];\n    associatedEdgeRouters: any = [];\n    associatedEdgeRouterNames: any = [];\n\n    edgeRouterNamedAttributesMap: any = {};\n    serviceNamedAttributesMap: any = {};\n\n    serviceNamedAttributes: any = [];\n    edgeRouterNamedAttributes: any = [];\n\n    edgeRouterRoleAttributes: any = [];\n    serviceRoleAttributes: any = [];\n\n    constructor(\n        @Inject(SETTINGS_SERVICE) public settingsService: SettingsService,\n        @Inject(ZITI_DATA_SERVICE) private zitiService: ZitiDataService,\n        private growlerService: GrowlerService,\n        @Inject(SERVICE_EDGE_ROUTER_POLICY_EXTENSION_SERVICE)private extService: ExtensionService\n    ) {}\n\n    save(formData): Promise<any> {\n        const isUpdate = !isEmpty(formData.id);\n        const data: any = this.getEdgeRouterPolicyDataModel(formData, isUpdate);\n        const svc = isUpdate ? this.zitiService.patch.bind(this.zitiService) : this.zitiService.post.bind(this.zitiService);\n        return svc('service-edge-router-policies', data, formData.id).then(async (result: any) => {\n            const id = result?.data?.id || formData.id;\n            let router = await this.zitiService.getSubdata('service-edge-router-policies', id, '').then((routerData) => {\n                return routerData.data;\n            });\n            return this.extService.formDataSaved(router).then((formSavedResult: any) => {\n                const returnVal = {\n                    data: router,\n                    close: this.extService.closeAfterSave\n                };\n                const growlerData = new GrowlerModel(\n                    'success',\n                    'Success',\n                    `Edge Router Policy ${isUpdate ? 'Updated' : 'Created'}`,\n                    `Successfully ${isUpdate ? 'updated' : 'created'} Edge Router Policy: ${formData.name}`,\n                );\n                this.growlerService.show(growlerData);\n                return returnVal;\n            }).catch((result) => {\n                return false;\n            });\n        }).catch((resp) => {\n            const errorMessage = this.zitiService.getErrorMessage(resp);\n            const growlerData = new GrowlerModel(\n                'error',\n                'Error',\n                `Error ${isUpdate ? 'Updating' : 'Creating'} Service Edge Router Policy`,\n                errorMessage,\n            );\n            this.growlerService.show(growlerData);\n            throw resp;\n        })\n    }\n\n    getAssociatedEdgeRoutersByAttribute(roleAttributes, namedAttributes, semantic = 'AnyOf') {\n        this.associatedEdgeRouterNames = [];\n        if (isEmpty(roleAttributes)) {\n            this.associatedEdgeRouterNames = [...namedAttributes];\n            return;\n        }\n        const filters = this.zitiService.getRoleFilter(roleAttributes, semantic);\n        const paging = this.zitiService.DEFAULT_PAGING;\n        paging.noSearch = false;\n        this.zitiService.get('edge-routers', paging, filters).then((result: any) => {\n            this.associatedEdgeRouters = result.data;\n            this.associatedEdgeRouterNames = this.associatedEdgeRouters.map((svc) => {\n                return svc.name;\n            });\n            this.associatedEdgeRouterNames = [...this.associatedEdgeRouterNames, ...namedAttributes];\n            this.associatedEdgeRouterNames = sortBy(this.associatedEdgeRouterNames);\n            this.associatedEdgeRouterNames = sortedUniq(this.associatedEdgeRouterNames);\n            this.associatedEdgeRouterNames = this.associatedEdgeRouterNames.filter(item => item !== undefined);\n        });\n    }\n\n    getAssociatedServicesByAttribute(roleAttributes, namedAttributes, semantic = 'AnyOf') {\n        this.associatedServiceNames = [];\n        if (isEmpty(roleAttributes)) {\n            this.associatedServiceNames = [...namedAttributes];\n            return;\n        }\n        const filters = this.zitiService.getRoleFilter(roleAttributes, semantic);\n        const paging = this.zitiService.DEFAULT_PAGING;\n        paging.noSearch = false;\n        this.zitiService.get('services', paging, filters).then((result: any) => {\n            this.associatedServices = result.data;\n            this.associatedServiceNames = this.associatedServices.map((svc) => {\n                return svc.name;\n            });\n            this.associatedServiceNames = [...this.associatedServiceNames, ...namedAttributes];\n            this.associatedServiceNames = sortBy(this.associatedServiceNames);\n            this.associatedServiceNames = sortedUniq(this.associatedServiceNames);\n            this.associatedServiceNames = this.associatedServiceNames.filter(item => item !== undefined);\n        });\n    }\n\n    public getEdgeRouterRoleAttributes() {\n        return this.zitiService.get('edge-router-role-attributes', {}, []).then((result) => {\n            this.edgeRouterRoleAttributes = result.data;\n            return result;\n        });\n    }\n\n    private serviceNamedAttributesRequestId = 0;\n\n    public getServiceNamedAttributes(filter?: string) {\n        const requestId = ++this.serviceNamedAttributesRequestId;\n        const paging = {searchOn: 'name', filter: filter || '', total: 100, page: 1, sort: 'name', order: 'asc'};\n        const filters = [];\n        if (!isEmpty(filter)) {\n            filters.push({filterName: 'name', columnId: 'name', value: filter || '%', label: '', type: 'TEXTINPUT'});\n        }\n        return this.zitiService.get('services', paging, filters).then((result) => {\n            if (requestId !== this.serviceNamedAttributesRequestId) {\n                return this.serviceNamedAttributes;\n            }\n            const namedAttributes = result.data.map((service) => {\n                this.serviceNamedAttributesMap[service.name] = service.id;\n                return service.name;\n            });\n            this.serviceNamedAttributes = namedAttributes;\n            return namedAttributes;\n        });\n    }\n\n    private edgeRouterNamedAttributesRequestId = 0;\n\n    public getEdgeRouterNamedAttributes(filter?: string) {\n        const requestId = ++this.edgeRouterNamedAttributesRequestId;\n        const paging = {searchOn: 'name', filter: filter || '', total: 100, page: 1, sort: 'name', order: 'asc'};\n        const filters = [];\n        if (!isEmpty(filter)) {\n            filters.push({filterName: 'name', columnId: 'name', value: filter || '%', label: '', type: 'TEXTINPUT'});\n        }\n        return this.zitiService.get('edge-routers', paging, filters).then((result) => {\n            if (requestId !== this.edgeRouterNamedAttributesRequestId) {\n                return this.edgeRouterNamedAttributes;\n            }\n            const namedAttributes = result.data.map((router) => {\n                this.edgeRouterNamedAttributesMap[router.name] = router.id;\n                return router.name;\n            });\n            this.edgeRouterNamedAttributes = namedAttributes;\n            return namedAttributes;\n        });\n    }\n\n    public getServiceRoleAttributes() {\n        return this.zitiService.get('service-role-attributes', {}, []).then((result) => {\n            this.serviceRoleAttributes = result.data;\n            return result;\n        });\n    }\n\n    /**\n     * The policy response includes edgeRouterRolesDisplay/serviceRolesDisplay alongside the\n     * raw #role/@id arrays, resolving every referenced name for free (no extra request) even\n     * when that entity falls outside the paged named-attribute fetch above.\n     */\n    public mergeRolesDisplayIntoMaps(formData: any): void {\n        this.mergeDisplayIntoMap(formData?.edgeRouterRolesDisplay, this.edgeRouterNamedAttributesMap);\n        this.mergeDisplayIntoMap(formData?.serviceRolesDisplay, this.serviceNamedAttributesMap);\n    }\n\n    private mergeDisplayIntoMap(displays: any, namedAttributesMap: any): void {\n        if (!Array.isArray(displays)) {\n            return;\n        }\n        displays.forEach((entry: any) => {\n            const role = entry?.role;\n            const id = typeof role === 'string' && role.charAt(0) === '@' ? role.slice(1) : undefined;\n            if (!id) {\n                return;\n            }\n            let displayName = entry?.name;\n            if (!displayName || typeof displayName !== 'string') {\n                return;\n            }\n            if (displayName.charAt(0) === '@') {\n                displayName = displayName.slice(1);\n            }\n            if (!namedAttributesMap[displayName]) {\n                namedAttributesMap[displayName] = id;\n            }\n        });\n    }\n\n    getEdgeRouterPolicyDataModel(formData, isUpdate) {\n        const saveModel = new ServiceEdgeRouterPolicy();\n        const modelProperties = keys(saveModel);\n        modelProperties.forEach((prop) => {\n            switch(prop) {\n                default:\n                    saveModel[prop] = formData[prop];\n            }\n        });\n        return saveModel;\n    }\n\n    copyToClipboard(val) {\n        navigator.clipboard.writeText(val);\n        const growlerData = new GrowlerModel(\n            'success',\n            'Success',\n            `Text Copied`,\n            `API call URL copied to clipboard`,\n        );\n        this.growlerService.show(growlerData);\n    }\n\n    getSelectedRoles(roleAttributes, namedAttributes, namedAttributeMap) {\n        const prependedRoleAttributes = roleAttributes.map((attr) => {\n            return '#' + attr;\n        })\n        const prependedNamedAttributes = namedAttributes.map((attr) => {\n            return '@' + namedAttributeMap[attr];\n        })\n        return [...prependedRoleAttributes, ...prependedNamedAttributes];\n    }\n}\n","import {\n  Component,\n  EventEmitter,\n  Input,\n  OnInit,\n  OnDestroy,\n  Output,\n  OnChanges,\n  SimpleChanges,\n  AfterViewInit,\n  Inject\n} from '@angular/core';\nimport {Subscription} from 'rxjs';\nimport {ProjectableForm} from \"../projectable-form.class\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../../services/settings.service\";\n\nimport {isEmpty, cloneDeep, invert, debounce} from 'lodash';\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../services/ziti-data.service\";\nimport {GrowlerService} from \"../../messaging/growler.service\";\nimport {ServiceEdgeRouterPolicyFormService, SERVICE_EDGE_ROUTER_POLICY_EXTENSION_SERVICE} from './service-edge-router-policy-form.service';\nimport {MatDialogRef, MatDialog} from \"@angular/material/dialog\";\nimport {ExtensionService} from \"../../extendable/extensions-noop.service\";\nimport {GrowlerModel} from \"../../messaging/growler.model\";\nimport {ServiceEdgeRouterPolicy} from \"../../../models/service-edge-router-policy\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {Location} from \"@angular/common\";\n\n@Component({\n    selector: 'lib-service-edge-router-policy-form',\n    templateUrl: './service-edge-router-policy-form.component.html',\n    styleUrls: ['./service-edge-router-policy-form.component.scss'],\n    providers: [\n        {\n            provide: MatDialogRef,\n            useValue: {}\n        }\n    ],\n    standalone: false\n})\nexport class ServiceEdgeRouterPolicyFormComponent extends ProjectableForm implements OnInit, OnChanges, OnDestroy, AfterViewInit {\n\n  @Output() close: EventEmitter<any> = new EventEmitter<any>();\n\n  selectedEdgeRouterRoleAttributes = [];\n  selectedEdgeRouterNamedAttributes = [];\n  selectedServiceRoleAttributes = [];\n  selectedServiceNamedAttributes = [];\n\n  formView = 'simple';\n  isEditing = false;\n  edgeRoutersLoading = false;\n  servicesLoading = false;\n\n  settings: any = {};\n\n  override entityType = 'service-edge-router-policies';\n  override entityClass = ServiceEdgeRouterPolicy;\n\n  constructor(\n      @Inject(SETTINGS_SERVICE) protected override settingsService: SettingsService,\n      public svc: ServiceEdgeRouterPolicyFormService,\n      @Inject(ZITI_DATA_SERVICE) override zitiService: ZitiDataService,\n      growlerService: GrowlerService,\n      @Inject(SERVICE_EDGE_ROUTER_POLICY_EXTENSION_SERVICE) extService: ExtensionService,\n      protected override router: Router,\n      protected override route: ActivatedRoute,\n      location: Location,\n      dialogForm: MatDialog\n  ) {\n    super(growlerService, extService, zitiService, router, route, location, settingsService, dialogForm);\n  }\n\n  override ngOnInit(): void {\n    super.ngOnInit();\n    this.subscription.add(\n        this.settingsService.settingsChange.subscribe((results:any) => {\n          this.settings = results;\n        })\n    );\n    if (isEmpty(this.formData.id)) {\n      this.formData = new ServiceEdgeRouterPolicy();\n    }\n    this.initData = cloneDeep(this.formData);\n    this.initSelectedAttributes();\n    this.extService.updateFormData(this.formData);\n    this.subscription.add(\n        this.extService.formDataChanged.subscribe((data) => {\n          if (data.isEmpty) {\n            return;\n          }\n          this.formData = data;\n        })\n    );\n    this.svc.edgeRouterNamedAttributesMap = this.svc.edgeRouterNamedAttributesMap;\n    this.svc.serviceNamedAttributesMap = this.svc.serviceNamedAttributesMap;\n    this.initData = cloneDeep(this.formData);\n  }\n\n  override entityUpdated() {\n    super.entityUpdated();\n    this.loadAttributes();\n    if (isEmpty(this.formData.id)) {\n      this.formData = new ServiceEdgeRouterPolicy();\n    }\n    this.initData = cloneDeep(this.formData);\n    this.initSelectedAttributes();\n    this.extService.updateFormData(this.formData);\n    this.subscription.add(\n        this.extService.formDataChanged.subscribe((data) => {\n          if (data.isEmpty) {\n            return;\n          }\n          this.formData = data;\n        })\n    );\n    this.svc.edgeRouterNamedAttributesMap = this.svc.edgeRouterNamedAttributesMap;\n    this.svc.serviceNamedAttributesMap = this.svc.serviceNamedAttributesMap;\n    this.initData = cloneDeep(this.formData);\n  }\n\n  ngOnDestroy() {\n    this.extService?.closed?.emit({});\n    this.subscription.unsubscribe();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    this.isEditing = !isEmpty(this.formData.id);\n  }\n\n  getEdgeRouterNamedAttributesDebounced = debounce((filter: string) => this.svc.getEdgeRouterNamedAttributes(filter).then(() => this.mergeSelectedIntoAvailable()), 250);\n  getServiceNamedAttributesDebounced = debounce((filter: string) => this.svc.getServiceNamedAttributes(filter).then(() => this.mergeSelectedIntoAvailable()), 250);\n\n  loadAttributes() {\n    this.svc.mergeRolesDisplayIntoMaps(this.formData);\n    const promises = [];\n    promises.push(this.svc.getEdgeRouterRoleAttributes());\n    promises.push(this.svc.getServiceRoleAttributes());\n    promises.push(this.svc.getEdgeRouterNamedAttributes());\n    promises.push(this.svc.getServiceNamedAttributes());\n    Promise.all(promises).then(() => {\n      this.initSelectedAttributes();\n    });\n  }\n\n  /**\n   * Keeps already-selected names visible in the picker's available list even though the\n   * underlying fetch only returns a bounded/filtered page.\n   */\n  mergeSelectedIntoAvailable() {\n    const edgeRouterNames = new Set([...(this.svc.edgeRouterNamedAttributes || []), ...this.selectedEdgeRouterNamedAttributes.filter((n) => n != null)]);\n    this.svc.edgeRouterNamedAttributes = Array.from(edgeRouterNames).sort((a, b) => String(a).localeCompare(String(b)));\n    const serviceNames = new Set([...(this.svc.serviceNamedAttributes || []), ...this.selectedServiceNamedAttributes.filter((n) => n != null)]);\n    this.svc.serviceNamedAttributes = Array.from(serviceNames).sort((a, b) => String(a).localeCompare(String(b)));\n  }\n\n  initSelectedAttributes() {\n    if (isEmpty(this.formData.id)) {\n      this.svc.associatedEdgeRouters = [];\n      this.svc.associatedEdgeRouterNames = [];\n      this.svc.associatedServices = [];\n      this.svc.associatedServiceNames = [];\n      return;\n    }\n    const edgeRouterIdAttributesMap = invert(this.svc.edgeRouterNamedAttributesMap);\n    const serviceIdAttributesMap = invert(this.svc.serviceNamedAttributesMap);\n    this.selectedEdgeRouterRoleAttributes = [];\n    this.selectedEdgeRouterNamedAttributes = [];\n    this.selectedServiceRoleAttributes = [];\n    this.selectedServiceNamedAttributes = [];\n    this.formData.edgeRouterRoles?.forEach(attr => {\n      if (attr.indexOf('@') === 0) {\n        this.selectedEdgeRouterNamedAttributes.push(edgeRouterIdAttributesMap[attr.substring(1)]);\n      } else {\n        this.selectedEdgeRouterRoleAttributes.push(attr.substring(1));\n      }\n    });\n    this.formData.serviceRoles?.forEach(attr => {\n      if (attr.indexOf('@') === 0) {\n        this.selectedServiceNamedAttributes.push(serviceIdAttributesMap[attr.substring(1)]);\n      } else {\n        this.selectedServiceRoleAttributes.push(attr.substring(1));\n      }\n    });\n    this.mergeSelectedIntoAvailable();\n    this.updateAssociations();\n  }\n\n  headerActionRequested(action) {\n    switch(action.name) {\n      case 'save':\n        this.save();\n        break;\n      case 'close':\n        this.returnToListPage();\n        break;\n      case 'toggle-view':\n        this.formView = action.data;\n        break;\n      case 'delete':\n        this.deleteEntity();\n        break;\n    }\n  }\n\n  multiActionRequested(action) {\n    switch (action.id) {\n      case 'save':\n        this.save();\n        break;\n      case 'delete':\n        this.deleteEntity();\n        break;\n    }\n  }\n\n  async save(event?) {\n    if (!this.canSaveByPermissions()) {\n      return;\n    }\n    this.formData.name = this.formData.name.trim();\n    const isValid = this.validate();\n    const isExtValid = await this.extService.validateData();\n    if(!isValid || !isExtValid) {\n      const growlerData = new GrowlerModel(\n          'error',\n          'Error',\n          `Data Invalid`,\n          `Service Edge Router Policy data is invalid. Please update the highlighted fields and try again.`,\n      );\n      this.growlerService.show(growlerData);\n      return;\n    }\n\n    this.isLoading = true;\n    this.applySelectedAttributes();\n    this.svc.save(this.formData).then((result) => {\n      const data = result?.data?.id ? result.data : result;\n      this._dataChange = false;\n      if (!isEmpty(data.id)) {\n        this.formData = data || this.formData;\n        this.initData = this.formData;\n      } else {\n        this.initData = this.formData;\n      }\n      if (result?.close) {\n        this.closeModal(true, true);\n        this.returnToListPage();\n      }\n    }).finally(() => {\n      this.isLoading = false;\n    });\n  }\n\n  applySelectedAttributes() {\n    this.formData.edgeRouterRoles = this.svc.getSelectedRoles(this.selectedEdgeRouterRoleAttributes, this.selectedEdgeRouterNamedAttributes, this.svc.edgeRouterNamedAttributesMap);\n    this.formData.serviceRoles = this.svc.getSelectedRoles(this.selectedServiceRoleAttributes, this.selectedServiceNamedAttributes, this.svc.serviceNamedAttributesMap);\n  }\n\n  validate() {\n    this.errors = {};\n    if (isEmpty(this.formData.name)) {\n      this.errors['name'] = true;\n    }\n    return isEmpty(this.errors);\n  }\n\n  apiActionRequested(action) {\n    switch (action.id) {\n      case 'cli':\n        this.copyCLICommand();\n        break;\n      case 'curl':\n        this.copyCURLCommand();\n        break;\n    }\n  }\n\n  updateAssociations() {\n    this.svc.getAssociatedEdgeRoutersByAttribute(this.selectedEdgeRouterRoleAttributes, this.selectedEdgeRouterNamedAttributes, this.formData?.semantic);\n    this.svc.getAssociatedServicesByAttribute(this.selectedServiceRoleAttributes, this.selectedServiceNamedAttributes, this.formData?.semantic);\n  }\n\n  copyCLICommand() {\n    const erRoles = this.svc.getSelectedRoles(this.selectedEdgeRouterRoleAttributes, this.selectedEdgeRouterNamedAttributes, this.svc.edgeRouterNamedAttributesMap);\n    let erRolesVar = this.getRolesCLIVariable(erRoles);\n\n    const serviceRoles = this.svc.getSelectedRoles(this.selectedServiceRoleAttributes, this.selectedServiceNamedAttributes, this.svc.serviceNamedAttributesMap);\n    let serviceRolesVar = this.getRolesCLIVariable(serviceRoles);\n\n    const command = `ziti edge ${this.formData.id ? 'update' : 'create'} service-edge-router-policy ${this.formData.id ? `'${this.formData.id}'` : ''} ${this.formData.id ? '--name' : ''} '${this.formData.name}'${this.formData.id ? '' : ` --semantic '${this.formData.semantic}`} --edge-router-roles '${erRolesVar}' --service-roles '${serviceRolesVar}'`;\n\n    navigator.clipboard.writeText(command);\n    const growlerData = new GrowlerModel(\n        'success',\n        'Success',\n        `Text Copied`,\n        `CLI command copied to clipboard`,\n    );\n    this.growlerService.show(growlerData);\n  }\n\n  copyCURLCommand() {\n    const erRoles = this.svc.getSelectedRoles(this.selectedEdgeRouterRoleAttributes, this.selectedEdgeRouterNamedAttributes, this.svc.edgeRouterNamedAttributesMap);\n    let erRolesVar = this.getRolesCURLVariable(erRoles);\n\n    const serviceRoles = this.svc.getSelectedRoles(this.selectedServiceRoleAttributes, this.selectedServiceNamedAttributes, this.svc.serviceNamedAttributesMap);\n    let serviceRolesVar = this.getRolesCURLVariable(serviceRoles);\n\n    const command = `curl '${this.apiCallURL}' \\\\\n${this.formData.id ? '--request PATCH \\\\' : ''}\n  -H 'accept: application/json' \\\\\n  -H 'content-type: application/json' \\\\\n  -H 'zt-session: ${this.settings.session.id}' \\\\\n  --data-raw '{\"name\":\"${this.formData.name}\",\"edgeRouterRoles\":${erRolesVar},\"serviceRoles\":${serviceRolesVar},\"semantic\":\"${this.formData.semantic}\"}'`;\n\n    navigator.clipboard.writeText(command);\n    const growlerData = new GrowlerModel(\n        'success',\n        'Success',\n        `Text Copied`,\n        `CURL command copied to clipboard`,\n    );\n    this.growlerService.show(growlerData);\n  }\n\n  get apiCallURL() {\n    return this.settings.selectedEdgeController + '/edge/management/v1/service-edge-router-policies' + (this.formData.id ? `/${this.formData.id}` : '');\n  }\n\n  get apiData() {\n    const data: any = {\n      name: this.formData?.name || '',\n      appData: this.formData?.appData || '',\n      edgeRouterRoles: this.svc.getSelectedRoles(this.selectedEdgeRouterRoleAttributes, this.selectedEdgeRouterNamedAttributes, this.svc.edgeRouterNamedAttributesMap),\n      serviceRoles: this.svc.getSelectedRoles(this.selectedServiceRoleAttributes, this.selectedServiceNamedAttributes, this.svc.serviceNamedAttributesMap),\n      semantic: this.formData?.semantic,\n      tags: this.formData?.tags\n    }\n    return data;\n  }\n\n  _apiData = {};\n  set apiData(data) {\n    this._apiData = data;\n  }\n\n  clear(): void {\n  }\n}\n","<div class=\"projectable-form-wrapper\"\n  (keyup.enter)=\"save($event)\"\n  (keyup.escape)=\"closeModal(false)\"\n  [class.projectable-form-hidden]=\"!dataInit\"\n  >\n  <lib-form-header\n    [data]=\"formData\"\n    [title]=\"formData.id ? 'Edit Service Edge Router Policy: ' : 'Create New Service Edge Router Policy'\"\n    [moreActions]=\"moreActions\"\n    [multiActions]=\"multiActions\"\n    (actionRequested)=\"headerActionRequested($event)\"\n    (multiActionRequested)=\"multiActionRequested($event)\"\n    [(formView)]=\"formView\"\n    [class.is-scrolled]=\"isScrolled\"\n    [saveDisabled]=\"formPermissionSaveDisabled\"\n    [saveTooltip]=\"formPermissionSaveTooltip\"\n    [strictReadonlyUi]=\"useStrictReadonlyForm\"\n  ></lib-form-header>\n  <div class=\"service-edge-router-policy-form-container projectable-form-container\" #formContainer>\n    @if (formView === 'simple') {\n      <div class=\"projectable-form-main-column form-group-row\">\n        <div class=\"form-group-column three-fifths\">\n          <lib-form-field-container [title]=\"'Service Edge Router Policy Name'\" [label]=\"useStrictReadonlyForm ? '' : 'REQUIRED'\">\n              <input\n                class=\"form-field-input\"\n                placeholder=\"Name this service edge router policy\"\n                [ngClass]=\"{error: errors['name']}\"\n                [(ngModel)]=\"formData.name\"\n                autofocus\n                #nameFieldInput\n                [disabled]=\"useStrictReadonlyForm\"\n                />\n          </lib-form-field-container>\n          <lib-form-field-container\n            [title]=\"'Select Edge Router Attributes'\"\n            [label]=\"'OPTIONAL'\"\n            [contentStyle]=\"'z-index: 100003'\"\n            [helpText]=\"'Choose which edge router to associate to this policy by picking from the list of available attributes'\"\n            >\n            <lib-tag-selector\n              [disableField]=\"useStrictReadonlyForm\"\n              [disableCreate]=\"useStrictReadonlyForm\"\n              [(selectedRoleAttributes)]=\"selectedEdgeRouterRoleAttributes\"\n              [(selectedNamedAttributes)]=\"selectedEdgeRouterNamedAttributes\"\n              [availableRoleAttributes]=\"svc.edgeRouterRoleAttributes\"\n              [availableNamedAttributes]=\"svc.edgeRouterNamedAttributes\"\n              (selectedNamedAttributesChange)=\"svc.getAssociatedEdgeRoutersByAttribute(selectedEdgeRouterRoleAttributes, selectedEdgeRouterNamedAttributes, formData.semantic)\"\n              (selectedRoleAttributesChange)=\"svc.getAssociatedEdgeRoutersByAttribute(selectedEdgeRouterRoleAttributes, selectedEdgeRouterNamedAttributes, formData.semantic)\"\n              (filterChange)=\"getEdgeRouterNamedAttributesDebounced($event)\"\n              [namedAttributesServerFiltered]=\"true\"\n              [placeholder]=\"'Select edge router attributes'\"\n            ></lib-tag-selector>\n          </lib-form-field-container>\n          <lib-form-field-container\n            [title]=\"'Select Service Attributes'\"\n            [label]=\"'OPTIONAL'\"\n            [contentStyle]=\"'z-index: 100002'\"\n            [helpText]=\"'Choose which services to associate to this policy by picking from the list of available attributes'\"\n            >\n            <lib-tag-selector\n              [disableField]=\"useStrictReadonlyForm\"\n              [disableCreate]=\"useStrictReadonlyForm\"\n              [(selectedRoleAttributes)]=\"selectedServiceRoleAttributes\"\n              [(selectedNamedAttributes)]=\"selectedServiceNamedAttributes\"\n              [availableRoleAttributes]=\"svc.serviceRoleAttributes\"\n              [availableNamedAttributes]=\"svc.serviceNamedAttributes\"\n              (selectedNamedAttributesChange)=\"svc.getAssociatedServicesByAttribute(selectedServiceRoleAttributes, selectedServiceNamedAttributes, formData.semantic)\"\n              (selectedRoleAttributesChange)=\"svc.getAssociatedServicesByAttribute(selectedServiceRoleAttributes, selectedServiceNamedAttributes, formData.semantic)\"\n              (filterChange)=\"getServiceNamedAttributesDebounced($event)\"\n              [namedAttributesServerFiltered]=\"true\"\n              [placeholder]=\"'Select service attributes'\"\n            ></lib-tag-selector>\n          </lib-form-field-container>\n          <lib-form-field-container\n            [title]=\"'Semantic'\"\n            [layout]=\"'row'\"\n            >\n            <select\n              [(ngModel)]=\"formData.semantic\"\n              (change)=\"updateAssociations()\"\n              id=\"PolicySemantic\"\n              class=\"form-field-dropdown\"\n              [disabled]=\"useStrictReadonlyForm\"\n              >\n              <option value=\"AnyOf\">AnyOf</option>\n              <option value=\"AllOf\">AllOf</option>\n            </select>\n          </lib-form-field-container>\n          <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n          <div [hidden]=\"!showMore\" class=\"form-group-column\">\n            @if (!hideTags) {\n              <lib-form-field-container\n                [title]=\"'Custom Tags'\"\n                [label]=\"'OPTIONAL'\"\n                class=\"form-field-advanced\"\n                >\n                <lib-custom-tags [(tags)]=\"formData.tags\" [readOnly]=\"useStrictReadonlyForm\"></lib-custom-tags>\n              </lib-form-field-container>\n            }\n          </div>\n        </div>\n        <div class=\"form-group-column two-fifths\">\n          <lib-form-field-container\n            [title]=\"'Associated Edge Routers'\"\n            [count]=\"svc.associatedEdgeRouterNames.length\"\n            [class]=\"'hide-overflow'\"\n            [helpText]=\"'Preview list of all Edge Routers that this Service Edge Router Policy is associated with.'\"\n            >\n            <lib-preview-list\n              [clickable]=\"false\"\n              [isLoading]=\"edgeRoutersLoading\"\n              [allNames]=\"svc.associatedEdgeRouterNames\"\n            ></lib-preview-list>\n          </lib-form-field-container>\n          <lib-form-field-container\n            [title]=\"'Associated Services'\"\n            [count]=\"svc.associatedServiceNames.length\"\n            [helpText]=\"'Preview list of all Services that this Service Edge Router Policy is associated with.'\"\n            >\n            <lib-preview-list\n              [clickable]=\"false\"\n              [isLoading]=\"servicesLoading\"\n              [allNames]=\"svc.associatedServiceNames\"\n            ></lib-preview-list>\n          </lib-form-field-container>\n          @if (showApiCalls) {\n            <lib-form-field-container\n              [title]=\"'API Calls'\"\n              [headerActions]=\"apiOptions\"\n              (actionRequested)=\"apiActionRequested($event)\"\n              >\n              <div class=\"form-row\">\n                <input class=\"form-field-input\" [value]=\"apiCallURL\"/>\n                <div class=\"icon-copy copy-text\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n              </div>\n              @if (formData) {\n                <lib-json-view [(data)]=\"apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n              }\n            </lib-form-field-container>\n          }\n        </div>\n      </div>\n    }\n    @if (formView === 'raw') {\n      <div class=\"form-group-column\">\n        @if (formData) {\n          <lib-json-view [(data)]=\"formData\" [readOnly]=\"useStrictReadonlyForm\"></lib-json-view>\n        }\n      </div>\n    }\n  </div>\n</div>\n@if (isLoading || !dataInit) {\n  <lib-loading-indicator [isLoading]=\"isLoading || !dataInit\"></lib-loading-indicator>\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Inject, Injectable} from '@angular/core';\nimport {DataTableFilterService, FilterObj} from \"../../features/data-table/data-table-filter.service\";\nimport _, {isEmpty, unset} from \"lodash\";\nimport moment from \"moment\";\nimport {ListPageServiceClass} from \"../../shared/list-page-service.class\";\nimport {\n    TableColumnDefaultComponent\n} from \"../../features/data-table/column-headers/table-column-default/table-column-default.component\";\nimport {CallbackResults} from \"../../features/list-page-features/list-page-form/list-page-form.component\";\nimport {SchemaService} from \"../../services/schema.service\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../services/settings.service\";\nimport {CsvDownloadService} from \"../../services/csv-download.service\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../features/extendable/extensions-noop.service\";\nimport {Service} from \"../../models/service\";\nimport {TableCellNameComponent} from \"../../features/data-table/cells/table-cell-name/table-cell-name.component\";\nimport {Router} from \"@angular/router\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class TerminatorsPageService extends ListPageServiceClass {\n\n    override DEFAULT_PAGING: any = {\n        filter: \"\",\n        noSearch: false,\n        order: \"asc\",\n        page: 1,\n        searchOn: \"address\",\n        sort: \"address\",\n        total: 50\n    }\n\n    private paging = this.DEFAULT_PAGING;\n\n    resourceType = 'terminators';\n    selectedConfig: any = {};\n    modalType = '';\n\n    override menuItems = [\n        {name: 'Edit', action: 'update'},\n        {name: 'Delete', action: 'delete'},\n    ]\n\n    constructor(\n        private schemaSvc: SchemaService,\n        @Inject(SETTINGS_SERVICE) settings: SettingsService,\n        filterService: DataTableFilterService,\n        csvDownloadService: CsvDownloadService,\n        @Inject(SHAREDZ_EXTENSION) extService: ExtensionService,\n        protected override router: Router\n    ) {\n        super(settings, filterService, csvDownloadService, extService, router);\n    }\n\n    initTableColumns(): any {\n\n        const typeRenderer = (row) => {\n            return row?.data?.configType?.name;\n        };\n\n        const createdAtHeaderComponentParams = {\n            filterType: 'DATETIME',\n        };\n        return [\n            {\n                colId: 'address',\n                field: 'address',\n                headerName: 'Address',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: this.headerComponentParams,\n                cellRenderer: TableCellNameComponent,\n                cellRendererParams: { pathRoot: this.basePath },\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.openEditForm(data?.data?.id);\n                },\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: true,\n                filter: true,\n                sortColumn: this.sort.bind(this)\n            },\n            {\n                colId: 'router.name',\n                field: 'router.name',\n                headerName: 'Router Name',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: this.headerComponentParams,\n                cellRenderer: TableCellNameComponent,\n                cellRendererParams: { pathRoot: this.basePath },\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.openEditForm(data?.data?.id);\n                },\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: false,\n                filter: true,\n                sortColumn: this.sort.bind(this)\n            },\n            {\n                colId: 'router',\n                field: 'router.id',\n                headerName: 'Router ID',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: this.headerComponentParams,\n                cellRenderer: TableCellNameComponent,\n                cellRendererParams: { pathRoot: this.basePath },\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.openEditForm(data?.data?.id);\n                },\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: true,\n                filter: true,\n                sortColumn: this.sort.bind(this)\n            },\n            {\n                colId: 'service.name',\n                field: 'service.name',\n                headerName: 'Service Name',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: this.headerComponentParams,\n                cellRenderer: TableCellNameComponent,\n                cellRendererParams: { pathRoot: this.basePath },\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.openEditForm(data?.data?.id);\n                },\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: false,\n                filter: true,\n                sortColumn: this.sort.bind(this)\n            },\n            {\n                colId: 'service',\n                field: 'service.id',\n                headerName: 'Service ID',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: this.headerComponentParams,\n                cellRenderer: TableCellNameComponent,\n                cellRendererParams: { pathRoot: this.basePath },\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.openEditForm(data?.data?.id);\n                },\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: true,\n                filter: true,\n                sortColumn: this.sort.bind(this)\n            },\n            {\n                colId: 'createdAt',\n                field: 'createdAt',\n                headerName: 'Created At',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: createdAtHeaderComponentParams,\n                valueFormatter: this.createdAtFormatter,\n                resizable: true,\n                sortable: true,\n                sortColumn: this.sort.bind(this),\n                cellClass: 'nf-cell-vert-align tCol',\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.openEditForm(data.data.id);\n                },\n                hide: false\n            },\n            this.ID_COLUMN_DEF\n        ];\n    }\n\n    getData(filters?: FilterObj[], sort?: any) {\n        if (sort.sortBy === 'name') {\n            sort.sortBy = 'address';\n        }\n        return super.getTableData('terminators', this.paging, filters, sort)\n            .then((results: any) => {\n                return this.processData(results);\n            });\n    }\n\n    validate = (formData): Promise<CallbackResults> => {\n        return Promise.resolve({ passed: true});\n    }\n\n    private processData(results: any) {\n        if (!isEmpty(results?.data)) {\n            //pre-process data before rendering\n            results.data = this.addActionsPerRow(results);\n        }\n        return results;\n    }\n\n    private addActionsPerRow(results: any): any[] {\n        return results.data.map((row) => {\n            row.actionList = ['update', 'delete'];\n            return row;\n        });\n    }\n\n    public openUpdate(item?: any) {\n        this.modalType = 'terminators';\n        if (item) {\n            this.selectedConfig = item;\n            this.selectedConfig.badges = [];\n            unset(this.selectedConfig, '_links');\n        } else {\n            this.selectedConfig = new Service();\n        }\n        this.sideModalOpen = true;\n    }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, Inject, OnInit} from '@angular/core';\nimport {DataTableFilterService} from \"../../features/data-table/data-table-filter.service\";\nimport {TerminatorsPageService} from \"./terminators-page.service\";\nimport {TabNameService} from \"../../services/tab-name.service\";\nimport {ListPageComponent} from \"../../shared/list-page-component.class\";\nimport {ConsoleEventsService} from \"../../services/console-events.service\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../features/extendable/extensions-noop.service\";\n\n\n@Component({\n    selector: 'lib-configurations',\n    templateUrl: './terminators-page.component.html',\n    styleUrls: ['./terminators-page.component.scss'],\n    standalone: false\n})\nexport class TerminatorsPageComponent extends ListPageComponent implements OnInit {\n    title = 'Terminators'\n    tabs: { url: string, label: string }[] ;\n    isLoading: boolean;\n    formDataChanged = false;\n\n    constructor(\n        override svc: TerminatorsPageService,\n        filterService: DataTableFilterService,\n        private tabNames: TabNameService,\n        consoleEvents: ConsoleEventsService,\n        dialogForm: MatDialog,\n        @Inject(SHAREDZ_EXTENSION) private extService: ExtensionService,\n    ) {\n        super(filterService, svc, consoleEvents, dialogForm, extService);\n    }\n\n    override ngOnInit() {\n        this.tabs = this.tabNames.getTabs('services');\n        this.svc.refreshData = this.refreshData;\n        super.ngOnInit();\n    }\n\n    headerActionClicked(action: string) {\n        switch (action) {\n            case 'add':\n                this.svc.openEditForm();\n                break;\n            case 'edit':\n                this.svc.openEditForm();\n                break;\n            case 'delete':\n                const selectedItems = this.rowData.filter((row) => {\n                    return row.selected;\n                });\n                const label = selectedItems.length > 1 ? 'terminators' : 'terminator';\n                this.openBulkDelete(selectedItems, label);\n                break;\n            default:\n        }\n    }\n\n    tableAction(event: any) {\n        this.trackMenuAction(event?.action, event?.item);\n        switch(event?.action) {\n            case 'toggleAll':\n            case 'toggleItem':\n                this.itemToggled(event.item)\n                break;\n            case 'update':\n                this.svc.openEditForm(event.item?.id);\n                break;\n            case 'create':\n                this.svc.openEditForm();\n                break;\n            case 'delete':\n                this.deleteItem(event.item)\n                break;\n            default:\n                break;\n        }\n    }\n\n    trackMenuAction(action: string, item: any) {\n        this.extService?.consoleActionTriggered?.emit({\n            action,\n            page: 'terminator',\n            item,\n            type:'menu-action'\n        });\n    }\n    deleteItem(item: any) {\n        this.openBulkDelete([item], 'terminator');\n    }\n\n    closeModal(event: any) {\n        this.svc.sideModalOpen = false;\n        if(event?.refresh) {\n            this.refreshData();\n        }\n    }\n\n    dataChanged(event) {\n        this.formDataChanged = event;\n    }\n}\n","<div class=\"ziti-page-container ziti-terminators-container\">\n  <lib-list-page-header [title]=\"title\"\n    [tabs]=\"tabs\"\n    [hideAction]=\"true\"\n    [blockCreate]=\"headerBlockCreate\"\n    [blockDelete]=\"headerBlockDelete\"\n  (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n  <lib-data-table [tableId]=\"'terminators'\"\n    [noItemsReadonly]=\"headerBlockCreate\"\n    [accessDenied]=\"headerBlockRead\"\n    [rowData]=\"rowData\"\n    [isLoading]=\"isLoading\"\n    [columnDefinitions]=\"columnDefs\"\n    (actionRequested)=\"tableAction($event)\"\n    [startCount]=\"startCount\"\n    [endCount]=\"endCount\"\n    [totalCount]=\"totalCount\"\n    [emptyMsg]=\"'No terminators defined, Click the plus to add a terminator.'\"\n    [filterApplied]=\"filterApplied\"\n    [filterName]=\"'Address'\"\n    [filterColumn]=\"'address'\"\n    [menuItems]=\"svc.menuItems\"\n    (gridReady)=\"gridReady($event)\"\n    [options]=\"{noSelect: true, noMenu: false}\"\n    >\n  </lib-data-table>\n</div>\n@if (isLoading) {\n  <lib-loading-indicator [isLoading]=\"isLoading\"></lib-loading-indicator>\n}\n","export class Config {\n    name = '';\n    data = {};\n    configTypeId = '';\n    tags: any = {};\n};","import {Injectable, Inject} from '@angular/core';\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../services/ziti-data.service\";\nimport {Resolver} from \"@stoplight/json-ref-resolver\";\nimport {SchemaService} from \"../../../services/schema.service\";\nimport {defer, isBoolean, isEmpty, isNil, keys} from \"lodash\";\nimport {GrowlerModel} from \"../../messaging/growler.model\";\nimport {GrowlerService} from \"../../messaging/growler.service\";\nimport {Config} from \"../../../models/config\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../extendable/extensions-noop.service\";\nimport {SERVICE_EXTENSION_SERVICE} from \"../service/service-form.service\";\nimport {ValidationService} from \"../../../services/validation.service\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class ConfigurationService {\n    private configTypes: any[] = [];\n\n    items: any[] = [];\n    errors: any[] = [];\n    saveDisabled = false;\n    configJsonView = false;\n    configDataLabel = 'Configuration Form';\n\n    constructor(\n        @Inject(ZITI_DATA_SERVICE) private dataService: ZitiDataService,\n        @Inject(SHAREDZ_EXTENSION)private extService: ExtensionService,\n        private schemaSvc: SchemaService,\n        private growlerService: GrowlerService,\n        private validationService: ValidationService\n    ) {\n    }\n\n    async getSchema(schemaType: string): Promise<any> {\n        if (!schemaType) return Promise.resolve();\n        for (let idx = 0; idx < this.configTypes.length; idx++) {\n            if(this.configTypes[idx].id === schemaType)\n                return this.configTypes[idx].schema;\n        }\n    }\n\n    getConfigTypes() {\n        const paging = {\n            filter: \"\",\n            noSearch: false,\n            order: \"asc\",\n            page: 1,\n            searchOn: \"name\",\n            sort: \"name\",\n            total: 50\n        };\n        return this.dataService.get('config-types', paging, [])\n        .then(async (body: any) => {\n            if (body.error) throw body.error;\n            this.configTypes = [];\n            const promises: Promise<any>[] = [];\n            const resolver = new Resolver();\n            body.data.map( (row: any) => {\n                const schema = row.schema;\n                promises.push(resolver.resolve(schema, {}).then(s => {\n                    row.schema = s.result;\n                    this.configTypes.push(row);\n                }))\n            });\n            return Promise.all(promises).then(() => this.configTypes);\n        });\n    }\n\n    getAssociatedServices(configId) {\n        return this.dataService.getSubdata('configs', configId, 'services',this.dataService.DEFAULT_PAGING).then((result: any) => {\n            const associatedServices = result.data;\n            const associatedServiceNames = associatedServices.map((svc) => {\n                return svc.name;\n            });\n            return {associatedServices, associatedServiceNames};\n        });\n    }\n\n    toggleJSONView() {\n        this.configJsonView = !this.configJsonView;\n        this.configDataLabel = this.configJsonView ? 'JSON Configuration' : 'Configuration Form';\n        if (this.configJsonView) {\n            //this.configSubscriptions.unsubscribe();\n        }\n    }\n\n    save(formData) {\n        const isUpdate = !isEmpty(formData.id);\n        const data: any = this.getConfigDataModel(formData, isUpdate);\n        let prom;\n        if (isUpdate) {\n            prom = this.dataService.patch('configs', data, formData.id, true);\n        } else {\n            prom = this.dataService.post('configs', data, true);\n        }\n\n        return prom.then(async (result: any) => {\n            const id = isUpdate ? formData.id : (result?.data?.id || result?.id);\n            let config = await this.dataService.getSubdata('configs', id, '').then((svcData) => {\n                return svcData.data;\n            });\n            return this.extService.formDataSaved(config).then((formSavedResult: any) => {\n                if (!formSavedResult) {\n                    return config;\n                }\n                const growlerData = new GrowlerModel(\n                    'success',\n                    'Success',\n                    `Config ${isUpdate ? 'Updated' : 'Created'}`,\n                    `Successfully ${isUpdate ? 'updated' : 'created'} Config: ${formData.name}`,\n                );\n                this.growlerService.show(growlerData);\n                return config;\n            }).catch((result) => {\n                return false;\n            });\n        }).catch((resp) => {\n            const errorMessage = this.dataService.getErrorMessage(resp);\n            const growlerData = new GrowlerModel(\n                'error',\n                'Error',\n                `Error ${isUpdate ? 'Updating' : 'Creating'} Config`,\n                errorMessage,\n            );\n            this.growlerService.show(growlerData);\n            throw resp;\n        })\n    }\n\n    getConfigDataModel(formData, isUpdate) {\n        const saveModel = new Config();\n        const modelProperties = keys(saveModel);\n        modelProperties.forEach((prop) => {\n            switch(prop) {\n                default:\n                    saveModel[prop] = formData[prop];\n            }\n        });\n        saveModel.data = this.validationService.redefineObject(saveModel.data);\n        return saveModel;\n    }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {\n    Component,\n    EventEmitter, Inject,\n    Input,\n    OnDestroy,\n    OnInit, Output,\n    ViewChild,\n} from '@angular/core';\nimport {ConfigurationService} from \"./configuration.service\";\nimport {Subscription} from \"rxjs\";\nimport {SchemaService} from \"../../../services/schema.service\";\nimport {ProjectableForm} from \"../projectable-form.class\";\nimport {GrowlerService} from \"../../messaging/growler.service\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../extendable/extensions-noop.service\";\nimport {ConfigEditorComponent} from \"../../config-editor/config-editor.component\";\n\nimport {cloneDeep, defer, isEmpty, unset} from 'lodash';\nimport {GrowlerModel} from \"../../messaging/growler.model\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../../services/settings.service\";\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../services/ziti-data.service\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {Config} from \"../../../models/config\";\nimport {Location} from \"@angular/common\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {ConfirmComponent} from \"../../confirm/confirm.component\";\n\n@Component({\n    selector: 'lib-configuration',\n    templateUrl: './configuration-form.component.html',\n    styleUrls: ['./configuration-form.component.scss'],\n    standalone: false\n})\nexport class ConfigurationFormComponent extends ProjectableForm implements OnInit, OnDestroy {\n\n    @Input() override errors: any = {};\n    @Output() close: EventEmitter<void> = new EventEmitter<void>();\n\n    options: any[] = [];\n    isEditing = !isEmpty(this.formData.id);\n    formView = 'simple';\n    formDataInvalid = false;\n    editMode = false;\n    items: any = [];\n    selectedSchema: any = '';\n    associatedServices = [];\n    associatedServiceNames = [];\n    servicesLoading = false;\n    settings: any = {};\n    selectedConfigTypeId = '';\n\n    override entityType = 'configs';\n    override entityClass = Config;\n\n    @ViewChild(\"configEditor\", {read: ConfigEditorComponent}) configEditor!: ConfigEditorComponent;\n    constructor(\n        public svc: ConfigurationService,\n        private schemaSvc: SchemaService,\n        growlerService: GrowlerService,\n        @Inject(SHAREDZ_EXTENSION) extService: ExtensionService,\n        @Inject(SETTINGS_SERVICE) protected override settingsService: SettingsService,\n        @Inject(ZITI_DATA_SERVICE) override zitiService: ZitiDataService,\n        protected override router: Router,\n        protected override route: ActivatedRoute,\n        location: Location,\n        dialogForm: MatDialog\n    ) {\n        super(growlerService, extService, zitiService, router, route, location, settingsService, dialogForm);\n    }\n\n    override ngOnInit(): void {\n        this.svc.configJsonView = false;\n        super.ngOnInit();\n        this.settingsService.settingsChange.subscribe((results:any) => {\n            this.settings = results;\n        });\n    }\n\n    override entityUpdated() {\n    super.entityUpdated();\n        if (isEmpty(this.formData?.data)) {\n            this.formData.data = {};\n        }\n        if (isEmpty(this.formData?.configTypeId)) {\n            this.formData.configTypeId = '';\n        }\n        this.selectedConfigTypeId = this.formData.configTypeId;\n        this.initData = cloneDeep(this.formData);\n        this.svc.configJsonView = false;\n        //this.getAssociatedServices();\n        this.svc.getConfigTypes()\n            .then(configTypes => {\n                this.options = configTypes.sort();\n                this.getSchema();\n            });\n        this.isEditing = !isEmpty(this.formData.id);\n        if (this.configTypeEmpty) {\n            this.formData.configTypeId = '';\n        }\n    }\n\n    getAssociatedServices() {\n        this.svc.getAssociatedServices(this.formData.id).then((result) => {\n            this.associatedServices = result.associatedServices;\n            this.associatedServiceNames = result.associatedServiceNames;\n        });\n    }\n\n    ngOnDestroy(): void {\n        this.clearForm();\n    }\n\n    get configTypeEmpty() {\n        return isEmpty(this.formData.configTypeId);\n    }\n\n    headerActionRequested(event) {\n        switch(event.name) {\n            case 'save':\n                this.save(event);\n                break;\n            case 'close':\n                this.returnToListPage();\n                break;\n            case 'toggle-view':\n                this.formView = event.data;\n                break;\n            case 'delete':\n                this.deleteEntity();\n                break;\n        }\n    }\n\n    multiActionRequested(action) {\n        switch (action.id) {\n            case 'save':\n                this.save();\n                break;\n            case 'delete':\n                this.deleteEntity();\n                break;\n        }\n    }\n\n    apiActionRequested(action) {\n        switch (action.id) {\n            case 'cli':\n                this.copyCLICommand();\n                break;\n            case 'curl':\n                this.copyCURLCommand();\n                break;\n        }\n    }\n\n    copyCLICommand() {\n        const command = `ziti edge ${this.formData.id ? 'update' : 'create'} config ${this.formData.id ? `'${this.formData.id}'` : ''} ${this.formData.id ? '--name' : ''} '${this.formData.name}' --data '${JSON.stringify(this.formData.data)}' --tags-json '${JSON.stringify(this.formData.tags)}'`;\n\n        navigator.clipboard.writeText(command);\n        const growlerData = new GrowlerModel(\n            'success',\n            'Success',\n            `Text Copied`,\n            `CLI command copied to clipboard`,\n        );\n        this.growlerService.show(growlerData);\n    }\n\n    copyCURLCommand() {\n        const command = `curl '${this.apiCallURL}' \\\\\n    ${this.formData.id ? '--request PATCH \\\\' : '\\\\'}\n    -H 'accept: application/json' \\\\\n    -H 'content-type: application/json' \\\\\n    -H 'zt-session: ${this.settings.session.id}' \\\\\n    --data-raw '${JSON.stringify(this.apiData)}'`;\n\n        navigator.clipboard.writeText(command);\n        const growlerData = new GrowlerModel(\n            'success',\n            'Success',\n            `Text Copied`,\n            `CURL command copied to clipboard`,\n        );\n        this.growlerService.show(growlerData);\n    }\n\n    override clear() {\n        this.formData.configTypeId = '';\n        this.clearForm();\n    }\n\n    clearForm() {\n        this.items.forEach((item: any) => {\n            if (item?.component) item.component.destroy();\n        });\n        this.errors = {};\n        this.items = [];\n        this.formData = {};\n        if (this.subscription) this.subscription.unsubscribe();\n    }\n\n    async save(event?: any) {\n        if (!this.canSaveByPermissions()) {\n            return;\n        }\n        this.errors = {};\n        this.isLoading = true;\n        try {\n            this.configEditor.getConfigDataFromForm();\n        } catch (err){\n            const growlerData = new GrowlerModel(\n                'error',\n                'Error',\n                `Error Getting Config Data`,\n                'Error getting configuration data from from.',\n            );\n            this.growlerService.show(growlerData);\n            throw err;\n        }\n        if (!this.validate()) {\n            this.isLoading = false;\n            return;\n        }\n        const configId = await this.svc.save(this.formData).then((result) => {\n            if (!isEmpty(result?.id)) {\n                this.formData = result;\n                this.initData = this.formData;\n            }\n            return result?.id;\n        }).finally(() => {\n            this.isLoading = false;\n        });\n        if (configId) {\n            this.initData = this.formData;\n            this._dataChange = false;\n            if (this.isModal) {\n                this.closeModal(true, true);\n            } else {\n                this.returnToListPage();\n            }\n        };\n    }\n\n    validate() {\n        this.errors = {};\n\n        if (!this.configEditor.validateConfig(this.selectedSchema, true)) {\n            return false;\n        }\n        if (isEmpty(this.formData.name)) {\n            this.errors['name'] = true;\n        }\n        if (isEmpty(this.formData.configTypeId)) {\n            this.errors['configTypeId'] = true;\n        }\n        if (!isEmpty(this.errors)) {\n            const growlerData = new GrowlerModel(\n                'error',\n                'Error',\n                `Error Validating Config`,\n                'The entered configuration is invalid. Please update missing/invalid fields and try again.',\n            );\n            this.growlerService.show(growlerData);\n        }\n        return isEmpty(this.errors);\n    }\n    get saveButtonTooltip() {\n        if (this.formDataInvalid) {\n            return 'Config data is invalid. Please update and try again.'\n        } else {\n            return 'Complete and attach config definition, or remove before saving';\n        }\n    }\n\n    getSchema() {\n        if (this.selectedConfigTypeId !== this.formData.configTypeId) {\n            this.selectedConfigTypeId = this.formData.configTypeId;\n            this.formData.data = {};\n        }\n        this.svc.getSchema(this.formData.configTypeId).then((result) => {\n            this.selectedSchema = result;\n        });\n    }\n\n    get apiCallURL() {\n        return this.settings.selectedEdgeController + '/edge/management/v1/configs' + (this.formData.id ? `/${this.formData.id}` : '');\n    }\n\n    get apiData(): any {\n        const data: any = {\n            name: this.formData?.name || '',\n            configTypeId: this.formData?.configTypeId || '',\n            data: this.formData?.data || {},\n            tags: this.formData?.tags\n        };\n        this._apiData = data;\n        return this._apiData;\n    }\n\n    _apiData: any = {};\n    set apiData(data) {\n        this._apiData = data;\n    }\n\n    dataChanged(event) {\n        this._apiData = cloneDeep(this.apiData);\n    }\n\n    override deleteEntity() {\n        if (!this.dialogForm) {\n            return;\n        }\n\n        // First fetch associated services to check if config is in use\n        this.svc.getAssociatedServices(this.formData.id).then((result) => {\n            const associatedServices = result.associatedServices || [];\n            const associatedServiceNames = result.associatedServiceNames || [];\n\n            if (associatedServices.length > 0) {\n                // Show warning dialog if config is in use\n                const data = {\n                    appendId: 'DeleteConfigsWithAssociations',\n                    title: 'Configs In Use',\n                    message: `The following configs are still in use by a service:`,\n                    submessage: 'Deleting these configs may cause disruption to those services. Would you still like to continue?',\n                    bulletList: [this.formData.name],\n                    confirmLabel: 'Yes',\n                    cancelLabel: 'Oops, no get me out of here',\n                    imageUrl: 'assets/svgs/Growl_Warning.svg',\n                    showCancelLink: true\n                };\n\n                const dialogRef = this.dialogForm.open(ConfirmComponent, {\n                    data: data,\n                    autoFocus: false,\n                });\n\n                dialogRef.afterClosed().subscribe((result) => {\n                    if (result?.confirmed) {\n                        this.performDelete();\n                    }\n                });\n            } else {\n                // No associations, proceed with standard delete confirmation\n                super.deleteEntity();\n            }\n        });\n    }\n\n    private performDelete() {\n        this.isLoading = true;\n        this.zitiService.delete(this.entityType, this.formData.id).then(() => {\n            const growlerData = new GrowlerModel(\n                'success',\n                'Success',\n                `${this.entityType} Deleted`,\n                `Successfully deleted ${this.entityType.slice(0, -1)}: ${this.formData.name}`,\n            );\n            this.growlerService.show(growlerData);\n            this.returnToListPage();\n        }).catch((resp) => {\n            const errorMessage = this.zitiService.getErrorMessage(resp);\n            const growlerData = new GrowlerModel(\n                'error',\n                'Error',\n                `Delete Failed`,\n                `Failed to delete ${this.entityType.slice(0, -1)}: ${errorMessage}`,\n            );\n            this.growlerService.show(growlerData);\n        }).finally(() => {\n            this.isLoading = false;\n        });\n    }\n}\n","<div class=\"projectable-form-wrapper\"\n  (keyup.enter)=\"save($event)\"\n  (keyup.escape)=\"closeModal(false)\"\n  tabindex=\"0\"\n  [class.projectable-form-hidden]=\"!dataInit\"\n  >\n  <lib-form-header\n    [data]=\"formData\"\n    [title]=\"(formData.id ? 'Edit Config' : 'Create Config')\"\n    [moreActions]=\"moreActions\"\n    [multiActions]=\"multiActions\"\n    (actionRequested)=\"headerActionRequested($event)\"\n    (multiActionRequested)=\"multiActionRequested($event)\"\n    [(formView)]=\"formView\"\n    [saveDisabled]=\"svc.saveDisabled || formDataInvalid || formPermissionSaveDisabled\"\n    [saveTooltip]=\"formPermissionSaveDisabled ? formPermissionSaveTooltip : saveButtonTooltip\"\n    [class.is-scrolled]=\"isScrolled\"\n    [strictReadonlyUi]=\"useStrictReadonlyForm\"\n  ></lib-form-header>\n  <div class=\"config-form-container projectable-form-container\" #formContainer>\n    <div class=\"projectable-form-main-column form-group-row\" [hidden]=\"formView !== 'simple'\">\n      <div class=\"form-group-column three-fifths\">\n        <lib-form-field-container [title]=\"'Config Name'\" [label]=\"useStrictReadonlyForm ? '' : 'REQUIRED'\">\n          <input\n            class=\"form-field-input\"\n            id=\"ConfigName\"\n            type=\"text\"\n            maxlength=\"500\"\n            placeholder=\"Name this config\"\n            [ngClass]=\"{error: errors['name']}\"\n            [(ngModel)]=\"formData.name\"\n            (keyup)=\"apiData()\"\n            [disabled]=\"useStrictReadonlyForm\"\n            >\n        </lib-form-field-container>\n        <lib-form-field-container [showHeader]=\"false\">\n            <div class=\"config-title-row\">\n            <span class=\"form-field-title\">Configuration Data</span>\n            <div class=\"form-header-toggle-container\">\n              <span\n                class=\"toggle-option-text\"\n                [ngClass]=\"{'toggle-option-selected': !svc.configJsonView}\"\n                (click)=\"svc.toggleJSONView()\"\n                >\n                FORM\n              </span>\n              <div class=\"form-header-toggle\" (click)=\"svc.toggleJSONView()\">\n                <div\n                  class=\"form-toggle-switch\"\n                  [ngClass]=\"{'toggle-left': !svc.configJsonView, 'toggle-right': svc.configJsonView}\"\n                  >\n                  <div class=\"form-toggle-indicator\"></div>\n                  <div class=\"form-toggle-indicator\"></div>\n                </div>\n              </div>\n              <span\n                class=\"toggle-option-text\"\n                [ngClass]=\"{'toggle-option-selected': svc.configJsonView}\"\n                (click)=\"svc.toggleJSONView()\"\n                >\n                JSON\n              </span>\n            </div>\n          </div>\n          <div class=\"form-field-input-group\">\n            <div class=\"config-title-row\">\n              <span class=\"form-field-title\">{{isEditing ? 'Config Type' : 'Select a Config Type'}}</span>\n            </div>\n            <select\n              id=\"ConfigTypes\"\n              class=\"config-type-select\"\n              [(ngModel)]=\"formData.configTypeId\"\n              (change)=\"getSchema()\"\n              [ngClass]=\"{disabled: isEditing, error: errors['configTypeId']}\"\n              [disabled]=\"useStrictReadonlyForm || isEditing\"\n              >\n              <option value=\"\">Select A Type...</option>\n              @for (config of options; track config) {\n                <option\n                  [value]=\"config.id\">{{config.name}}\n                </option>\n              }\n            </select>\n            <lib-config-editor\n              [hidden]=\"configTypeEmpty\"\n              [schema]=\"selectedSchema\"\n              [(configData)]=\"formData.data\"\n              [showJsonView]=\"svc.configJsonView\"\n              [(configErrors)]=\"errors\"\n              [readOnly]=\"useStrictReadonlyForm\"\n              (configDataChange)=\"dataChanged($event)\"\n              #configEditor\n            ></lib-config-editor>\n          </div>\n        </lib-form-field-container>\n        <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n        <div [hidden]=\"!showMore\" class=\"form-group-column\">\n          @if (!hideTags) {\n            <lib-form-field-container\n              [title]=\"'Custom Tags'\"\n              [label]=\"'OPTIONAL'\"\n              class=\"form-field-advanced\"\n              >\n              <lib-custom-tags [(tags)]=\"formData.tags\" [readOnly]=\"useStrictReadonlyForm\"></lib-custom-tags>\n            </lib-form-field-container>\n          }\n        </div>\n      </div>\n      @if (showApiCalls) {\n        <div class=\"form-group-column two-fifths\">\n          <lib-form-field-container\n            [title]=\"'API Calls'\"\n            [label]=\"''\"\n            [headerActions]=\"apiOptions\"\n            (actionRequested)=\"apiActionRequested($event)\"\n            >\n            <div class=\"form-row\">\n              <input class=\"form-field-input\" [value]=\"apiCallURL\" readonly/>\n              <div class=\"url-copy icon-copy copy-text\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n            </div>\n            @if (formData) {\n              <lib-json-view [(data)]=\"_apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n            }\n          </lib-form-field-container>\n        </div>\n      }\n    </div>\n    @if (formView === 'raw') {\n      <div class=\"form-group-column\">\n        @if (formData) {\n          <lib-json-view [(data)]=\"formData\" [readOnly]=\"useStrictReadonlyForm\"></lib-json-view>\n        }\n      </div>\n    }\n  </div>\n</div>\n@if (isLoading || !dataInit) {\n  <lib-loading-indicator [isLoading]=\"isLoading || !dataInit\"></lib-loading-indicator>\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Inject, Injectable} from '@angular/core';\nimport {DataTableFilterService, FilterObj} from \"../../features/data-table/data-table-filter.service\";\nimport _, {isEmpty, unset} from \"lodash\";\nimport moment from \"moment\";\nimport {ListPageServiceClass} from \"../../shared/list-page-service.class\";\nimport {\n    TableColumnDefaultComponent\n} from \"../../features/data-table/column-headers/table-column-default/table-column-default.component\";\nimport {CallbackResults} from \"../../features/list-page-features/list-page-form/list-page-form.component\";\nimport {SchemaService} from \"../../services/schema.service\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../services/settings.service\";\nimport {CsvDownloadService} from \"../../services/csv-download.service\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../features/extendable/extensions-noop.service\";\nimport {Service} from \"../../models/service\";\nimport {TableCellNameComponent} from \"../../features/data-table/cells/table-cell-name/table-cell-name.component\";\nimport {Router} from \"@angular/router\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class JwtSignersPageService extends ListPageServiceClass {\n\n    private paging = this.DEFAULT_PAGING;\n\n    resourceType = 'external-jwt-signers';\n    selectedConfig: any = {};\n    modalType = '';\n\n    override menuItems = [\n        {name: 'Edit', action: 'update'},\n        {name: 'Delete', action: 'delete'},\n    ]\n\n    constructor(\n        private schemaSvc: SchemaService,\n        @Inject(SETTINGS_SERVICE) settings: SettingsService,\n        filterService: DataTableFilterService,\n        csvDownloadService: CsvDownloadService,\n        @Inject(SHAREDZ_EXTENSION) extService: ExtensionService,\n        protected override router: Router\n    ) {\n        super(settings, filterService, csvDownloadService, extService, router);\n    }\n\n    initTableColumns(): any {\n\n        const enabledHeaderComponentParams = {\n            filterType: 'SELECT',\n            enableSorting: true,\n            filterOptions: [\n                { label: 'All', value: '' },\n                { label: 'Enabled', value: true },\n                { label: 'Disabled', value: false },\n            ]\n        };\n        const createdAtHeaderComponentParams = {\n            filterType: 'DATETIME',\n        };\n        return [\n            {\n                colId: 'name',\n                field: 'name',\n                headerName: 'Name',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: this.headerComponentParams,\n                cellRenderer: TableCellNameComponent,\n                cellRendererParams: { pathRoot: this.basePath },\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.openEditForm(data?.data?.id);\n                },\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: true,\n                filter: true,\n                sortColumn: this.sort.bind(this)\n            },\n            {\n                colId: 'issuer',\n                field: 'issuer',\n                headerName: 'Issuer',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: this.headerComponentParams,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: true,\n                filter: true,\n                sortColumn: this.sort.bind(this),\n            },\n            {\n                colId: 'audience',\n                field: 'audience',\n                headerName: 'Audience',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: this.headerComponentParams,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: true,\n                filter: true,\n                sortColumn: this.sort.bind(this),\n            },\n            {\n                colId: 'enabled',\n                field: 'enabled',\n                headerName: 'Enabled',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: enabledHeaderComponentParams,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: true,\n                filter: true,\n                sortColumn: this.sort.bind(this),\n            },\n            {\n                colId: 'createdAt',\n                field: 'createdAt',\n                headerName: 'Created At',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: createdAtHeaderComponentParams,\n                valueFormatter: this.createdAtFormatter,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n            },\n            this.ID_COLUMN_DEF\n        ];\n    }\n\n    getData(filters?: FilterObj[], sort?: any) {\n        // we can customize filters or sorting here before moving on...\n        return super.getTableData(this.resourceType, this.paging, filters, sort)\n            .then((results: any) => {\n                return this.processData(results);\n            });\n    }\n\n    validate = (formData): Promise<CallbackResults> => {\n        return Promise.resolve({ passed: true});\n    }\n\n    private processData(results: any) {\n        if (!isEmpty(results?.data)) {\n            //pre-process data before rendering\n            results.data = this.addActionsPerRow(results);\n        }\n        return results;\n    }\n\n    private addActionsPerRow(results: any): any[] {\n        return results.data.map((row) => {\n            row.actionList = ['update', 'delete'];\n            return row;\n        });\n    }\n\n    public openUpdate(item?: any) {\n        this.modalType = 'jwt-signer';\n        if (item) {\n            this.selectedConfig = item;\n            this.selectedConfig.badges = [];\n            unset(this.selectedConfig, '_links');\n        } else {\n            this.selectedConfig = new Service();\n        }\n        this.sideModalOpen = true;\n    }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, Inject, OnInit} from '@angular/core';\nimport {DataTableFilterService} from \"../../features/data-table/data-table-filter.service\";\nimport {JwtSignersPageService} from \"./jwt-signers-page.service\";\nimport {TabNameService} from \"../../services/tab-name.service\";\nimport {ListPageComponent} from \"../../shared/list-page-component.class\";\nimport {ConsoleEventsService} from \"../../services/console-events.service\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {isEmpty} from \"lodash\";\nimport {ConfirmComponent} from \"../../features/confirm/confirm.component\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../features/extendable/extensions-noop.service\";\n\n\n@Component({\n    selector: 'lib-jwt-signers',\n    templateUrl: './jwt-signers-page.component.html',\n    styleUrls: ['./jwt-signers-page.component.scss'],\n    standalone: false\n})\nexport class JwtSignersPageComponent extends ListPageComponent implements OnInit {\n    title = 'JWT Signers'\n    tabs: { url: string, label: string }[] ;\n    isLoading: boolean;\n    formDataChanged = false;\n    _networkJwt: any;\n\n    constructor(\n        override svc: JwtSignersPageService,\n        filterService: DataTableFilterService,\n        private tabNames: TabNameService,\n        consoleEvents: ConsoleEventsService,\n        dialogForm: MatDialog,\n        @Inject(SHAREDZ_EXTENSION) private extService: ExtensionService,\n    ) {\n        super(filterService, svc, consoleEvents, dialogForm, extService);\n    }\n\n    override ngOnInit() {\n        this.tabs = this.tabNames.getTabs('authentication');\n        this.svc.refreshData = this.refreshData;\n        this.svc.getNetworkJwt().then((result) => {\n            if (isEmpty(result?.data)) {\n                return;\n            }\n            this._networkJwt = result.data[0].token;\n        });\n        super.ngOnInit();\n    }\n\n    headerActionClicked(action: string) {\n        switch (action) {\n            case 'add':\n                this.svc.openEditForm();\n                break;\n            case 'edit':\n                this.svc.openEditForm();\n                break;\n            case 'delete':\n                const selectedItems = this.rowData.filter((row) => {\n                    return row.selected;\n                });\n                this.checkForAssociatedEntities(selectedItems);\n                break;\n            default:\n        }\n    }\n\n    confirmAssociatedDelete(jwtSignersWithAssociations) {\n        const title = jwtSignersWithAssociations.length > 1 ? 'JWT Signers In Use' : 'JWT Signer In Use';\n        const label1 = jwtSignersWithAssociations.length > 1 ? 'The following external JWT signers are still in use by an auth policy and can not be deleted:' : 'The following external JWT signer is still in use by an auth policy and can not be deleted:';\n        const label2 = jwtSignersWithAssociations.length > 1 ? 'To delete these external JWT signers, first remove them from any associated auth policies.' : 'To delete this external JWT signer, first remove it from any associated auth policies.';\n        const names = jwtSignersWithAssociations.map((item) => {\n            return item.name;\n        });\n        const data = {\n            appendId: 'DeleteExtJWTSignersWithAssociations',\n            title: title,\n            message: label1,\n            submessage: label2,\n            bulletList: names,\n            confirmLabel: 'Ok',\n            imageUrl: 'assets/svgs/Growl_Error.svg',\n            showCancelLink: false\n        };\n        this.dialogRef = this.dialogForm.open(ConfirmComponent, {\n            data: data,\n            autoFocus: false,\n        });\n    }\n\n    tableAction(event: any) {\n        this.trackMenuAction(event?.action, event?.item);\n        switch(event?.action) {\n            case 'toggleAll':\n            case 'toggleItem':\n                this.itemToggled(event.item)\n                break;\n            case 'update':\n                this.svc.openEditForm(event.item?.id);\n                break;\n            case 'create':\n                this.svc.openEditForm();\n                break;\n            case 'delete':\n                const selectedItems = [event.item];\n                this.checkForAssociatedEntities(selectedItems);\n                break;\n            default:\n                break;\n        }\n    }\n\n    trackMenuAction(action: string, item: any) {\n        this.extService?.consoleActionTriggered?.emit({\n            action,\n            page: 'jwt-signer',\n            item,\n            type:'menu-action'\n        });\n    }\n    checkForAssociatedEntities(selectedItems) {\n        this.svc.getTableData('auth-policies', this.svc.DEFAULT_PAGING).then((policies) => {\n            const signersWithAssociations = [];\n            this.selectedItems.forEach((signer) => {\n                policies.data.forEach((policy) => {\n                    if (policy.primary.extJwt?.allowedSigners?.includes(signer.id)) {\n                        signersWithAssociations.push(signer);\n                    } else if (policy.secondary.requireExtJwtSigner === signer.id) {\n                        signersWithAssociations.push(signer);\n                    }\n                });\n            });\n            if (signersWithAssociations.length > 0) {\n                this.confirmAssociatedDelete(signersWithAssociations);\n            } else {\n                const label = selectedItems.length > 1 ? 'external JWT signer' : 'external JWT signers';\n                this.openBulkDelete(selectedItems, label);\n            }\n        });\n    }\n\n    deleteItem(item: any) {\n        this.openBulkDelete([item], 'jwt-signer');\n    }\n\n    closeModal(event: any) {\n        this.svc.sideModalOpen = false;\n        if(event?.refresh) {\n            this.refreshData();\n        }\n    }\n\n    dataChanged(event) {\n        this.formDataChanged = event;\n    }\n\n    get networkJwt() {\n        return encodeURIComponent(this._networkJwt);\n    }\n\n    get networkJwtFilename() {\n        let filename = 'network-jwt';\n        if (this.svc?.currentSettings?.selectedEdgeController) {\n            const urlObject = new URL(this.svc?.currentSettings?.selectedEdgeController);\n            filename = urlObject.hostname;\n        }\n        return filename;\n    }\n}\n","<div class=\"ziti-page-container ziti-configs-container\">\n  @if (_networkJwt) {\n    <a\n      class=\"network-jwt-link save-button\"\n      href=\"data:application/ziti-jwt;charset=utf-8,{{networkJwt}}\"\n      download=\"{{networkJwtFilename}}.jwt\"\n      >\n      Download Network JWT\n    </a>\n  }\n  <lib-list-page-header [title]=\"title\"\n    [tabs]=\"tabs\"\n    [showAdd]=\"!itemsSelected\"\n    [blockCreate]=\"headerBlockCreate\"\n    [blockDelete]=\"headerBlockDelete\"\n  (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n\n  <lib-data-table [tableId]=\"'ext-jwt-signers'\"\n    [noItemsReadonly]=\"headerBlockCreate\"\n    [accessDenied]=\"headerBlockRead\"\n    [rowData]=\"rowData\"\n    [isLoading]=\"isLoading\"\n    [columnDefinitions]=\"columnDefs\"\n    (actionRequested)=\"tableAction($event)\"\n    [startCount]=\"startCount\"\n    [endCount]=\"endCount\"\n    [totalCount]=\"totalCount\"\n    [emptyMsg]=\"'No Configurations defined, Click the plus to add a Configuration.'\"\n    [filterApplied]=\"filterApplied\"\n    [menuItems]=\"svc.menuItems\"\n    (gridReady)=\"gridReady($event)\"\n    >\n  </lib-data-table>\n</div>\n@if (isLoading) {\n  <lib-loading-indicator [isLoading]=\"isLoading\"></lib-loading-indicator>\n}\n","export class JwtSigner {\n    name: string = '';\n    audience: string = '';\n    issuer: string = '';\n    clientId: string = '';\n    claimsProperty: string = '';\n    enabled: boolean = true;\n    useExternalId: boolean = false;\n    externalAuthUrl: string = '';\n    kid: string = '';\n    scopes: string[] = [];\n    jwksEndpoint: string = undefined;\n    certPem: string = undefined;\n    tags: any = {};\n    targetToken: string = 'ACCESS';\n    enrollToCertEnabled: boolean = false;\n    enrollToTokenEnabled: boolean = false;\n};","import {Injectable, Inject} from '@angular/core';\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../services/ziti-data.service\";\nimport {defer, invert, isBoolean, isEmpty, isNil, keys} from \"lodash\";\nimport {GrowlerModel} from \"../../messaging/growler.model\";\nimport {GrowlerService} from \"../../messaging/growler.service\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../extendable/extensions-noop.service\";\nimport {ValidationService} from \"../../../services/validation.service\";\nimport {JwtSigner} from \"../../../models/jwt-signer\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class JwtSignerFormService {\n\n    items: any[] = [];\n    errors: any[] = [];\n    saveDisabled = false;\n\n    constructor(\n        @Inject(ZITI_DATA_SERVICE) private dataService: ZitiDataService,\n        @Inject(SHAREDZ_EXTENSION)private extService: ExtensionService,\n        private growlerService: GrowlerService,\n        private validationService: ValidationService\n    ) {\n    }\n\n    save(formData) {\n        const isUpdate = !isEmpty(formData.id);\n        const data: any = this.getJwtSignerDataModel(formData, isUpdate);\n        let prom;\n        if (isUpdate) {\n            prom = this.dataService.put('external-jwt-signers', data, formData.id, true);\n        } else {\n            prom = this.dataService.post('external-jwt-signers', data, true);\n        }\n\n        return prom.then(async (result: any) => {\n            const id = isUpdate ? formData.id : (result?.data?.id || result?.id);\n            let config = await this.dataService.getSubdata('external-jwt-signers', id, '').then((svcData) => {\n                return svcData.data;\n            });\n            return this.extService.formDataSaved(config).then((formSavedResult: any) => {\n                if (!formSavedResult) {\n                    return config;\n                }\n                const growlerData = new GrowlerModel(\n                    'success',\n                    'Success',\n                    `JWT Signer ${isUpdate ? 'Updated' : 'Created'}`,\n                    `Successfully ${isUpdate ? 'updated' : 'created'} JWT Signer: ${formData.name}`,\n                );\n                this.growlerService.show(growlerData);\n                return config;\n            }).catch((result) => {\n                return false;\n            });\n        }).catch((resp) => {\n            const errorMessage = this.dataService.getErrorMessage(resp);\n            const growlerData = new GrowlerModel(\n                'error',\n                'Error',\n                `Error ${isUpdate ? 'Updating' : 'Creating'} JWT Signer`,\n                errorMessage,\n            );\n            this.growlerService.show(growlerData);\n            throw resp;\n        })\n    }\n\n    getJwtSignerDataModel(formData, isUpdate) {\n        const saveModel = new JwtSigner();\n        const modelProperties = keys(saveModel);\n        modelProperties.forEach((prop) => {\n            switch(prop) {\n                default:\n                    saveModel[prop] = formData[prop];\n            }\n        });\n        return saveModel;\n    }\n\n}\n","import {Inject, Injectable} from '@angular/core';\nimport { OAuthService } from 'angular-oauth2-oidc';\nimport { HttpClient } from '@angular/common/http';\nimport {GrowlerModel} from \"../features/messaging/growler.model\";\nimport {GrowlerService} from \"../features/messaging/growler.service\";\nimport {APP_BASE_HREF} from \"@angular/common\";\nimport {NavigationEnd, Router} from \"@angular/router\";\nimport {SETTINGS_SERVICE} from \"./settings.service\";\nimport {SettingsServiceClass} from \"./settings-service.class\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class AuthService {\n    basePath = '/';\n    constructor(\n        private oauthService: OAuthService, private http: HttpClient,\n        private growlerService: GrowlerService,\n        private router: Router,\n        @Inject(SETTINGS_SERVICE) private settingsService: SettingsServiceClass\n    ) {\n        router.events.subscribe((event: any) => {\n            if (event instanceof NavigationEnd) {\n                const snapshot = this.router.routerState.snapshot.root;\n                const routeConfig = snapshot.firstChild?.routeConfig;\n                if (!routeConfig?.path) {\n                  return;\n                }\n                const pathSegments = routeConfig.path.split('/');\n                this.basePath = pathSegments[0];\n              }\n        });\n    }\n\n    public resetOAuthService(configKey = 'oauth_callback_config', tokenTypeKey = 'oauth_callback_target_token') {\n        const urlWithoutHash = window.location.href.split('?')[0];\n        // Update the URL without the hash\n        window.history.pushState({}, '', urlWithoutHash);\n        localStorage.removeItem(configKey);\n        localStorage.removeItem(tokenTypeKey);\n        localStorage.removeItem('oauth_callback_controller');\n        this.oauthService.logOut();\n        this.oauthService.configure({});\n    }\n\n    public configureOAuth(extJwtSigner, callbackUrl = '/callback', configKey?, tokenTypeKey?): Promise<any> {\n        let basePath = document.querySelector('base')?.getAttribute('href') || '/';\n        basePath = basePath.endsWith('/') ? basePath.slice(0, -1) : basePath;\n        const scopes = extJwtSigner.scopes || [];\n        const scope = scopes.join(' ');\n        const redirectPath = basePath + callbackUrl;\n        const oauthConfig = {\n            issuer: extJwtSigner.externalAuthUrl,\n            redirectUri: window.location.origin + redirectPath,\n            clientId: extJwtSigner.clientId,\n            responseType: 'code',\n            scope: scope,\n            showDebugInformation: true,\n            customQueryParams: {\n                audience: extJwtSigner.audience\n            },\n            strictDiscoveryDocumentValidation: false,\n            usePKCE: true,\n        };\n\n        localStorage.setItem(configKey || 'oauth_callback_config', JSON.stringify(oauthConfig));\n        if (extJwtSigner.targetToken) {\n            localStorage.setItem(tokenTypeKey || 'oauth_callback_target_token', extJwtSigner.targetToken);\n        }\n        // Pin the controller selected when the flow was initiated. The IdP round-trip reloads state,\n        // so the callback must exchange against this controller, not whatever is selected on return.\n        localStorage.setItem('oauth_callback_controller', this.settingsService.settings?.selectedEdgeController || '');\n        this.oauthService.configure(oauthConfig);\n        return this.oauthService.loadDiscoveryDocumentAndTryLogin().then((initSuccess) => {\n            if (initSuccess) {\n                this.login();\n            } else {\n                const growlerData = new GrowlerModel(\n                    'error',\n                    'Error',\n                    `Login Error`,\n                    'Unable to initialize OAuth login',\n                );\n                this.growlerService.show(growlerData);\n            }\n            return {success: initSuccess, message: ''};\n        }).catch((error) => {\n            const errorMessage = 'Unable to initialize OAuth login: ' + (error?.message ? error.message : error);\n            const growlerData = new GrowlerModel(\n                'error',\n                'Error',\n                `Login Error`,\n                errorMessage,\n            );\n            this.growlerService.show(growlerData);\n            this.resetOAuthService();\n            return {success: false, message: errorMessage};\n        });\n    }\n\n    login() {\n        this.oauthService.initLoginFlow();\n    }\n\n    logout() {\n        this.oauthService.logOut();\n    }\n\n    get accessToken() {\n        return this.oauthService.getAccessToken();\n    }\n\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {\n    Component, ElementRef,\n    EventEmitter, Inject,\n    Input,\n    OnDestroy,\n    OnInit, Output,\n    ViewChild,\n} from '@angular/core';\nimport {JwtSignerFormService} from \"./jwt-signer-form.service\";\nimport {SchemaService} from \"../../../services/schema.service\";\nimport {ProjectableForm} from \"../projectable-form.class\";\nimport {GrowlerService} from \"../../messaging/growler.service\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../extendable/extensions-noop.service\";\n\nimport semver from 'semver';\nimport {cloneDeep, defer, delay, forOwn, get, keys, invert, invoke, isEmpty, isNil, unset, trim} from 'lodash';\nimport {GrowlerModel} from \"../../messaging/growler.model\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../../services/settings.service\";\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../services/ziti-data.service\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {JwtSigner} from \"../../../models/jwt-signer\";\nimport {Location} from \"@angular/common\";\nimport {ValidationService} from \"../../../services/validation.service\";\nimport {OAuthErrorEvent, OAuthService} from \"angular-oauth2-oidc\";\nimport {LoginServiceClass, ZAC_LOGIN_SERVICE} from \"../../../services/login-service.class\";\nimport {AuthService} from \"../../../services/auth.service\";\nimport { HttpClient } from \"@angular/common/http\";\nimport {MatDialog} from \"@angular/material/dialog\";\n\n@Component({\n    selector: 'lib-configuration',\n    templateUrl: './jwt-signer-form.component.html',\n    styleUrls: ['./jwt-signer-form.component.scss'],\n    standalone: false\n})\nexport class JwtSignerFormComponent extends ProjectableForm implements OnInit, OnDestroy {\n\n    @Input() override errors: any = {};\n    @Output() close: EventEmitter<void> = new EventEmitter<void>();\n\n    formView = 'simple';\n    options: any[] = [];\n    isEditing = !isEmpty(this.formData.id);\n    formDataInvalid = false;\n    editMode = false;\n    items: any = [];\n    settings: any = {};\n    fileSelectOpening = false;\n    signatureMethod = \"JWKS_ENDPOINT\";\n    oauthLoading = false;\n    configKey = 'oauth_test_callback_config';\n    tokenTypeKey = 'oauth_test_callback_token_type';\n    oidcVerified = false;\n    oidcErrorMessageSource;\n    oidcErrorMessageDetail;\n    oidcErrorMessageDetail2;\n    oidcErrorMessageDetail3;\n    jwksValidationError;\n    oidcAuthTokenClaims;\n    oidcClaims;\n    overrideFormData;\n    override usePreviousLocation = false\n    override entityType = 'external-jwt-signers';\n    override entityClass = JwtSigner;\n    showAutoEnrollHelpModal = false;\n\n    @ViewChild('fileSelect') filterInput: ElementRef;\n    @ViewChild('oidcVerification') oidcVerification: ElementRef;\n\n    constructor(\n        public svc: JwtSignerFormService,\n        private schemaSvc: SchemaService,\n        growlerService: GrowlerService,\n        @Inject(SHAREDZ_EXTENSION) extService: ExtensionService,\n        @Inject(SETTINGS_SERVICE) protected override settingsService: SettingsService,\n        @Inject(ZITI_DATA_SERVICE) override zitiService: ZitiDataService,\n        protected override router: Router,\n        protected override route: ActivatedRoute,\n        location: Location,\n        private validationService: ValidationService,\n        private authService: AuthService,\n        private oauthService: OAuthService,\n        private http: HttpClient,\n        @Inject(ZAC_LOGIN_SERVICE) private loginService: LoginServiceClass,\n        dialogForm: MatDialog,\n\n    ) {\n        super(growlerService, extService, zitiService, router, route, location, settingsService);\n    }\n\n    override ngOnInit(): void {\n        super.ngOnInit();\n        this.settingsService.settingsChange.subscribe((results:any) => {\n            this.settings = results;\n        });\n        if (window.location.href.indexOf('test-auth') > 0) {\n            this.handleOAuthCallback();\n        }\n    }\n\n    override ngAfterViewInit() {\n        super.ngAfterViewInit(true);\n    }\n\n    protected override entityUpdated() {\n        super.entityUpdated();\n        if (!isEmpty(this.overrideFormData)) {\n            this.formData = this.overrideFormData;\n            this.overrideFormData = undefined;\n        }\n    }\n\n    ngOnDestroy(): void {\n        this.clearForm();\n    }\n\n    headerActionRequested(event) {\n        switch(event.name) {\n            case 'save':\n                this.save(event);\n                break;\n            case 'close':\n                this.returnToListPage();\n                break;\n            case 'toggle-view':\n                this.formView = event.data;\n                break;\n        }\n    }\n\n    multiActionRequested(action) {\n        switch (action.id) {\n            case 'save':\n                this.save();\n                break;\n            case 'delete':\n                this.deleteEntity();\n                break;\n        }\n    }\n\n    checkExternalIdToggle() {\n        if (isEmpty(this.formData.claimsProperty)) {\n            this.formData.useExternalId = false;\n        } else {\n            this.formData.useExternalId = true;\n        }\n    }\n\n    override clear() {\n        this.formData.configTypeId = '';\n        this.clearForm();\n    }\n\n    clearForm() {\n        this.items.forEach((item: any) => {\n            if (item?.component) item.component.destroy();\n        });\n        this.errors = {};\n        this.items = [];\n        this.formData = {};\n        if (this.subscription) this.subscription.unsubscribe();\n    }\n\n    async save(event?: any) {\n        if (!this.canSaveByPermissions()) {\n            return;\n        }\n        if(!this.validate()) {\n            return;\n        }\n        const tagVals = this.getTagValues();\n        if (!isEmpty(tagVals)) {\n            forOwn(tagVals, (value, key) => {\n                this.formData.tags[key] = value;\n            });\n        }\n        const apiData = this.apiData;\n        this.isLoading = true;\n        this.svc.save(apiData).then((result) => {\n            if (this.isModal) {\n                this.closeModal(true, true);\n                return;\n            }\n            this.initData = this.formData;\n            this._dataChange = false;\n            this.returnToListPage();\n        }).finally(() => {\n            this.isLoading = false;\n        });\n    }\n\n    validate() {\n        this.errors = {};\n        const labels = [];\n        const growlers = [];\n        if (isEmpty(this.formData.name)) {\n            this.errors.name = true;\n            labels.push('Name');\n        }\n        if (isEmpty(this.formData.issuer)) {\n            this.errors.issuer = true;\n            labels.push('Issuer');\n        }\n        if (isEmpty(this.formData.certPem) && isEmpty(this.formData.jwksEndpoint)) {\n            this.errors.certPem = true;\n            this.errors.jwksEndpoint = true;\n            labels.push('Cert PEM or JWKS Endpoint');\n        }\n        if (this.formData.useExternalId && isEmpty(this.formData.claimsProperty)) {\n            this.errors.claimsProperty = true;\n            labels.push('Claims Property');\n        }\n        if (!isEmpty(this.errors)) {\n            let missingFields = labels.join(', ');\n            growlers.push(new GrowlerModel(\n                'error',\n                'Invalid',\n                `Missing Form Data`,\n                `Please enter a value for the highlighted fields: ${missingFields}`,\n            ));\n        }\n        if (!isEmpty(growlers)) {\n            growlers.forEach((growlerData) => {\n                this.growlerService.show(growlerData);\n            });\n            return isEmpty(this.errors);\n        }\n        if (this.signatureMethod === 'JWKS_ENDPOINT') {\n            if (isEmpty(this.formData.jwksEndpoint)) {\n                this.errors.jwksEndpoint = true;\n                growlers.push(new GrowlerModel(\n                    'error',\n                    'Invalid',\n                    `Missing JWKS Endpoint`,\n                    `Please enter a URI for the JWKS Endpoint.`,\n                ));\n            } else if (!this.validationService.isValidURI(this.formData.jwksEndpoint)) {\n                this.errors.jwksEndpoint = true;\n                growlers.push(new GrowlerModel(\n                    'error',\n                    'Invalid',\n                    `JWKS Endpoint Invalid`,\n                    `The value you have entered for the JWKS Endpoint field is invalid. Please check your input and try again.`,\n                ));\n            }\n        } else if (this.signatureMethod === 'CERT_PEM') {\n            if (isEmpty(this.formData.certPem)) {\n                this.errors.certPem = true;\n                growlers.push(new GrowlerModel(\n                    'error',\n                    'Invalid',\n                    `Missing Cert PEM`,\n                    `Please enter a URI for the JWKS Endpoint.`,\n                ));\n            } else if (!this.validationService.isValidPEM(this.formData.certPem?.trim())) {\n                this.errors.certPem = true;\n                growlers.push(new GrowlerModel(\n                    'error',\n                    'Invalid',\n                    `Cert PEM Invalid`,\n                    `The Cert PEM you entered is invalid. Please check your input and try again.`,\n                ));\n            }\n        }\n\n        growlers.forEach((growlerData) => {\n            this.growlerService.show(growlerData);\n        });\n        return isEmpty(this.errors);\n    }\n\n    get showTokenType() {\n        return !isEmpty(this.settingsService?.zitiSemver) && semver.gte(this.settingsService?.zitiSemver, '1.4.0');\n    }\n\n    get showAutoEnrollment() {\n        if (isEmpty(this.settingsService?.zitiSemver)) {\n            return false;\n        }\n        const parsedVersion = semver.parse(this.settingsService.zitiSemver);\n        return parsedVersion?.major >= 2;\n    }\n\n    get targetToken() {\n        if (this.formData && !this.formData.targetToken) {\n            this.formData.targetToken = 'ACCESS';\n            this.initData = cloneDeep(this.formData);\n        }\n        return this.formData.targetToken;\n    }\n\n    set targetToken(val) {\n        if (!this.formData) {\n            return;\n        }\n        this.formData.targetToken = val;\n    }\n\n    get apiCallURL() {\n        return this.settings.selectedEdgeController + '/edge/management/v1/external-jwt-signers' + (this.formData.id ? `/${this.formData.id}` : '');\n    }\n\n    get apiData(): any {\n        const data: any = {\n            name: this.formData.name || '',\n            audience: this.formData.audience || '',\n            issuer: this.formData.issuer || '',\n            clientId: this.formData.clientId || '',\n            certPem: this.formData.certPem || '',\n            claimsProperty: this.formData.claimsProperty || '',\n            enabled: this.formData.enabled,\n            useExternalId: this.formData.useExternalId,\n            kid: this.formData.kid || '',\n            externalAuthUrl: this.formData.externalAuthUrl || '',\n            scopes: this.formData.scopes || [],\n            tags: this.formData.tags || {},\n            enrollToCertEnabled: this.formData.enrollToCertEnabled,\n            enrollToTokenEnabled: this.formData.enrollToTokenEnabled\n        };\n        if (!isEmpty(this.formData.jwksEndpoint)) {\n            data.jwksEndpoint = this.formData.jwksEndpoint;\n        }\n        if (!isEmpty(this.formData.targetToken) && this.showTokenType) {\n            data.targetToken = this.formData.targetToken;\n        }\n        if (!isEmpty(this.formData.id)) {\n            data.id = this.formData.id;\n        }\n        if (this.formData.id) {\n            data.id = this.formData.id;\n        }\n        if (this.signatureMethod === 'JWKS_ENDPOINT') {\n            data.certPem = undefined;\n        } else {\n            data.jwksEndpoint = undefined;\n        }\n        this._apiData = data;\n        return this._apiData;\n    }\n\n    _apiData: any = {};\n    set apiData(data) {\n        this._apiData = data;\n    }\n\n    dataChanged(event) {\n        this._apiData = cloneDeep(this.apiData);\n    }\n\n    toggleEnabled() {\n        if (this.useStrictReadonlyForm) {\n            return;\n        }\n        this.formData.enabled = !this.formData.enabled;\n    }\n\n    toggleUseExternalId() {\n        if (this.useStrictReadonlyForm) {\n            return;\n        }\n        this.formData.useExternalId = !this.formData.useExternalId;\n        if (!this.formData.useExternalId) {\n            this.errors.claimsProperty = false;\n        }\n    }\n\n    toggleEnrollToCertEnabled() {\n        this.formData.enrollToCertEnabled = !this.formData.enrollToCertEnabled;\n    }\n\n    toggleEnrollToTokenEnabled() {\n        this.formData.enrollToTokenEnabled = !this.formData.enrollToTokenEnabled;\n    }\n\n    showAutoEnrollHelp() {\n        this.showAutoEnrollHelpModal = true;\n    }\n\n    trimWhitespaceScopes() {\n        this.formData.scopes = this.formData?.scopes.map(trim);\n    }\n\n    radioKeyDownHandler(event: any) {\n        if (this.useStrictReadonlyForm) {\n            return;\n        }\n        switch (event.key) {\n            case 'ArrowLeft':\n                this.signatureMethod = 'JWKS_ENDPOINT';\n                break;\n            case 'ArrowRight':\n                this.signatureMethod = 'CERT_PEM';\n                break;\n            default:\n                break;\n        }\n    }\n\n    selectSignatureMethod(method) {\n        if (this.useStrictReadonlyForm) {\n            return;\n        }\n        this.signatureMethod = method;\n    }\n\n    openFileSelect(event: any) {\n        if (this.useStrictReadonlyForm) {\n            return;\n        }\n        this.filterInput.nativeElement.click();\n        this.fileSelectOpening = true;\n        delay(() => {\n            this.fileSelectOpening = false;\n        }, 1000);\n    }\n\n    selectPemFile(event: any) {\n        if (this.useStrictReadonlyForm) {\n            return;\n        }\n        const file: File = event?.target?.files[0];\n\n        if (file) {\n            const fileReader = new FileReader();\n            fileReader.onload = (fileLoadedEvent) => {\n                const textFromSelectedFile: any = fileLoadedEvent.target?.result;\n                if (!this.validationService.isValidPEM(textFromSelectedFile?.trim())) {\n                    this.errors.certPem = true;\n                    const growlerData = new GrowlerModel(\n                        'error',\n                        'Invalid',\n                        `Cert PEM Invalid`,\n                        `The file selected for the Cert PEM field is invalid. Please check your input and try again.`,\n                    );\n                    this.growlerService.show(growlerData);\n                    this.formData.certPem = 'Invalid PEM. Please select or enter a valid PEM certificate.';\n                } else {\n                    unset(this.errors, 'certPem');\n                    this.formData.certPem = textFromSelectedFile;\n                }\n            };\n            fileReader.readAsText(file, \"UTF-8\");\n        }\n    }\n\n    apiActionRequested(action) {\n        switch (action.id) {\n            case 'cli':\n                this.copyCLICommand();\n                break;\n            case 'curl':\n                this.copyCURLCommand();\n                break;\n        }\n    }\n\n    copyCLICommand() {\n        const command = `ziti edge ${this.formData.id ? 'update' : 'create'} ext-jwt-signer ${this.formData.id ? `'${this.formData.id}'` : ''} ${this.formData.id ? '--name' : ''} '${this.formData.name}' ${this.formData.id ? '--issuer' : ''} '${this.formData.issuer}' --audience '${this.formData.audience}' --cert-pem '${this.formData.certPem}' --claims-property '${this.formData.claimsProperty}' --external-auth-url '${this.formData.externalAuthUrl}' --kid '${this.formData.kid}'`;\n\n        navigator.clipboard.writeText(command);\n        const growlerData = new GrowlerModel(\n            'success',\n            'Success',\n            `Text Copied`,\n            `CLI command copied to clipboard`,\n        );\n        this.growlerService.show(growlerData);\n    }\n\n    copyCURLCommand() {\n        const command = `curl '${this.apiCallURL}' \\\\\n    ${this.formData.id ? '--request PATCH \\\\' : '\\\\'}\n    -H 'accept: application/json' \\\\\n    -H 'content-type: application/json' \\\\\n    -H 'zt-session: ${this.settings.session.id}' \\\\\n    --data-raw '${JSON.stringify(this.apiData)}'`;\n\n        navigator.clipboard.writeText(command);\n        const growlerData = new GrowlerModel(\n            'success',\n            'Success',\n            `Text Copied`,\n            `CURL command copied to clipboard`,\n        );\n        this.growlerService.show(growlerData);\n    }\n\n    scopesOnKeyup(event: any) {\n        const key = event.key?.toLowerCase();\n        if (key === \" \" || key === 'enter') {\n            event.preventDefault();\n            event.stopPropagation();\n            const element = event.target as HTMLElement;\n            element.blur();\n            element.focus();\n        }\n        defer(() => {\n            this.trimWhitespaceScopes();\n        })\n    }\n\n    get callbackURL() {\n        return window.location.origin + (this.baseHref + this.loginService.callbackRoute).replace('//', '/');\n    }\n\n    copyCallbackURL() {\n        navigator.clipboard.writeText(this.callbackURL);\n        this.growlerService.show(\n            new GrowlerModel('success', 'Success', 'Copied to clipboard', 'JWT based auth domain has been copied to your clipboard')\n        );\n    }\n\n    async testOIDCAuthentication() {\n        this.oauthLoading = true;\n        this.oidcAuthTokenClaims = undefined;\n        this.oidcErrorMessageSource = undefined;\n        this.oidcErrorMessageDetail = undefined;\n        this.oidcErrorMessageDetail2 = undefined;\n        this.oidcErrorMessageDetail3 = undefined;\n        this.jwksValidationError = undefined;\n        const jwksValid = await this.testJWKS();\n        if (!jwksValid) {\n            this.oidcVerified = false;\n            this.oauthLoading = false\n            return;\n        }\n        const callbackParams = `${this.loginService.callbackRoute}?redirectRoute=jwt-signers/${this.formData.id}/test-auth`;\n        localStorage.setItem('oidc_callback_test_config', JSON.stringify(this.formData));\n        this.authService.configureOAuth(this.formData, callbackParams).then((result) => {\n            if (result.success) {\n                delay(() => {\n                    this.oauthLoading = false;\n                }, 4000);\n            } else {\n                delay(() => {\n                    this.oidcErrorMessageDetail = result.message;\n                    this.oidcErrorMessageSource = 'OAuth Configuration Error';\n                    if (this.jwksValidationError) {\n                        this.oidcErrorMessageDetail2 = this.jwksValidationError;\n                    }\n                    this.oauthLoading = false;\n                    this.oidcVerified = false;\n                }, 700);\n\n            }\n        });\n    }\n\n    handleOAuthCallback() {\n        this.showMore = true;\n        const errorMessageDetail = this.route.snapshot.queryParamMap.get('oidcAuthErrorMessageDetail');\n        const errorMessageSource = this.route.snapshot.queryParamMap.get('oidcAuthErrorMessageSource');\n        const oidcAuthTokenClaims = this.route.snapshot.queryParamMap.get('oidcAuthTokenClaims');\n        const result = this.route.snapshot.queryParamMap.get('oidcAuthResult');\n        const formData = localStorage.getItem('oidc_callback_test_config');\n        if (!isEmpty(formData)) {\n            this.overrideFormData = JSON.parse(formData);\n        }\n        if (result === 'success') {\n            this.oidcVerified = true;\n            if (oidcAuthTokenClaims) {\n                this.oidcAuthTokenClaims = JSON.parse(oidcAuthTokenClaims);\n            }\n        } else {\n            this.oidcErrorMessageDetail = errorMessageDetail;\n            this.oidcErrorMessageSource = errorMessageSource;\n            if (oidcAuthTokenClaims) {\n                this.oidcAuthTokenClaims = JSON.parse(oidcAuthTokenClaims);\n                this.oidcErrorMessageDetail3 = 'Check the list of auth token claims below to confirm if your provider is returning the correct details.'\n                this.validateTokenClaims(this.oidcAuthTokenClaims, this.overrideFormData);\n            }\n        }\n    }\n\n    validateTokenClaims(token, formData) {\n        if (!token.aud) {\n            this.errors.audience = true;\n            this.oidcErrorMessageDetail2 = 'Audience is missing from token claims'\n        } else {\n            let audError = true;\n            token.aud.forEach((audItem) => {\n                if (audItem === formData.audience) {\n                    audError = false;\n                }\n            });\n            if (audError) {\n                this.errors.audience = true;\n                this.oidcErrorMessageDetail2 = 'Audience in token does not match External JWT Signer configuration.'\n            }\n        }\n    }\n\n    async testJWKS() {\n        this.errors.jwksEndpoint = false;\n        try {\n            const response: any = await this.http.get(this.formData.jwksEndpoint).toPromise().catch((error) => {\n                this.oidcErrorMessageSource = 'JWKS Endpoint Error';\n                this.oidcErrorMessageDetail = `HTTP error returned. Status: ${error.status}. Message: ${error.message}`;\n                this.errors.jwksEndpoint = true;\n                return false;\n            });\n            if (response) {\n                // Basic structural validation\n                if (!response?.keys || !Array.isArray(response?.keys)) {\n                    this.oidcErrorMessageSource = 'JWKS Endpoint Error';\n                    this.oidcErrorMessageDetail = `Invalid JWKS: \"keys\" property missing or not an array`;\n                    this.errors.jwksEndpoint = true;\n                } else {\n                    const logError: any = get(this.oauthService, 'logger.error');\n                    this.oauthService['logger'].error = (...args) => {\n                        this.jwksValidationError = '';\n                        args.forEach((arg) => {\n                            this.jwksValidationError += arg + ' ';\n                        });\n                        logError.apply(this, args);\n                    }\n                    const result = invoke(this.oauthService, 'validateDiscoveryDocument', response);\n                }\n            }\n        } catch (error: any) {\n            this.oidcErrorMessageSource = 'JWKS Endpoint Error';\n            this.oidcErrorMessageDetail = `${error.message}`;\n            this.errors.jwksEndpoint = true;\n        }\n        const growlerData = new GrowlerModel(\n            'error',\n            'Invalid',\n            this.oidcErrorMessageSource,\n            this.oidcErrorMessageDetail,\n        );\n        if (this.errors.jwksEndpoint) {\n            this.growlerService.show(growlerData);\n        }\n        return !this.errors.jwksEndpoint;\n    }\n}\n","<div class=\"projectable-form-wrapper\"\n  (keyup.enter)=\"save($event)\"\n  (keyup.escape)=\"closeModal(false)\"\n  tabindex=\"0\"\n  >\n  <lib-form-header\n    [data]=\"formData\"\n    [title]=\"(formData.id ? 'JWT Signer Details' : 'Create JWT Signer')\"\n    [moreActions]=\"moreActions\"\n    [multiActions]=\"multiActions\"\n    (actionRequested)=\"headerActionRequested($event)\"\n    (multiActionRequested)=\"multiActionRequested($event)\"\n    [(formView)]=\"formView\"\n    [saveDisabled]=\"svc.saveDisabled || formDataInvalid || formPermissionSaveDisabled\"\n    [saveTooltip]=\"formPermissionSaveTooltip\"\n    [strictReadonlyUi]=\"useStrictReadonlyForm\"\n  ></lib-form-header>\n  <div class=\"jwt-signer-form-container projectable-form-container\" #scrollContainer>\n    <div class=\"projectable-form-main-column form-group-row\" [hidden]=\"formView !== 'simple'\">\n      <div class=\"form-group-column three-fifths\">\n        <lib-form-field-container\n          [title]=\"'Name'\"\n          [label]=\"useStrictReadonlyForm ? '' : 'REQUIRED'\"\n          >\n         @if (!useStrictReadonlyForm) {\n            <input class=\"form-field-input\" [(ngModel)]=\"formData.name\" [ngClass]=\"{error: errors['name']}\" placeholder=\"Name this JWT Signer\" #nameFieldInput/>\n          } @else {\n            <div class=\"form-field-readonly-value\">{{ formData.name }}</div>\n          }\n        </lib-form-field-container>\n        <lib-form-field-container\n          [layout]=\"'column'\"\n          [showHeader]=\"false\"\n          >\n          <div class=\"form-field-label-container\">\n            <div class=\"form-field-header\">\n              <div class=\"form-field-title-container\">\n                <span class=\"form-field-title\">Issuer</span>\n                <div\n                  class=\"form-field-info infoicon\"\n                  matTooltip=\"The &quot;issuer&quot; field on the JWT Signer must match the &quot;iss&quot; field on the JWT\"\n                  matTooltipPosition=\"below\"\n                ></div>\n              </div>\n              <span class=\"form-field-label\" >{{ useStrictReadonlyForm ? '' : 'REQUIRED' }}</span>\n            </div>\n            <input class=\"form-field-input\" placeholder=\"Enter issuer\" [(ngModel)]=\"formData.issuer\" [ngClass]=\"{error: errors['issuer']}\" [disabled]=\"useStrictReadonlyForm\" />\n          </div>\n          <div class=\"form-field-label-container\">\n            <div class=\"form-field-title-container\">\n              <span class=\"form-field-title\">Audience</span>\n              <div\n                class=\"form-field-info infoicon\"\n                matTooltip=\"The expected &quot;aud&quot; (audience) field on the JWT\"\n                matTooltipPosition=\"below\"\n              ></div>\n            </div>\n            <input class=\"form-field-input\" placeholder=\"Enter audience\" [(ngModel)]=\"formData.audience\" [disabled]=\"useStrictReadonlyForm\" />\n          </div>\n          <div class=\"form-field-row\">\n            <div class=\"form-field-label-container\">\n              <div class=\"form-field-title-container\">\n                <span class=\"form-field-title\">Claims Property</span>\n                <div\n                  class=\"form-field-info infoicon\"\n                  matTooltip=\"The field on the JWT for mapping to an identity. Matches the identity's id or externalId if &quot;Use External Id&quot; is set to true. Defaults to &quot;sub&quot;\"\n                  matTooltipPosition=\"below\"\n                ></div>\n              </div>\n              <input class=\"form-field-input\" placeholder=\"Enter claims property\" [(ngModel)]=\"formData.claimsProperty\" (keyup)=\"checkExternalIdToggle()\" [ngClass]=\"{error: errors['claimsProperty']}\" [disabled]=\"useStrictReadonlyForm\" />\n            </div>\n            <div class=\"form-field-label-container\">\n              <div class=\"form-field-header\">\n                <div class=\"form-field-title-container\">\n                  <div class=\"config-container-label\" style=\"font-weight: 600; font-size: 14px;\">External ID</div>\n                  <div\n                    class=\"form-field-info infoicon\"\n                    matTooltip=\"If enabled, will match the &quot;claimsProperty&quot; to an identity's &quot;externalId&quot; field. If false, it will match to the identity's id field.\"\n                    matTooltipPosition=\"below\"\n                  ></div>\n                </div>\n              </div>\n              <div class=\"config-item\">\n                <div class=\"config-container toggle-container\">\n                  <div class=\"form-field-title-container\">\n                    <div class=\"config-container-label\">Use External ID</div>\n                  </div>\n                  <div\n                    (click)=\"!useStrictReadonlyForm && toggleUseExternalId()\"\n                    [ngClass]=\"{ on: formData.useExternalId, 'toggle-readonly': useStrictReadonlyForm }\"\n                    class=\"toggle\"\n                    >\n                    <span [hidden]=\"!formData.useExternalId\" class=\"on-label\">YES</span>\n                    <span [hidden]=\"formData.useExternalId\" class=\"off-label\">NO</span>\n                    <div class=\"switch\"></div>\n                  </div>\n                </div>\n              </div>\n            </div>\n          </div>\n        </lib-form-field-container>\n        <lib-form-field-container\n          [showHeader]=\"false\"\n          >\n          <div class=\"form-field-label-container\">\n            <div class=\"form-field-title-container\">\n              <span class=\"form-field-title\">Client ID</span>\n              <div\n                class=\"form-field-info infoicon\"\n                matTooltip=\"The client id to use when authenticating to the IDP\"\n                matTooltipPosition=\"below\"\n              ></div>\n            </div>\n              <input class=\"form-field-input\" placeholder=\"Enter client ID\" [(ngModel)]=\"formData.clientId\" [disabled]=\"useStrictReadonlyForm\" />\n          </div>\n          <div class=\"form-field-label-container\">\n            <div class=\"form-field-title-container\">\n              <span class=\"form-field-title\">External Auth Url</span>\n              <div\n                class=\"form-field-info infoicon\"\n                matTooltip=\"The URL that users are directed to, to obtain a JWT\"\n                matTooltipPosition=\"below\"\n              ></div>\n            </div>\n            <input class=\"form-field-input\" placeholder=\"Enter external auth URL\" [(ngModel)]=\"formData.externalAuthUrl\" [disabled]=\"useStrictReadonlyForm\" />\n          </div>\n          <div class=\"form-field-label-container\">\n            <div class=\"form-field-title-container\">\n              <span class=\"form-field-title\">Scopes</span>\n              <div\n                class=\"form-field-info infoicon\"\n                matTooltip=\"Enter as a comma or space seperated list of claims/permissions\"\n                matTooltipPosition=\"below\"\n              ></div>\n            </div>\n            <lib-chips-input\n              (keyup)=\"scopesOnKeyup($event)\"\n              [(ngModel)]=\"formData.scopes\"\n              [allowDuplicate]=\"false\"\n              placeholder=\"Enter scopes\"\n              [addOnBlur]=\"true\"\n              separator=\",\"\n              [disabled]=\"useStrictReadonlyForm\"\n            ></lib-chips-input>\n          </div>\n        </lib-form-field-container>\n        @if (showAutoEnrollment) {\n          <lib-form-field-container\n            [title]=\"'Auto Enrollment'\"\n            [helpText]=\"'Click for more information'\"\n            (helpClicked)=\"showAutoEnrollHelp()\"\n            >\n            <div class=\"form-field-row\">\n              <div class=\"config-item\">\n                <div class=\"config-container toggle-container\">\n                  <div class=\"config-container-label\">Auto-Enroll to Cert</div>\n                  <div\n                    (click)=\"toggleEnrollToCertEnabled()\"\n                    [ngClass]=\"{ on: formData.enrollToCertEnabled, 'toggle-readonly': useStrictReadonlyForm }\"\n                    class=\"toggle\"\n                    >\n                    <span [hidden]=\"!formData.enrollToCertEnabled\" class=\"on-label\">YES</span>\n                    <span [hidden]=\"formData.enrollToCertEnabled\" class=\"off-label\">NO</span>\n                    <div class=\"switch\"></div>\n                  </div>\n                </div>\n              </div>\n              <div class=\"config-item\">\n                <div class=\"config-container toggle-container\">\n                  <div class=\"config-container-label\">Auto-Enroll to Token</div>\n                  <div\n                    (click)=\"toggleEnrollToTokenEnabled()\"\n                    [ngClass]=\"{ on: formData.enrollToTokenEnabled, 'toggle-readonly': useStrictReadonlyForm }\"\n                    class=\"toggle\"\n                    >\n                    <span [hidden]=\"!formData.enrollToTokenEnabled\" class=\"on-label\">YES</span>\n                    <span [hidden]=\"formData.enrollToTokenEnabled\" class=\"off-label\">NO</span>\n                    <div class=\"switch\"></div>\n                  </div>\n                </div>\n              </div>\n            </div>\n          </lib-form-field-container>\n        }\n        <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n        @if (showMore && showTokenType) {\n          <lib-form-field-container\n            [title]=\"'Target Token Type'\"\n            [label]=\"'Required'\"\n            [helpText]=\"'The target token type. Can be either Access or ID'\"\n            class=\"form-field-advanced\"\n            >\n            <select\n              [(ngModel)]=\"targetToken\"\n              id=\"authPolicyId\"\n              class=\"form-field-dropdown\"\n              [disabled]=\"useStrictReadonlyForm\"\n              >\n              <option value=\"ACCESS\">Access</option>\n              <option value=\"ID\">ID</option>\n            </select>\n          </lib-form-field-container>\n        }\n        <div [hidden]=\"!showMore\" class=\"form-group-column\">\n          <lib-form-field-container\n            [title]=\"'Verify OIDC Authentication'\"\n            class=\"form-field-advanced\"\n            [ngClass]=\"{'formFieldError': !oidcVerified && oidcErrorMessageDetail, 'formFieldSuccess': oidcVerified}\"\n            >\n            <div class=\"form-field-row\" #oidcVerification>\n              <div class=\"form-field-label-container\">\n                <div class=\"form-field-title-container\">\n                  <div class=\"form-field-title\">Callback URL</div>\n                  <div\n                    class=\"form-field-info infoicon\"\n                    matTooltip=\"This URL must be added to the list of allowed callback URLs in your OAuth provider configuration\"\n                    matTooltipPosition=\"below\"\n                  ></div>\n                </div>\n                <div class=\"copy-link-container\">\n                  <pre class=\"read-only-2\" (click)=\"copyCallbackURL()\">{{ callbackURL }}</pre>\n                  <div class=\"copy-button\" (click)=\"copyCallbackURL()\"></div>\n                </div>\n              </div>\n              @if (!useStrictReadonlyForm) {\n              <div class=\"test-oauth-button\"\n                [ngClass]=\"{'oidc-verified': oidcVerified}\"\n                (click)=\"testOIDCAuthentication()\"\n                >\n                {{oidcVerified ? 'Verified' : 'Authenticate' }}\n                @if (oauthLoading) {\n                  <div class=\"spinner\"></div>\n                }\n                @if (oidcVerified) {\n                  <input type=\"checkbox\" [disabled]=\"true\" [checked]=\"true\" class=\"success-check\">\n                }\n              </div>\n              }\n            </div>\n            @if (oidcErrorMessageDetail) {\n              <div class=\"oidc-error-message-container\">\n                <code class=\"oidc-error-message-source\">{{oidcErrorMessageSource}}: </code>\n                <code class=\"oidc-error-message-detail\">{{oidcErrorMessageDetail}}</code>\n                @if (oidcErrorMessageDetail2) {\n                  <code class=\"oidc-error-message-detail2\">{{oidcErrorMessageDetail2}}</code>\n                }\n                @if (oidcErrorMessageDetail3) {\n                  <code class=\"oidc-error-message-detail2\">{{oidcErrorMessageDetail3}}</code>\n                }\n              </div>\n            }\n            @if (oidcAuthTokenClaims) {\n              <div class=\"oidc-token-claims-container\">\n                <code class=\"oidc-token-claims-title\">OAuth Token Claims: </code>\n                <lib-json-view [showLineNumbers]=\"false\" [(data)]=\"oidcAuthTokenClaims\" [readOnly]=\"useStrictReadonlyForm\"></lib-json-view>\n              </div>\n            }\n          </lib-form-field-container>\n          <lib-form-field-container\n            [title]=\"'Custom Tags'\"\n            [label]=\"'OPTIONAL'\"\n            class=\"form-field-advanced\"\n            >\n            <lib-custom-tags [(tags)]=\"formData.tags\" [readOnly]=\"useStrictReadonlyForm\"></lib-custom-tags>\n          </lib-form-field-container>\n        </div>\n      </div>\n      <div class=\"form-group-column two-fifths\">\n        <lib-form-field-container\n          [title]=\"'Verification'\"\n          [label]=\"useStrictReadonlyForm ? '' : 'REQUIRED'\"\n          >\n          <div\n            class=\"radio-group-container\"\n            [class.radio-group-readonly]=\"useStrictReadonlyForm\"\n            (keydown)=\"radioKeyDownHandler($event)\"\n            [attr.tabindex]=\"useStrictReadonlyForm ? -1 : 0\"\n            >\n            <div\n              class=\"radio-button-container\"\n              [ngClass]=\"{'selected': signatureMethod === 'JWKS_ENDPOINT', 'toggle-readonly': useStrictReadonlyForm}\"\n              (click)=\"!useStrictReadonlyForm && selectSignatureMethod('JWKS_ENDPOINT')\"\n              >\n              <div class=\"radio-button-circle\">\n                <div class=\"radio-button-inner-circle\"></div>\n              </div>\n              <span class=\"radio-button-label\">JWKS Endpoint</span>\n            </div>\n            <div\n              class=\"radio-button-container\"\n              [ngClass]=\"{'selected': signatureMethod === 'CERT_PEM', 'toggle-readonly': useStrictReadonlyForm}\"\n              (click)=\"!useStrictReadonlyForm && selectSignatureMethod('CERT_PEM')\"\n              >\n              <div class=\"radio-button-circle\">\n                <div class=\"radio-button-inner-circle\"></div>\n              </div>\n              <span class=\"radio-button-label\">Cert PEM</span>\n            </div>\n          </div>\n          @if (signatureMethod === 'JWKS_ENDPOINT') {\n            <div class=\"form-field-input-group\">\n              <div class=\"form-field-label-container select-file-label-container\">\n                <div class=\"form-field-header\">\n                  <div class=\"form-field-title-container\">\n                    <span class=\"form-field-title\">JWKS Endpoint</span>\n                  </div>\n                </div>\n                <input\n                  class=\"form-field-input\"\n                  placeholder=\"Enter endpoint URL\"\n                  [(ngModel)]=\"formData.jwksEndpoint\"\n                  [ngClass]=\"{error: errors['jwksEndpoint']}\"\n                  [disabled]=\"useStrictReadonlyForm\"\n                  />\n              </div>\n            </div>\n          }\n          @if (signatureMethod === 'CERT_PEM') {\n            <div class=\"form-field-input-group\">\n              <div class=\"form-field-label-container select-file-label-container\">\n                <div class=\"form-field-header\">\n                  <div class=\"form-field-title-container\">\n                    <span class=\"form-field-title\">PEM</span>\n                  </div>\n                  <span\n                    class=\"select-file-button\"\n                    [class.toggle-readonly]=\"useStrictReadonlyForm\"\n                    (click)=\"!useStrictReadonlyForm && openFileSelect($event)\"\n                    >\n                    Select File\n                    @if (fileSelectOpening) {\n                      <div class=\"spinner\"></div>\n                    }\n                  </span>\n                  <input\n                    #fileSelect\n                    type=\"file\"\n                    style=\"display:none\"\n                    [disabled]=\"useStrictReadonlyForm\"\n                    (change)=\"selectPemFile($event)\"\n                    >\n                </div>\n                <textarea\n                  placeholder=\"Paste pem contents or select file\"\n                  [(ngModel)]=\"formData.certPem\"\n                  [ngClass]=\"{error: errors['certPem']}\"\n                  [disabled]=\"useStrictReadonlyForm\"\n                  ></textarea>\n              </div>\n              <div class=\"form-field-label-container\">\n                <div class=\"form-field-header\">\n                  <div class=\"form-field-title-container\">\n                    <span class=\"form-field-title\">KID</span>\n                  </div>\n                  <span class=\"form-field-label\" >Optional</span>\n                </div>\n                <input class=\"form-field-input\" placeholder=\"Enter KID\" [(ngModel)]=\"formData.kid\" [disabled]=\"useStrictReadonlyForm\"/>\n              </div>\n            </div>\n          }\n        </lib-form-field-container>\n        <lib-form-field-container\n          [showHeader]=\"false\"\n          >\n          <div class=\"config-item\">\n            <div class=\"config-container toggle-container\">\n              <div class=\"config-container-label\">ENABLED</div>\n              <div\n                (click)=\"!useStrictReadonlyForm && toggleEnabled()\"\n                [ngClass]=\"{ on: formData.enabled, 'toggle-readonly': useStrictReadonlyForm }\"\n                class=\"toggle\"\n                >\n                <span [hidden]=\"!formData.enabled\" class=\"on-label\">YES</span>\n                <span [hidden]=\"formData.enabled\" class=\"off-label\">NO</span>\n                <div class=\"switch\"></div>\n              </div>\n            </div>\n          </div>\n        </lib-form-field-container>\n        @if (showApiCalls) {\n          <lib-form-field-container\n            [title]=\"'API Calls'\"\n            [headerActions]=\"apiOptions\"\n            (actionRequested)=\"apiActionRequested($event)\"\n            [class]=\"'api-data-no-wrap'\"\n            >\n            <div class=\"form-row\">\n              <input class=\"form-field-input\" [value]=\"apiCallURL\"/>\n              <div class=\"icon-copy copy-text\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n            </div>\n            @if (formData) {\n              <lib-json-view [showLineNumbers]=\"false\" [(data)]=\"apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n            }\n          </lib-form-field-container>\n        }\n      </div>\n    </div>\n    @if (formView === 'raw') {\n      <div class=\"form-group-column\">\n        @if (formData) {\n          <lib-json-view [(data)]=\"formData\" [readOnly]=\"useStrictReadonlyForm\"></lib-json-view>\n        }\n      </div>\n    }\n  </div>\n</div>\n@if (isLoading) {\n  <lib-loading-indicator [isLoading]=\"isLoading\"></lib-loading-indicator>\n}\n<lib-side-modal [(open)]=\"showAutoEnrollHelpModal\" [showClose]=\"true\">\n  <div class=\"help-panel-content\">\n    <h2 class=\"help-panel-title\">What is Auto Enrollment?</h2>\n    <p class=\"help-panel-intro\">\n      Auto Enrollment enables automatic identity creation when users authenticate via JWT tokens.\n    </p>\n\n    <div class=\"help-panel-section\">\n      <h3 class=\"help-panel-subtitle\">\n        <span class=\"icon-certificate\"></span>\n        Auto-Enroll to Cert\n      </h3>\n      <p class=\"help-panel-text\">\n        When enabled, the controller will automatically create an identity and enroll it with a certificate when a user authenticates using a JWT token. This is useful for certificate-based authentication workflows.\n      </p>\n    </div>\n\n    <div class=\"help-panel-section\">\n      <h3 class=\"help-panel-subtitle\">\n        <span class=\"icon-key\"></span>\n        Auto-Enroll to Token\n      </h3>\n      <p class=\"help-panel-text\">\n        When enabled, the controller will automatically create an identity and enroll it with an authentication token when a user authenticates using a JWT token. This is useful for token-based authentication workflows.\n      </p>\n    </div>\n\n    <div class=\"help-panel-note\">\n      <strong>Note:</strong> These options are only available in Ziti 2.0 and later versions.\n    </div>\n  </div>\n</lib-side-modal>\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Inject, Injectable} from '@angular/core';\nimport {DataTableFilterService, FilterObj} from \"../../features/data-table/data-table-filter.service\";\nimport _, {isEmpty, unset} from \"lodash\";\nimport moment from \"moment\";\nimport {ListPageServiceClass} from \"../../shared/list-page-service.class\";\nimport {\n    TableColumnDefaultComponent\n} from \"../../features/data-table/column-headers/table-column-default/table-column-default.component\";\nimport {CallbackResults} from \"../../features/list-page-features/list-page-form/list-page-form.component\";\nimport {SchemaService} from \"../../services/schema.service\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../services/settings.service\";\nimport {CsvDownloadService} from \"../../services/csv-download.service\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../features/extendable/extensions-noop.service\";\nimport {Service} from \"../../models/service\";\nimport {TableCellNameComponent} from \"../../features/data-table/cells/table-cell-name/table-cell-name.component\";\nimport {Router} from \"@angular/router\";\nimport {ConfirmComponent} from \"../../features/confirm/confirm.component\";\nimport {firstValueFrom} from \"rxjs\";\nimport {MatDialog} from \"@angular/material/dialog\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class AuthPoliciesPageService extends ListPageServiceClass {\n\n    private paging = this.DEFAULT_PAGING;\n\n    resourceType = 'auth-policies';\n    selectedConfig: any = {};\n    modalType = '';\n\n    override menuItems = [\n        {name: 'Edit', action: 'update'},\n        {name: 'Delete', action: 'delete'},\n    ]\n\n    constructor(\n        private schemaSvc: SchemaService,\n        @Inject(SETTINGS_SERVICE) settings: SettingsService,\n        filterService: DataTableFilterService,\n        csvDownloadService: CsvDownloadService,\n        @Inject(SHAREDZ_EXTENSION) extService: ExtensionService,\n        protected override router: Router,\n        private dialogForm: MatDialog\n    ) {\n        super(settings, filterService, csvDownloadService, extService, router);\n    }\n\n    initTableColumns(): any {\n\n        const allowedHeaderComponentParams = {\n            filterType: 'SELECT',\n            enableSorting: true,\n            filterOptions: [\n                { label: 'All', value: '' },\n                { label: 'Allowed', value: true },\n                { label: 'Not Allowed', value: false },\n            ]\n        };\n        const createdAtHeaderComponentParams = {\n            filterType: 'DATETIME',\n        };\n        return [\n            {\n                colId: 'name',\n                field: 'name',\n                headerName: 'Name',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: this.headerComponentParams,\n                cellRenderer: TableCellNameComponent,\n                cellRendererParams: { pathRoot: this.basePath, cellNamePreCheck: (data) => {\n                    this.checkDefaultAuthPolicy(data).then((result) => {\n                        if (!result?.confirmed) {\n                            return;\n                        }\n                        this.openEditForm(data?.id);\n                    });\n                }},\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.checkDefaultAuthPolicy(data?.data).then((result: any) => {\n                        if (!result?.confirmed) {\n                            return;\n                        }\n                        this.openEditForm(data?.data?.id);\n                    });\n                },\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: true,\n                filter: true,\n                sortColumn: this.sort.bind(this)\n            },\n            {\n                colId: 'primary.cert.allowed',\n                field: 'primary.cert.allowed',\n                headerName: 'Cert',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: allowedHeaderComponentParams,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: true,\n                filter: true,\n                sortColumn: this.sort.bind(this),\n            },\n            {\n                colId: 'primary.extJwt.allowed',\n                field: 'primary.extJwt.allowed',\n                headerName: 'External JWT',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: allowedHeaderComponentParams,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: true,\n                filter: true,\n                sortColumn: this.sort.bind(this),\n            },\n            {\n                colId: 'primary.updb.allowed',\n                field: 'primary.updb.allowed',\n                headerName: 'UPDB',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: allowedHeaderComponentParams,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: true,\n                filter: true,\n                sortColumn: this.sort.bind(this),\n            },\n            {\n                colId: 'createdAt',\n                field: 'createdAt',\n                headerName: 'Created At',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: createdAtHeaderComponentParams,\n                valueFormatter: this.createdAtFormatter,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n            },\n            this.ID_COLUMN_DEF\n        ];\n    }\n\n    checkDefaultAuthPolicy(authPolicy): Promise<any> {\n        if (authPolicy.id !== 'default') {\n            return Promise.resolve({ confirmed: true });\n        }\n        const confirmationMessage =\n            `<p>WARNING: Do not change the default policy unless you're sure you know what you are doing.</p>\n             <p>Before changing the default policy, it's recommended that you make another policy and apply that to other users first. Then make sure you can still authenticate. </p>\n             <p>Do you still want to continue?</p>`;\n        const data = {\n            appendId: 'ConfirmDefaultAuthPolicy',\n            title: 'Are You Sure?',\n            message: confirmationMessage,\n            confirmLabel: 'Yes',\n            cancelLabel: 'Oops, no get me out of here',\n            showCancelLink: true,\n            imageUrl: 'assets/svgs/Growl_Warning.svg'\n        };\n        this.dialogRef = this.dialogForm.open(ConfirmComponent, {\n            data: data,\n            autoFocus: false,\n        });\n        return firstValueFrom(this.dialogRef.afterClosed());\n    }\n\n    getData(filters?: FilterObj[], sort?: any) {\n        // we can customize filters or sorting here before moving on...\n        return super.getTableData(this.resourceType, this.paging, filters, sort)\n            .then((results: any) => {\n                return this.processData(results);\n            });\n    }\n\n    validate = (formData): Promise<CallbackResults> => {\n        return Promise.resolve({ passed: true});\n    }\n\n    private processData(results: any) {\n        if (!isEmpty(results?.data)) {\n            //pre-process data before rendering\n            results.data = this.addActionsPerRow(results);\n        }\n        return results;\n    }\n\n    private addActionsPerRow(results: any): any[] {\n        return results.data.map((row) => {\n            row.actionList = ['update', 'delete'];\n            return row;\n        });\n    }\n\n    public openUpdate(item?: any) {\n        this.modalType = 'auth-policy';\n        if (item) {\n            this.selectedConfig = item;\n            this.selectedConfig.badges = [];\n            unset(this.selectedConfig, '_links');\n        } else {\n            this.selectedConfig = new Service();\n        }\n        this.sideModalOpen = true;\n    }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, Inject, OnInit} from '@angular/core';\nimport {DataTableFilterService} from \"../../features/data-table/data-table-filter.service\";\nimport {AuthPoliciesPageService} from \"./auth-policies-page.service\";\nimport {TabNameService} from \"../../services/tab-name.service\";\nimport {ListPageComponent} from \"../../shared/list-page-component.class\";\nimport {ConsoleEventsService} from \"../../services/console-events.service\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {ConfirmComponent} from \"../../features/confirm/confirm.component\";\nimport {firstValueFrom} from \"rxjs\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../features/extendable/extensions-noop.service\";\n\n\n@Component({\n    selector: 'lib-auth-policies',\n    templateUrl: './auth-policies-page.component.html',\n    styleUrls: ['./auth-policies-page.component.scss'],\n    standalone: false\n})\nexport class AuthPoliciesPageComponent extends ListPageComponent implements OnInit {\n    title = 'Auth Policies'\n    tabs: { url: string, label: string }[] ;\n    isLoading: boolean;\n    formDataChanged = false;\n\n    constructor(\n        override svc: AuthPoliciesPageService,\n        filterService: DataTableFilterService,\n        private tabNames: TabNameService,\n        consoleEvents: ConsoleEventsService,\n        dialogForm: MatDialog,\n        @Inject(SHAREDZ_EXTENSION) private extService: ExtensionService,\n    ) {\n        super(filterService, svc, consoleEvents, dialogForm, extService);\n    }\n\n    override ngOnInit() {\n        this.tabs = this.tabNames.getTabs('authentication');\n        this.svc.refreshData = this.refreshData;\n        super.ngOnInit();\n    }\n\n    headerActionClicked(action: string) {\n        switch (action) {\n            case 'add':\n                this.svc.openEditForm();\n                break;\n            case 'edit':\n                this.svc.openEditForm();\n                break;\n            case 'delete':\n                let defaultCheckPromise: Promise<any> = Promise.resolve({ confirmed: true });\n                const selectedItems = this.rowData.filter((row) => {\n                    if (row.selected && row.id === 'default') {\n                        defaultCheckPromise = this.svc.checkDefaultAuthPolicy(row);\n                    }\n                    return row.selected;\n                });\n                defaultCheckPromise.then((result) => {\n                    if (!result?.confirmed) {\n                        return;\n                    }\n                    const label = selectedItems.length > 1 ? 'auth policies' : 'auth policy';\n                    this.openBulkDelete(selectedItems, label);\n                });\n                break;\n            default:\n        }\n    }\n\n    tableAction(event: any) {\n        this.trackMenuAction(event?.action, event?.item);\n        switch(event?.action) {\n            case 'toggleAll':\n            case 'toggleItem':\n                this.itemToggled(event.item)\n                break;\n            case 'update':\n                this.svc.checkDefaultAuthPolicy(event.item).then((result) => {\n                    if (!result) {\n                        return;\n                    }\n                    this.svc.openEditForm(event.item?.id);\n                });\n                break;\n            case 'create':\n                this.svc.openEditForm();\n                break;\n            case 'delete':\n                this.svc.checkDefaultAuthPolicy(event.item).then((result) => {\n                    if (!result) {\n                        return;\n                    }\n                    this.deleteItem(event.item)\n                });\n                break;\n            case 'download-all':\n                this.downloadAllItems();\n                break;\n            case 'download-selected':\n                this.svc.downloadItems(this.selectedItems);\n                break;\n            default:\n                break;\n        }\n    }\n\n    trackMenuAction(action: string, item: any) {\n        this.extService?.consoleActionTriggered?.emit({\n            action,\n            page: 'auth-policy',\n            item,\n            type:'menu-action'\n        });\n    }\n    deleteItem(item: any) {\n        this.openBulkDelete([item], 'auth-policy');\n    }\n\n    closeModal(event: any) {\n        this.svc.sideModalOpen = false;\n        if(event?.refresh) {\n            this.refreshData();\n        }\n    }\n\n    dataChanged(event) {\n        this.formDataChanged = event;\n    }\n}\n","<div class=\"ziti-page-container ziti-auth-policies-container\">\n    <lib-list-page-header [title]=\"title\"\n                          [tabs]=\"tabs\"\n                          [showAdd]=\"!itemsSelected\"\n                          [blockCreate]=\"headerBlockCreate\"\n                          [blockDelete]=\"headerBlockDelete\"\n                          (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n\n    <lib-data-table [tableId]=\"'auth-policies'\"\n                    [noItemsReadonly]=\"headerBlockCreate\"\n                    [accessDenied]=\"headerBlockRead\"\n                    [rowData]=\"rowData\"\n                    [isLoading]=\"isLoading\"\n                    [columnDefinitions]=\"columnDefs\"\n                    (actionRequested)=\"tableAction($event)\"\n                    [startCount]=\"startCount\"\n                    [endCount]=\"endCount\"\n                    [totalCount]=\"totalCount\"\n                    [emptyMsg]=\"'No Auth Policies defined, Click the plus to add a Configuration.'\"\n                    [filterApplied]=\"filterApplied\"\n                    [menuItems]=\"svc.menuItems\"\n                    (gridReady)=\"gridReady($event)\"\n    >\n    </lib-data-table>\n</div>\n","export class AuthPolicy {\n    name: string = '';\n    id: string = '';\n    primary: any = {\n        cert: {\n            allowed: false,\n            allowExpiredCerts: false,\n        },\n        extJwt: {\n            allowed: false,\n            allowedSigners: []\n        },\n        updb: {\n            allowed: false,\n            lockoutDurationMinutes: 0,\n            maxAttempts: 5,\n            minPasswordLength: 5,\n            requireMixedCase: false,\n            requireNumberChar: false,\n            requireSpecialChar: false\n        }\n    };\n    secondary: any = {\n        requireTotp: false,\n        requireExtJwtSigner: undefined\n    };\n    tags: any = {}\n}","import {Injectable, Inject} from '@angular/core';\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../services/ziti-data.service\";\nimport {cloneDeep, defer, invert, isBoolean, isEmpty, isNil, keys} from \"lodash\";\nimport {GrowlerModel} from \"../../messaging/growler.model\";\nimport {GrowlerService} from \"../../messaging/growler.service\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../extendable/extensions-noop.service\";\nimport {ValidationService} from \"../../../services/validation.service\";\nimport {AuthPolicy} from \"../../../models/auth-policy\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class AuthPolicyFormService {\n\n    items: any[] = [];\n    errors: any[] = [];\n    saveDisabled = false;\n\n    jwtSigners = [];\n    jwtSignerNamedAttributes = [];\n    jwtSignerNamedAttributesMap = {};\n    jwtSignersLoading = false;\n\n    selectedSecondaryJwtSigner;\n    filteredJwtSigners;\n\n    paging = {\n        filter: \"\",\n        noSearch: true,\n        order: \"asc\",\n        page: 1,\n        searchOn: \"name\",\n        sort: \"name\",\n        total: 100\n    }\n\n    constructor(\n        @Inject(ZITI_DATA_SERVICE) private dataService: ZitiDataService,\n        @Inject(SHAREDZ_EXTENSION)private extService: ExtensionService,\n        private growlerService: GrowlerService,\n        private validationService: ValidationService\n    ) {\n    }\n\n    public getJwtSignerNamedAttributes() {\n        return this.dataService.get('external-jwt-signers', {rawFilter: true, filter: '', sort: 'name', order: 'asc', total: -1, page: 1}, []).then((result) => {\n            const namedAttributes = result.data.map((identity) => {\n                this.jwtSignerNamedAttributesMap[identity.name] = identity.id;\n                return identity.name;\n            });\n            this.jwtSignerNamedAttributes = namedAttributes;\n            return namedAttributes;\n        });\n    }\n\n    getJwtSigners(filters = [], page = 1) {\n        this.jwtSignersLoading = true;\n        const paging = cloneDeep(this.paging);\n        if (filters.length > 0) {\n            paging.noSearch = false;\n        }\n        return this.dataService.get('external-jwt-signers', paging, filters).then((result: any) => {\n            this.jwtSigners = result.data;\n        }).finally(() => {\n            this.jwtSignersLoading = false;\n        });\n    }\n\n    save(formData) {\n        const isUpdate = !isEmpty(formData.id);\n        const data: any = this.getAuthPolicyDataModel(formData, isUpdate);\n        let prom;\n        if (isUpdate) {\n            prom = this.dataService.put('auth-policies', data, formData.id, true);\n        } else {\n            prom = this.dataService.post('auth-policies', data, true);\n        }\n\n        return prom.then(async (result: any) => {\n            const id = isUpdate ? formData.id : (result?.data?.id || result?.id);\n            let config = await this.dataService.getSubdata('auth-policies', id, '').then((svcData) => {\n                return svcData.data;\n            });\n            return this.extService.formDataSaved(config).then((formSavedResult: any) => {\n                if (!formSavedResult) {\n                    return config;\n                }\n                const growlerData = new GrowlerModel(\n                    'success',\n                    'Success',\n                    `Auth Policy ${isUpdate ? 'Updated' : 'Created'}`,\n                    `Successfully ${isUpdate ? 'updated' : 'created'} Auth Policy: ${formData.name}`,\n                );\n                this.growlerService.show(growlerData);\n                return config;\n            }).catch((result) => {\n                return false;\n            });\n        }).catch((resp) => {\n            const errorMessage = this.dataService.getErrorMessage(resp);\n            const growlerData = new GrowlerModel(\n                'error',\n                'Error',\n                `Error ${isUpdate ? 'Updating' : 'Creating'} Auth Policy`,\n                errorMessage,\n            );\n            this.growlerService.show(growlerData);\n            throw resp;\n        })\n    }\n\n    getAuthPolicyDataModel(formData, isUpdate) {\n        const saveModel = new AuthPolicy();\n        const modelProperties = keys(saveModel);\n        modelProperties.forEach((prop) => {\n            switch(prop) {\n                default:\n                    saveModel[prop] = formData[prop];\n            }\n        });\n        return saveModel;\n    }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {\n    Component, ElementRef,\n    EventEmitter, Inject,\n    Input,\n    OnDestroy,\n    OnInit, Output,\n    ViewChild,\n} from '@angular/core';\nimport {AuthPolicyFormService} from \"./auth-policy-form.service\";\nimport {SchemaService} from \"../../../services/schema.service\";\nimport {KEY_CODES, ProjectableForm} from \"../projectable-form.class\";\nimport {GrowlerService} from \"../../messaging/growler.service\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../extendable/extensions-noop.service\";\n\nimport {cloneDeep, defer, delay, forOwn, keys, invert, isEmpty, isNil, unset, sortedUniq, debounce} from 'lodash';\nimport {GrowlerModel} from \"../../messaging/growler.model\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../../services/settings.service\";\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../services/ziti-data.service\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {Location} from \"@angular/common\";\nimport {ValidationService} from \"../../../services/validation.service\";\nimport {AuthPolicy} from \"../../../models/auth-policy\";\n\n@Component({\n    selector: 'lib-configuration',\n    templateUrl: './auth-policy-form.component.html',\n    styleUrls: ['./auth-policy-form.component.scss'],\n    standalone: false\n})\nexport class AuthPolicyFormComponent extends ProjectableForm implements OnInit, OnDestroy {\n\n    @Input() override errors: any = {};\n    @Output() close: EventEmitter<void> = new EventEmitter<void>();\n\n    allowedJwtSignerAttributes = [];\n\n    formView = 'simple';\n    options: any[] = [];\n    isEditing = !isEmpty(this.formData.id);\n    formDataInvalid = false;\n    editMode = false;\n    items: any = [];\n    settings: any = {};\n    fileSelectOpening = false;\n    override entityType = 'auth-policies';\n    override entityClass = AuthPolicy;\n\n    jwtSignersFilterChangedDebounced = debounce((filterText: string) => this.jwtSignerFilterChanged(filterText), 200);\n\n    @ViewChild('fileSelect') filterInput: ElementRef;\n\n    constructor(\n        public svc: AuthPolicyFormService,\n        private schemaSvc: SchemaService,\n        growlerService: GrowlerService,\n        @Inject(SHAREDZ_EXTENSION) extService: ExtensionService,\n        @Inject(SETTINGS_SERVICE) protected override settingsService: SettingsService,\n        @Inject(ZITI_DATA_SERVICE) override zitiService: ZitiDataService,\n        protected override router: Router,\n        protected override route: ActivatedRoute,\n        location: Location,\n        private validationService: ValidationService\n    ) {\n        super(growlerService, extService, zitiService, router, route, location, settingsService);\n    }\n\n    override ngOnInit(): void {\n        super.ngOnInit();\n        this.svc.getJwtSigners();\n        this.svc.getJwtSignerNamedAttributes().then(() => {\n            this.initSelectedAttributes();\n        });\n        this.settingsService.settingsChange.subscribe((results:any) => {\n            this.settings = results;\n        });\n    }\n\n    protected override entityUpdated() {\n        super.entityUpdated();\n    }\n\n    ngOnDestroy(): void {\n        this.clearForm();\n    }\n\n    headerActionRequested(event) {\n        switch(event.name) {\n            case 'save':\n                this.save(event);\n                break;\n            case 'close':\n                this.returnToListPage();\n                break;\n            case 'toggle-view':\n                this.formView = event.data;\n                break;\n        }\n    }\n\n    multiActionRequested(action) {\n        switch (action.id) {\n            case 'save':\n                this.save();\n                break;\n            case 'delete':\n                this.deleteEntity();\n                break;\n        }\n    }\n\n    override clear() {\n        this.formData.configTypeId = '';\n        this.clearForm();\n    }\n\n    clearForm() {\n        this.items.forEach((item: any) => {\n            if (item?.component) item.component.destroy();\n        });\n        this.errors = {};\n        this.items = [];\n        this.formData = new AuthPolicy();\n        if (this.subscription) this.subscription.unsubscribe();\n    }\n\n    allowedJwtSignersChanged(event) {\n        this.formData.primary.extJwt.allowedSigners = this.getSelectedAttributes(this.allowedJwtSignerAttributes, this.svc.jwtSignerNamedAttributesMap);\n    }\n\n    getSelectedAttributes(namedAttributes, namedAttributeMap) {\n        const prependedNamedAttributes = namedAttributes.map((attr) => {\n            return namedAttributeMap[attr];\n        });\n        return [...prependedNamedAttributes];\n    }\n\n    initSelectedAttributes() {\n        const jwtSignerNamedAttributesMap = invert(this.svc.jwtSignerNamedAttributesMap);\n        this.formData.primary?.extJwt?.allowedSigners?.forEach(attr => {\n            this.allowedJwtSignerAttributes.push(jwtSignerNamedAttributesMap[attr]);\n        });\n    }\n\n    async save(event?: any) {\n        if (!this.canSaveByPermissions()) {\n            return;\n        }\n        if(!this.validate()) {\n            return;\n        }\n        const tagVals = this.getTagValues();\n        if (!isEmpty(tagVals)) {\n            forOwn(tagVals, (value, key) => {\n                this.formData.tags[key] = value;\n            });\n        }\n        const apiData = this.apiData;\n        apiData.id = this.formData.id;\n        this.isLoading = true;\n        this.svc.save(apiData).then((result) => {\n            if (this.isModal) {\n                this.closeModal(true, true);\n                return;\n            }\n            this.initData = this.formData;\n            this._dataChange = false;\n            this.returnToListPage();\n        }).finally(() => {\n            this.isLoading = false;\n        });\n    }\n\n    validate() {\n        this.errors = {};\n        const labels = [];\n        const growlers = [];\n        if (isEmpty(this.formData.name)) {\n            this.errors.name = true;\n            labels.push('Name');\n        }\n        if (!isEmpty(this.errors)) {\n            let missingFields = labels.join(', ');\n            growlers.push(new GrowlerModel(\n                'error',\n                'Invalid',\n                `Missing Form Data`,\n                `Please enter a value for the highlighted fields: ${missingFields}`,\n            ));\n        }\n        if (!isEmpty(growlers)) {\n            growlers.forEach((growlerData) => {\n                this.growlerService.show(growlerData);\n            });\n            return isEmpty(this.errors);\n        }\n\n        growlers.forEach((growlerData) => {\n            this.growlerService.show(growlerData);\n        });\n        return isEmpty(this.errors);\n    }\n\n    get apiCallURL() {\n        return this.settings.selectedEdgeController + '/edge/management/v1/auth-policies' + (this.formData.id ? `/${this.formData.id}` : '');\n    }\n\n    get apiData(): any {\n        const data: any = {\n            name: this.formData.name || '',\n            primary: this.formData.primary || {},\n            secondary: this.formData.secondary || {},\n            tags: this.formData.tags || {}\n        };\n        this._apiData = data;\n        return this._apiData;\n    }\n\n    _apiData: any = {};\n    set apiData(data) {\n        this._apiData = data;\n    }\n\n    dataChanged(event) {\n        this._apiData = cloneDeep(this.apiData);\n    }\n\n    toggleCertAllowed() {\n        this.formData.primary.cert.allowed = !this.formData.primary.cert.allowed;\n        if (!this.formData.primary.cert.allowed) {\n            this.formData.primary.cert.allowExpiredCerts = false;\n        }\n    }\n\n    toggleExtJwtAllowed() {\n        this.formData.primary.extJwt.allowed = !this.formData.primary.extJwt.allowed;\n    }\n\n    toggleUpdbAllowed() {\n        this.formData.primary.updb.allowed = !this.formData.primary.updb.allowed;\n    }\n\n    toggleAllowExpiredCerts() {\n        this.formData.primary.cert.allowExpiredCerts = !this.formData.primary.cert.allowExpiredCerts;\n    }\n\n    toggleUpdbMixed() {\n        this.formData.primary.updb.requireMixedCase = !this.formData.primary.updb.requireMixedCase;\n    }\n\n    toggleUpdbNumeric() {\n        this.formData.primary.updb.requireNumericChar = !this.formData.primary.updb.requireNumericChar;\n    }\n\n    toggleUpdbSpecial() {\n        this.formData.primary.updb.requireSpecialChar = !this.formData.primary.updb.requireSpecialChar;\n    }\n\n    toggleRequireTotp() {\n        this.formData.secondary.requireTotp = !this.formData.secondary.requireTotp;\n    }\n\n    openFileSelect(event: any) {\n        this.filterInput.nativeElement.click();\n        this.fileSelectOpening = true;\n        delay(() => {\n            this.fileSelectOpening = false;\n        }, 1000);\n    }\n\n    selectPemFile(event: any) {\n        const file: File = event?.target?.files[0];\n\n        if (file) {\n            const fileReader = new FileReader();\n            fileReader.onload = (fileLoadedEvent) => {\n                const textFromSelectedFile: any = fileLoadedEvent.target?.result;\n                if (!this.validationService.isValidPEM(textFromSelectedFile?.trim())) {\n                    this.errors.certPem = true;\n                    const growlerData = new GrowlerModel(\n                        'error',\n                        'Invalid',\n                        `Cert PEM Invalid`,\n                        `The file selected for the Cert PEM field is invalid. Please check your input and try again.`,\n                    );\n                    this.growlerService.show(growlerData);\n                    this.formData.certPem = 'Invalid PEM. Please select or enter a valid PEM certificate.';\n                } else {\n                    unset(this.errors, 'certPem');\n                    this.formData.certPem = textFromSelectedFile;\n                }\n            };\n            fileReader.readAsText(file, \"UTF-8\");\n        }\n    }\n\n    apiActionRequested(action) {\n        switch (action.id) {\n            case 'cli':\n                this.copyCLICommand();\n                break;\n            case 'curl':\n                this.copyCURLCommand();\n                break;\n        }\n    }\n\n    copyCLICommand() {\n        const command = `ziti edge ${this.formData.id ? 'update' : 'create'} auth-policy ${this.formData.id ? `'${this.formData.id}'` : ''} ${this.formData.id ? '--name' : ''} '${this.formData.name}' --primary-cert-allowed '${this.formData.primary.cert.allowed}' --primary-cert-expired-allowed '${this.formData.primary.cert.allowExpiredCerts}' --primary-ext-jwt-allowed '${this.formData.primary.extJwt.allowed}' --primary-ext-jwt-allowed-signers ${this.formData.primary.extJwt.allowedSigners.join(',') || ''} --primary-updb-allowed '${this.formData.primary.updb.allowed}' --primary-updb-lockout-min ${this.formData.primary.updb.lockoutDurationMinutes} --primary-updb-max-attempts ${this.formData.primary.updb.maxAttempts} --primary-updb-min-length ${this.formData.primary.updb.minPasswordLength} --primary-updb-req-mixed-case '${this.formData.primary.updb.requireMixedCase}' --primary-updb-req-numbers '${this.formData.primary.updb.requireNumberChar}' --primary-updb-req-special '${this.formData.primary.updb.requireSpecialChar}' --secondary-req-ext-jwt-signer '${this.formData.secondary.requireExtJwtSigner}' --secondary-req-totp '${this.formData.secondary.requireTotp}' --tags-json '${JSON.stringify(this.formData.tags)}'`;\n\n        navigator.clipboard.writeText(command);\n        const growlerData = new GrowlerModel(\n            'success',\n            'Success',\n            `Text Copied`,\n            `CLI command copied to clipboard`,\n        );\n        this.growlerService.show(growlerData);\n    }\n\n    copyCURLCommand() {\n        const command = `curl '${this.apiCallURL}' \\\\\n    ${this.formData.id ? '--request PATCH \\\\' : '\\\\'}\n    -H 'accept: application/json' \\\\\n    -H 'content-type: application/json' \\\\\n    -H 'zt-session: ${this.settings.session.id}' \\\\\n    --data-raw '${JSON.stringify(this.apiData)}'`;\n\n        navigator.clipboard.writeText(command);\n        const growlerData = new GrowlerModel(\n            'success',\n            'Success',\n            `Text Copied`,\n            `CURL command copied to clipboard`,\n        );\n        this.growlerService.show(growlerData);\n    }\n\n    scopesOnKeyup(event: any) {\n        const key = event.key?.toLowerCase();\n        if (key === \" \" || key === 'enter') {\n            event.preventDefault();\n            event.stopPropagation();\n            const element = event.target as HTMLElement;\n            element.blur();\n            element.focus();\n        }\n    }\n\n    jwtSignerFilterChanged(filterText: string) {\n        const filters = [];\n        if (filterText && filterText !== '') {\n            filters.push({\n                columnId: 'name',\n                value: filterText,\n                label: filterText,\n                filterName: 'Name',\n                type: 'TEXTINPUT',\n            });\n        }\n        this.svc.getJwtSigners(filters, 1);\n    }\n\n    secondaryJwtSignerChanged(event) {\n        this.svc.filteredJwtSigners = this.svc.jwtSigners.filter((jwtSigner) => {\n            return jwtSigner.id === this.formData.secondary.requireExtJwtSigner;\n        });\n    }\n\n    // clear handled by lib-filter-select (it emits filterChange(''))\n}\n","<div class=\"projectable-form-wrapper\"\n  (keyup.enter)=\"save($event)\"\n  (keyup.escape)=\"closeModal(false)\"\n  tabindex=\"0\"\n  [class.projectable-form-hidden]=\"!dataInit\"\n  >\n  <lib-form-header\n    [data]=\"formData\"\n    [title]=\"(formData.id ? 'Auth Policy Details' : 'Create Auth Policy')\"\n    [moreActions]=\"moreActions\"\n    [multiActions]=\"multiActions\"\n    (actionRequested)=\"headerActionRequested($event)\"\n    (multiActionRequested)=\"multiActionRequested($event)\"\n    [(formView)]=\"formView\"\n    [saveDisabled]=\"svc.saveDisabled || formDataInvalid || formPermissionSaveDisabled\"\n    [saveTooltip]=\"formPermissionSaveTooltip\"\n    [class.is-scrolled]=\"isScrolled\"\n    [strictReadonlyUi]=\"useStrictReadonlyForm\"\n  ></lib-form-header>\n  <div class=\"jwt-signer-form-container projectable-form-container\" #formContainer>\n    <div class=\"projectable-form-main-column form-group-row\" [hidden]=\"formView !== 'simple'\">\n      <div class=\"form-group-column three-fifths\">\n        <lib-form-field-container\n          [title]=\"'Name'\"\n          [label]=\"'Required'\"\n          >\n            <input\n              class=\"form-field-input\"\n              [(ngModel)]=\"formData.name\"\n              [ngClass]=\"{error: errors['name']}\"\n              placeholder=\"Name this Auth Policy\"\n              #nameFieldInput\n              [disabled]=\"useStrictReadonlyForm\"\n              />\n        </lib-form-field-container>\n        <lib-form-field-container\n          [title]=\"'Primary Authentication'\"\n          [layout]=\"'row'\"\n          >\n          <div class=\"config-item\">\n            <div class=\"config-container toggle-container\">\n              <div class=\"form-field-title-container\">\n                <div class=\"config-container-label\">Cert</div>\n                <div\n                  class=\"form-field-info infoicon\"\n                  matTooltip=\"Allow x509 certificate based authentication\"\n                  matTooltipPosition=\"below\"\n                ></div>\n              </div>\n              <div\n                (click)=\"!useStrictReadonlyForm && toggleCertAllowed()\"\n                [ngClass]=\"{ on: formData.primary.cert.allowed, 'toggle-readonly': useStrictReadonlyForm }\"\n                class=\"toggle\"\n                >\n                <span [hidden]=\"!formData.primary.cert.allowed\" class=\"on-label\">YES</span>\n                <span [hidden]=\"formData.primary.cert.allowed\" class=\"off-label\">NO</span>\n                <div class=\"switch\"></div>\n              </div>\n            </div>\n          </div>\n          <div class=\"config-item\">\n            <div class=\"config-container toggle-container\">\n              <div class=\"form-field-title-container\">\n                <div class=\"config-container-label\">Ext JWT</div>\n                <div\n                  class=\"form-field-info infoicon\"\n                  matTooltip=\"Allow externally signed JWT bearer tokens\"\n                  matTooltipPosition=\"below\"\n                ></div>\n              </div>\n              <div\n                (click)=\"toggleExtJwtAllowed()\"\n                [ngClass]=\"{ on: formData.primary.extJwt.allowed }\"\n                class=\"toggle\"\n                >\n                <span [hidden]=\"!formData.primary.extJwt.allowed\" class=\"on-label\">YES</span>\n                <span [hidden]=\"formData.primary.extJwt.allowed\" class=\"off-label\">NO</span>\n                <div class=\"switch\"></div>\n              </div>\n            </div>\n          </div>\n          <div class=\"config-item\">\n            <div class=\"config-container toggle-container\">\n              <div class=\"form-field-title-container\">\n                <div class=\"config-container-label\">UPDB</div>\n                <div\n                  class=\"form-field-info infoicon\"\n                  matTooltip=\"Allow authentication via a traditional &quot;Username Password Database&quot;\"\n                  matTooltipPosition=\"below\"\n                ></div>\n              </div>\n              <div\n                (click)=\"toggleUpdbAllowed()\"\n                [ngClass]=\"{ on: formData.primary.updb.allowed }\"\n                class=\"toggle\"\n                >\n                <span [hidden]=\"!formData.primary.updb.allowed\" class=\"on-label\">YES</span>\n                <span [hidden]=\"formData.primary.updb.allowed\" class=\"off-label\">NO</span>\n                <div class=\"switch\"></div>\n              </div>\n            </div>\n          </div>\n        </lib-form-field-container>\n        @if (formData.primary.cert.allowed) {\n          <lib-form-field-container\n            [title]=\"'Cert Options'\"\n            [layout]=\"'row'\"\n            >\n            <div class=\"config-item\">\n              <div class=\"config-container toggle-container\">\n                <div class=\"form-field-title-container\">\n                  <div class=\"config-container-label\">Allow Expired Certificates</div>\n                  <div\n                    class=\"form-field-info infoicon\"\n                    matTooltip=\"Allow expired client certificates to authenticate\"\n                    matTooltipPosition=\"below\"\n                  ></div>\n                </div>\n                <div\n                  (click)=\"toggleAllowExpiredCerts()\"\n                  [ngClass]=\"{ on: formData.primary.cert.allowExpiredCerts }\"\n                  class=\"toggle\"\n                  >\n                  <span [hidden]=\"!formData.primary.cert.allowExpiredCerts\" class=\"on-label\">YES</span>\n                  <span [hidden]=\"formData.primary.cert.allowExpiredCerts\" class=\"off-label\">NO</span>\n                  <div class=\"switch\"></div>\n                </div>\n              </div>\n            </div>\n          </lib-form-field-container>\n        }\n        @if (formData.primary.extJwt.allowed) {\n          <lib-form-field-container\n            [title]=\"'Ext JWT Options'\"\n            [layout]=\"'column'\"\n            >\n            <div class=\"form-field-label-container allowed-signers-container\">\n              <div class=\"form-field-title-container\">\n                <span class=\"form-field-title\">Allowed JWT Signers</span>\n                <div\n                  class=\"form-field-info infoicon\"\n                  matTooltip=\"Choose which External JWT Signers may be used for authentication\"\n                  matTooltipPosition=\"below\"\n                ></div>\n              </div>\n              <lib-tag-selector\n                [disableField]=\"useStrictReadonlyForm\"\n                [disableCreate]=\"useStrictReadonlyForm\"\n                [(selectedNamedAttributes)]=\"allowedJwtSignerAttributes\"\n                [availableNamedAttributes]=\"svc.jwtSignerNamedAttributes\"\n                [placeholder]=\"'Select which External JWT Signers to allow'\"\n                (selectedNamedAttributesChange)=\"allowedJwtSignersChanged($event)\"\n              ></lib-tag-selector>\n            </div>\n          </lib-form-field-container>\n        }\n        @if (formData.primary.updb.allowed) {\n          <lib-form-field-container\n            [title]=\"'UPDB Options'\"\n            [layout]=\"'column'\"\n            >\n            <div class=\"form-field-row updb-input-options\">\n              <div class=\"form-field-label-container\">\n                <div class=\"form-field-title-container\">\n                  <span class=\"form-field-title\">Minimum Length</span>\n                </div>\n                <input class=\"form-field-input\" placeholder=\"Enter a numeric value\" type=\"number\" [(ngModel)]=\"formData.primary.updb.minPasswordLength\"/>\n              </div>\n              <div class=\"form-field-label-container\">\n                <div class=\"form-field-title-container\">\n                  <span class=\"form-field-title\">Max Attempts</span>\n                </div>\n                <input class=\"form-field-input\" placeholder=\"Enter a numeric value\" type=\"number\" [(ngModel)]=\"formData.primary.updb.maxAttempts\"/>\n              </div>\n              <div class=\"form-field-label-container\">\n                <div class=\"form-field-title-container\">\n                  <span class=\"form-field-title\">Lockout Duration <div class=\"form-sub-text\">(min)</div></span>\n                </div>\n                <input class=\"form-field-input\" placeholder=\"Enter time in min\" type=\"number\" [(ngModel)]=\"formData.primary.updb.lockoutDurationMinutes\"/>\n              </div>\n            </div>\n            <div class=\"form-field-row\">\n              <div class=\"config-item\">\n                <div class=\"config-container toggle-container\">\n                  <div class=\"form-field-title-container\">\n                    <div class=\"config-container-label\">Mixed Case</div>\n                    <div\n                      class=\"form-field-info infoicon\"\n                      matTooltip=\"Require upper and lower case charachters\"\n                      matTooltipPosition=\"below\"\n                    ></div>\n                  </div>\n                  <div\n                    (click)=\"toggleUpdbMixed()\"\n                    [ngClass]=\"{ on: formData.primary.updb.requireMixedCase }\"\n                    class=\"toggle\"\n                    >\n                    <span [hidden]=\"!formData.primary.updb.requireMixedCase\" class=\"on-label\">YES</span>\n                    <span [hidden]=\"formData.primary.updb.requireMixedCase\" class=\"off-label\">NO</span>\n                    <div class=\"switch\"></div>\n                  </div>\n                </div>\n              </div>\n              <div class=\"config-item\">\n                <div class=\"config-container toggle-container\">\n                  <div class=\"form-field-title-container\">\n                    <div class=\"config-container-label\">Numeric</div>\n                    <div\n                      class=\"form-field-info infoicon\"\n                      matTooltip=\"Require numerical charachters 0-9\"\n                      matTooltipPosition=\"below\"\n                    ></div>\n                  </div>\n                  <div\n                    (click)=\"toggleUpdbNumeric()\"\n                    [ngClass]=\"{ on: formData.primary.updb.requireNumericChar }\"\n                    class=\"toggle\"\n                    >\n                    <span [hidden]=\"!formData.primary.updb.requireNumericChar\" class=\"on-label\">YES</span>\n                    <span [hidden]=\"formData.primary.updb.requireNumericChar\" class=\"off-label\">NO</span>\n                    <div class=\"switch\"></div>\n                  </div>\n                </div>\n              </div>\n              <div class=\"config-item\">\n                <div class=\"config-container toggle-container\">\n                  <div class=\"form-field-title-container\">\n                    <div class=\"config-container-label\">Special</div>\n                    <div\n                      class=\"form-field-info infoicon\"\n                      matTooltip=\"Require special (non-alpha numeric) charachters. ie. !%$@*\"\n                      matTooltipPosition=\"below\"\n                    ></div>\n                  </div>\n                  <div\n                    (click)=\"toggleUpdbSpecial()\"\n                    [ngClass]=\"{ on: formData.primary.updb.requireSpecialChar }\"\n                    class=\"toggle\"\n                    >\n                    <span [hidden]=\"!formData.primary.updb.requireSpecialChar\" class=\"on-label\">YES</span>\n                    <span [hidden]=\"formData.primary.updb.requireSpecialChar\" class=\"off-label\">NO</span>\n                    <div class=\"switch\"></div>\n                  </div>\n                </div>\n              </div>\n            </div>\n          </lib-form-field-container>\n        }\n        <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n        <div [hidden]=\"!showMore\" class=\"form-group-column\">\n          <lib-form-field-container\n            [title]=\"'Custom Tags'\"\n            [label]=\"'OPTIONAL'\"\n            class=\"form-field-advanced\"\n            >\n            <lib-custom-tags [(tags)]=\"formData.tags\" [readOnly]=\"useStrictReadonlyForm\"></lib-custom-tags>\n          </lib-form-field-container>\n        </div>\n      </div>\n      <div class=\"form-group-column two-fifths\">\n        <lib-form-field-container\n          [title]=\"'Secondary Authentication'\"\n          [label]=\"'OPTIONAL'\"\n          [layout]=\"'column'\"\n          [contentStyle]=\"'z-index: 1000001'\"\n          >\n          <div class=\"form-field-label-container\">\n            <div class=\"form-field-title-container\">\n              <span class=\"form-field-title\">TOTP MFA</span>\n              <div\n                class=\"form-field-info infoicon\"\n                matTooltip=\"Require authenticating clients to have TOTP MFA enabled (Time-based, One-Time Password)\"\n                matTooltipPosition=\"below\"\n              ></div>\n            </div>\n            <div class=\"config-item\">\n              <div class=\"config-container toggle-container\">\n                <div class=\"form-field-title-container\">\n                  <div class=\"config-container-label\">Require TOTP</div>\n                </div>\n                <div\n                  (click)=\"toggleRequireTotp()\"\n                  [ngClass]=\"{ on: formData.secondary.requireTotp }\"\n                  class=\"toggle\"\n                  >\n                  <span [hidden]=\"!formData.secondary.requireTotp\" class=\"on-label\">YES</span>\n                  <span [hidden]=\"formData.secondary.requireTotp\" class=\"off-label\">NO</span>\n                  <div class=\"switch\"></div>\n                </div>\n              </div>\n            </div>\n          </div>\n          <div class=\"form-field-label-container\">\n            <div class=\"form-field-title-container\">\n              <span class=\"form-field-title\">JWT Signer</span>\n              <div\n                class=\"form-field-info infoicon\"\n                matTooltip=\"Require every client request to have a JWT from the specified External JTW Signer in the HTTP Authentication header\"\n                matTooltipPosition=\"below\"\n              ></div>\n            </div>\n            <lib-filter-select\n              class=\"auth-policy__jwt-signer-select\"\n              placeholder=\"Select JWT Signer...\"\n              optionLabel=\"name\"\n              optionValue=\"id\"\n              [options]=\"svc.jwtSigners\"\n              [showClear]=\"true\"\n              [panelClass]=\"'auth-policy__jwt-signer-select-panel'\"\n              (selectionChange)=\"secondaryJwtSignerChanged($event)\"\n              (filterChange)=\"jwtSignersFilterChangedDebounced($event)\"\n              [(ngModel)]=\"formData.secondary.requireExtJwtSigner\"\n              [disabled]=\"useStrictReadonlyForm\"\n            ></lib-filter-select>\n          </div>\n        </lib-form-field-container>\n        @if (showApiCalls) {\n          <lib-form-field-container\n            [title]=\"'API Calls'\"\n            [headerActions]=\"apiOptions\"\n            (actionRequested)=\"apiActionRequested($event)\"\n            [class]=\"'api-data-no-wrap'\"\n            >\n            <div class=\"form-row\">\n              <input class=\"form-field-input\" [value]=\"apiCallURL\"/>\n              <div class=\"icon-copy copy-text\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n            </div>\n            @if (formData) {\n              <lib-json-view [(data)]=\"apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n            }\n          </lib-form-field-container>\n        }\n      </div>\n    </div>\n    @if (formView === 'raw') {\n      <div class=\"form-group-column\">\n        @if (formData) {\n          <lib-json-view [(data)]=\"formData\" [readOnly]=\"useStrictReadonlyForm\"></lib-json-view>\n        }\n      </div>\n    }\n  </div>\n</div>\n@if (isLoading || !dataInit) {\n  <lib-loading-indicator [isLoading]=\"isLoading || !dataInit\"></lib-loading-indicator>\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Inject, Injectable} from '@angular/core';\nimport {DataTableFilterService, FilterObj} from \"../../features/data-table/data-table-filter.service\";\nimport _, {isEmpty, unset} from \"lodash\";\nimport moment from \"moment\";\nimport {ListPageServiceClass} from \"../../shared/list-page-service.class\";\nimport {\n    TableColumnDefaultComponent\n} from \"../../features/data-table/column-headers/table-column-default/table-column-default.component\";\nimport {CallbackResults} from \"../../features/list-page-features/list-page-form/list-page-form.component\";\nimport {SchemaService} from \"../../services/schema.service\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../services/settings.service\";\nimport {CsvDownloadService} from \"../../services/csv-download.service\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../features/extendable/extensions-noop.service\";\nimport {Service} from \"../../models/service\";\nimport {TableCellNameComponent} from \"../../features/data-table/cells/table-cell-name/table-cell-name.component\";\nimport {Router} from \"@angular/router\";\nimport {ConfirmComponent} from \"../../features/confirm/confirm.component\";\nimport {firstValueFrom} from \"rxjs\";\nimport {MatDialog} from \"@angular/material/dialog\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class CertificateAuthoritiesPageService extends ListPageServiceClass {\n\n    private paging = this.DEFAULT_PAGING;\n\n    resourceType = 'cas';\n    selectedConfig: any = {};\n    modalType = '';\n\n    override menuItems = [\n        {name: 'Edit', action: 'update'},\n        {name: 'Verify', action: 'verify'},\n        {name: 'Delete', action: 'delete'},\n    ]\n\n    constructor(\n        private schemaSvc: SchemaService,\n        @Inject(SETTINGS_SERVICE) settings: SettingsService,\n        filterService: DataTableFilterService,\n        csvDownloadService: CsvDownloadService,\n        @Inject(SHAREDZ_EXTENSION) extService: ExtensionService,\n        protected override router: Router,\n        private dialogForm: MatDialog\n    ) {\n        super(settings, filterService, csvDownloadService, extService, router);\n    }\n\n    initTableColumns(): any {\n\n        const verifiedHeaderComponentParams = {\n            filterType: 'SELECT',\n            enableSorting: true,\n            filterOptions: [\n                { label: 'All', value: '' },\n                { label: 'Verified', value: true },\n                { label: 'Unverified', value: false },\n            ]\n        };\n        const enabledComponentParams = {\n            filterType: 'SELECT',\n            enableSorting: true,\n            filterOptions: [\n                { label: 'All', value: '' },\n                { label: 'Enabled', value: true },\n                { label: 'Disabled', value: false },\n            ]\n        };\n        const createdAtHeaderComponentParams = {\n            filterType: 'DATETIME',\n        };\n        const jwtColumnRenderer = (row) => {\n            let cell = '';\n            if (row.data?.id && row.data?.isVerified) {\n                cell = `<span class=\"cert\"></span>`;\n            }\n            return cell;\n        }\n        return [\n            {\n                colId: 'name',\n                field: 'name',\n                headerName: 'Name',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: this.headerComponentParams,\n                cellRenderer: TableCellNameComponent,\n                cellRendererParams: { pathRoot: this.basePath },\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.openEditForm(data?.data?.id);\n                },\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: true,\n                filter: true,\n                sortColumn: this.sort.bind(this)\n            },\n            {\n                colId: 'isVerified',\n                field: 'isVerified',\n                headerName: 'Verified',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: verifiedHeaderComponentParams,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: true,\n                filter: true,\n                sortColumn: this.sort.bind(this),\n            },\n            {\n                colId: 'isAutoCaEnrollmentEnabled',\n                field: 'isAutoCaEnrollmentEnabled',\n                headerName: 'Auto Enrollment',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: enabledComponentParams,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: true,\n                filter: true,\n                sortColumn: this.sort.bind(this),\n            },\n            {\n                colId: 'isOttCaEnrollmentEnabled',\n                field: 'isOttCaEnrollmentEnabled',\n                headerName: 'OTT Auto',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: enabledComponentParams,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: true,\n                filter: true,\n                sortColumn: this.sort.bind(this),\n            },\n            {\n                colId: 'isAuthEnabled',\n                field: 'isAuthEnabled',\n                headerName: 'Auth Enabled',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: enabledComponentParams,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: true,\n                filter: true,\n                sortColumn: this.sort.bind(this),\n            },\n            {\n                colId: 'jwt',\n                field: 'jwt',\n                headerName: 'JWT',\n                cellRenderer: jwtColumnRenderer,\n                headerComponent: TableColumnDefaultComponent,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: true,\n                filter: true,\n                sortColumn: this.sort.bind(this),\n                width: this.remToPx(4.6875)\n            },\n            {\n                colId: 'createdAt',\n                field: 'createdAt',\n                headerName: 'Created At',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: createdAtHeaderComponentParams,\n                valueFormatter: this.createdAtFormatter,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n            },\n            this.ID_COLUMN_DEF\n        ];\n    }\n\n    getData(filters?: FilterObj[], sort?: any) {\n        // we can customize filters or sorting here before moving on...\n        return super.getTableData(this.resourceType, this.paging, filters, sort)\n            .then((results: any) => {\n                return this.processData(results);\n            });\n    }\n\n    validate = (formData): Promise<CallbackResults> => {\n        return Promise.resolve({ passed: true});\n    }\n\n    private processData(results: any) {\n        if (!isEmpty(results?.data)) {\n            //pre-process data before rendering\n            results.data = this.addActionsPerRow(results);\n        }\n        return results;\n    }\n\n    private addActionsPerRow(results: any): any[] {\n        return results.data.map((row) => {\n            let actionList = ['update', 'delete'];\n            if (!row.isVerified) {\n                actionList = ['update', 'verify', 'delete'];\n            }\n            row.actionList = actionList;\n            return row;\n        });\n    }\n\n    public openUpdate(item?: any) {\n        this.modalType = 'cas';\n        if (item) {\n            this.selectedConfig = item;\n            this.selectedConfig.badges = [];\n            unset(this.selectedConfig, '_links');\n        } else {\n            this.selectedConfig = new Service();\n        }\n        this.sideModalOpen = true;\n    }\n\n    public verifyCert(itemId, basePath?) {\n        basePath = basePath ? basePath : this.basePath;\n        this.router?.navigateByUrl(`${basePath}/${itemId}/verify`);\n    }\n\n    public getJwt(id) {\n        return this.dataService.getSubdata('cas', id,'jwt', {},'application/jwt').then((result: any) => {\n            const element = document.createElement('a');\n            element.setAttribute('href', 'data:application/ziti-jwt;charset=utf-8,' + encodeURIComponent(result));\n            element.setAttribute('download', id+\".jwt\");\n            element.style.display = 'none';\n            document.body.appendChild(element);\n            element.click();\n            document.body.removeChild(element);\n        });\n    }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, Inject, OnInit} from '@angular/core';\nimport {DataTableFilterService} from \"../../features/data-table/data-table-filter.service\";\nimport {CertificateAuthoritiesPageService} from \"./certificate-authorities-page.service\";\nimport {TabNameService} from \"../../services/tab-name.service\";\nimport {ListPageComponent} from \"../../shared/list-page-component.class\";\nimport {ConsoleEventsService} from \"../../services/console-events.service\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {ConfirmComponent} from \"../../features/confirm/confirm.component\";\nimport {firstValueFrom} from \"rxjs\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../features/extendable/extensions-noop.service\";\n\n\n@Component({\n    selector: 'lib-auth-policies',\n    templateUrl: './certificate-authorities-page.component.html',\n    styleUrls: ['./certificate-authorities-page.component.scss'],\n    standalone: false\n})\nexport class CertificateAuthoritiesPageComponent extends ListPageComponent implements OnInit {\n    title = 'Certificate Authorities'\n    tabs: { url: string, label: string }[] ;\n    isLoading: boolean;\n    formDataChanged = false;\n\n    constructor(\n        override svc: CertificateAuthoritiesPageService,\n        filterService: DataTableFilterService,\n        private tabNames: TabNameService,\n        consoleEvents: ConsoleEventsService,\n        dialogForm: MatDialog,\n        @Inject(SHAREDZ_EXTENSION) private extService: ExtensionService,\n    ) {\n        super(filterService, svc, consoleEvents, dialogForm, extService);\n    }\n\n    override ngOnInit() {\n        this.tabs = this.tabNames.getTabs('authentication');\n        this.svc.refreshData = this.refreshData;\n        super.ngOnInit();\n    }\n\n    headerActionClicked(action: string) {\n        switch (action) {\n            case 'add':\n                this.svc.openEditForm();\n                break;\n            case 'edit':\n                this.svc.openEditForm();\n                break;\n            case 'delete':\n                const selectedItems = this.rowData.filter((row) => {\n                    return row.selected;\n                });\n                const label = selectedItems.length > 1 ? 'certificate authorities' : 'certificate authority';\n                this.openBulkDelete(selectedItems, label);\n                break;\n            default:\n        }\n    }\n\n    tableAction(event: any) {\n        this.trackMenuAction(event?.action, event?.item);\n        switch(event?.action) {\n            case 'toggleAll':\n            case 'toggleItem':\n                this.itemToggled(event.item)\n                break;\n            case 'update':\n                this.svc.openEditForm(event.item?.id);\n                break;\n            case 'create':\n                this.svc.openEditForm();\n                break;\n            case 'delete':\n                this.deleteItem(event.item);\n                break;\n            case 'verify':\n                this.svc.verifyCert(event.item.id);\n                break;\n            case 'download-all':\n                this.downloadAllItems();\n                break;\n            case 'download-selected':\n                this.svc.downloadItems(this.selectedItems);\n                break;\n            default:\n                break;\n        }\n    }\n\n    trackMenuAction(action: string, item: any) {\n        this.extService?.consoleActionTriggered?.emit({\n            action,\n            page: 'certificate-authority',\n            item,\n            type:'menu-action'\n        });\n    }\n    deleteItem(item: any) {\n        this.openBulkDelete([item], 'certificate authority');\n    }\n\n    closeModal(event: any) {\n        this.svc.sideModalOpen = false;\n        if(event?.refresh) {\n            this.refreshData();\n        }\n    }\n\n    dataChanged(event) {\n        this.formDataChanged = event;\n    }\n\n    override gridReady(event) {\n        event.api.addEventListener('cellClicked', (event) => {\n            if (event.column.getColId() === 'jwt') {\n                if (event.data?.id && event.data.isVerified) {\n                    this.isLoading = true\n                    this.svc.getJwt(event.data?.id).finally(() => {\n                        this.isLoading = false;\n                    });\n                }\n            }\n        });\n        super.gridReady(event);\n    }\n}\n","<div class=\"ziti-page-container ziti-cert-authorities-container\">\n  <lib-list-page-header [title]=\"title\"\n    [tabs]=\"tabs\"\n    [showAdd]=\"!itemsSelected\"\n    [blockCreate]=\"headerBlockCreate\"\n    [blockDelete]=\"headerBlockDelete\"\n  (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n\n  <lib-data-table [tableId]=\"'certificate-authorities'\"\n    [noItemsReadonly]=\"headerBlockCreate\"\n    [accessDenied]=\"headerBlockRead\"\n    [rowData]=\"rowData\"\n    [isLoading]=\"isLoading\"\n    [columnDefinitions]=\"columnDefs\"\n    (actionRequested)=\"tableAction($event)\"\n    [startCount]=\"startCount\"\n    [endCount]=\"endCount\"\n    [totalCount]=\"totalCount\"\n    [emptyMsg]=\"'No Certificate Authorities defined, Click the plus to add a Configuration.'\"\n    [filterApplied]=\"filterApplied\"\n    [menuItems]=\"svc.menuItems\"\n    (gridReady)=\"gridReady($event)\"\n    >\n  </lib-data-table>\n</div>\n@if (isLoading) {\n  <lib-loading-indicator [isLoading]=\"isLoading\"></lib-loading-indicator>\n}\n","export class CertificateAuthority {\n    name: string = '';\n    id: string = '';\n    isAutoCaEnrollmentEnabled: boolean = false;\n    isOttCaEnrollmentEnabled: boolean = false;\n    identityRoles: any[] = [];\n    identityNameFormat: string = '';\n    isAuthEnabled: boolean = false;\n    certPem: string = '';\n    externalIdClaim: any = undefined;\n    tags: any = {};\n    verificationToke: string = '';\n}","import {Injectable, Inject} from '@angular/core';\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../services/ziti-data.service\";\nimport {cloneDeep, defer, invert, isBoolean, isEmpty, isNil, keys} from \"lodash\";\nimport {GrowlerModel} from \"../../messaging/growler.model\";\nimport {GrowlerService} from \"../../messaging/growler.service\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../extendable/extensions-noop.service\";\nimport {ValidationService} from \"../../../services/validation.service\";\nimport {AuthPolicy} from \"../../../models/auth-policy\";\nimport {CertificateAuthority} from \"../../../models/certificate-authority\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class CertificateAuthorityFormService {\n\n    items: any[] = [];\n    errors: any[] = [];\n    saveDisabled = false;\n\n    jwtSigners = [];\n    jwtSignerNamedAttributes = [];\n    jwtSignerNamedAttributesMap = {};\n    jwtSignersLoading = false;\n\n    selectedSecondaryJwtSigner;\n    filteredJwtSigners;\n\n    paging = {\n        filter: \"\",\n        noSearch: true,\n        order: \"asc\",\n        page: 1,\n        searchOn: \"name\",\n        sort: \"name\",\n        total: 100\n    }\n\n    constructor(\n        @Inject(ZITI_DATA_SERVICE) private dataService: ZitiDataService,\n        @Inject(SHAREDZ_EXTENSION)private extService: ExtensionService,\n        private growlerService: GrowlerService,\n        private validationService: ValidationService\n    ) {\n    }\n\n    save(formData) {\n        const isUpdate = !isEmpty(formData.id);\n        const data: any = this.getAuthPolicyDataModel(formData, isUpdate);\n        let prom;\n        if (isUpdate) {\n            prom = this.dataService.put('cas', data, formData.id, true);\n        } else {\n            prom = this.dataService.post('cas', data, true);\n        }\n\n        return prom.then(async (result: any) => {\n            const id = isUpdate ? formData.id : (result?.data?.id || result?.id);\n            let config = await this.dataService.getSubdata('cas', id, '').then((svcData) => {\n                return svcData.data;\n            });\n            return this.extService.formDataSaved(config).then((formSavedResult: any) => {\n                if (!formSavedResult) {\n                    return config;\n                }\n                const growlerData = new GrowlerModel(\n                    'success',\n                    'Success',\n                    `Certificate Authority ${isUpdate ? 'Updated' : 'Created'}`,\n                    `Successfully ${isUpdate ? 'updated' : 'created'} Certificate Authority: ${formData.name}`,\n                );\n                this.growlerService.show(growlerData);\n                return config;\n            }).catch((result) => {\n                return false;\n            });\n        }).catch((resp) => {\n            const errorMessage = this.dataService.getErrorMessage(resp);\n            const growlerData = new GrowlerModel(\n                'error',\n                'Error',\n                `Error ${isUpdate ? 'Updating' : 'Creating'} Certificate Authority`,\n                errorMessage,\n            );\n            this.growlerService.show(growlerData);\n            throw resp;\n        })\n    }\n\n    getIdentityRoleAttributes() {\n        return this.dataService.get('identity-role-attributes', {}, []);\n    }\n\n    getAuthPolicyDataModel(formData, isUpdate) {\n        const saveModel = new CertificateAuthority();\n        const modelProperties = keys(saveModel);\n        modelProperties.forEach((prop) => {\n            switch(prop) {\n                default:\n                    saveModel[prop] = formData[prop];\n            }\n        });\n        return saveModel;\n    }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {\n    Component, ElementRef,\n    EventEmitter, Inject,\n    Input,\n    OnDestroy,\n    OnInit, Output,\n    ViewChild,\n} from '@angular/core';\nimport {CertificateAuthorityFormService} from \"./certificate-authority-form.service\";\nimport {SchemaService} from \"../../../services/schema.service\";\nimport {KEY_CODES, ProjectableForm} from \"../projectable-form.class\";\nimport {GrowlerService} from \"../../messaging/growler.service\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../extendable/extensions-noop.service\";\n\nimport {cloneDeep, defer, delay, forOwn, keys, invert, isEmpty, isNil, unset, sortedUniq, debounce} from 'lodash';\nimport {GrowlerModel} from \"../../messaging/growler.model\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../../services/settings.service\";\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../services/ziti-data.service\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {Location} from \"@angular/common\";\nimport {ValidationService} from \"../../../services/validation.service\";\nimport {CertificateAuthority} from \"../../../models/certificate-authority\";\n\n@Component({\n    selector: 'lib-certificate-authority',\n    templateUrl: './certificate-authority-form.component.html',\n    styleUrls: ['./certificate-authority-form.component.scss'],\n    standalone: false\n})\nexport class CertificateAuthorityFormComponent extends ProjectableForm implements OnInit, OnDestroy {\n\n    @Input() override errors: any = {};\n    @Output() close: EventEmitter<void> = new EventEmitter<void>();\n\n    _externalIdClaim = false;\n\n    formView = 'simple';\n    options: any[] = [];\n    isEditing = !isEmpty(this.formData.id);\n    formDataInvalid = false;\n    editMode = false;\n    items: any = [];\n    settings: any = {};\n    fileSelectOpening = false;\n    identityRoleAttributes = [];\n    badges: any[] = [];\n    override entityType = 'cas';\n    override entityClass = CertificateAuthority;\n\n    locations = ['COMMON_NAME', 'SAN_URI', 'SAN_EMAIL'];\n    matchers = ['ALL', 'PREFIX', 'SUFFIX', 'SCHEME'];\n    parsers = ['NONE', 'SPLIT'];\n\n    @ViewChild('fileSelect') filterInput: ElementRef;\n\n    constructor(\n        public svc: CertificateAuthorityFormService,\n        private schemaSvc: SchemaService,\n        growlerService: GrowlerService,\n        @Inject(SHAREDZ_EXTENSION) extService: ExtensionService,\n        @Inject(SETTINGS_SERVICE) protected override settingsService: SettingsService,\n        @Inject(ZITI_DATA_SERVICE) override zitiService: ZitiDataService,\n        protected override router: Router,\n        protected override route: ActivatedRoute,\n        location: Location,\n        private validationService: ValidationService\n    ) {\n        super(growlerService, extService, zitiService, router, route, location, settingsService);\n    }\n\n    override ngOnInit(): void {\n        super.ngOnInit();\n        this.svc.getIdentityRoleAttributes().then((results) => {\n            this.identityRoleAttributes = results?.data || [];\n        });\n        this.settingsService.settingsChange.subscribe((results:any) => {\n            this.settings = results;\n        });\n    }\n\n    protected override entityUpdated() {\n        this.badges = [];\n        if (this.formData.id && this.formData.isVerified) {\n            this.badges.push({label: 'Verified', class: 'verified', circle: 'verified'});\n        } else if (this.formData.id) {\n            this.badges.push({label: 'Unverified', class: 'unreg'});\n        }\n        super.entityUpdated();\n    }\n\n    ngOnDestroy(): void {\n        this.clearForm();\n    }\n\n    headerActionRequested(event) {\n        switch(event.name) {\n            case 'save':\n                this.save(event);\n                break;\n            case 'close':\n                this.returnToListPage();\n                break;\n            case 'toggle-view':\n                this.formView = event.data;\n                break;\n        }\n    }\n\n    multiActionRequested(action) {\n        switch (action.id) {\n            case 'save':\n                this.save();\n                break;\n            case 'delete':\n                this.deleteEntity();\n                break;\n        }\n    }\n\n    externalIdClaimChanged() {\n        if (this.externalIdClaim && !this.formData.externalIdClaim) {\n            this.formData.externalIdClaim = {\n                location: '',\n                matcher: '',\n                parser: '',\n                index: 0,\n                matcherCriteria: '',\n                parserCriteria: ''\n            }\n        }\n    }\n\n    override clear() {\n        this.formData.configTypeId = '';\n        this.clearForm();\n    }\n\n    clearForm() {\n        this.items.forEach((item: any) => {\n            if (item?.component) item.component.destroy();\n        });\n        this.errors = {};\n        this.items = [];\n        this.formData = new CertificateAuthority();\n        if (this.subscription) this.subscription.unsubscribe();\n    }\n\n    async save(event?: any) {\n        if (!this.canSaveByPermissions()) {\n            return;\n        }\n        if(!this.validate()) {\n            return;\n        }\n        const tagVals = this.getTagValues();\n        if (!isEmpty(tagVals)) {\n            forOwn(tagVals, (value, key) => {\n                this.formData.tags[key] = value;\n            });\n        }\n        const apiData = this.apiData;\n        apiData.id = this.formData.id;\n        this.isLoading = true;\n        this.svc.save(apiData).then((result) => {\n            if (this.isModal) {\n                this.closeModal(true, true);\n                return;\n            }\n            this.initData = this.formData;\n            this._dataChange = false;\n            this.returnToListPage();\n        }).finally(() => {\n            this.isLoading = false;\n        });\n    }\n\n    validate() {\n        this.errors = {};\n        const labels = [];\n        const growlers = [];\n        if (isEmpty(this.formData.name)) {\n            this.errors.name = true;\n            labels.push('Name');\n        }\n        if (this.externalIdClaim) {\n            if (isEmpty(this.claimLocation)) {\n                this.errors.claimLocation = true;\n                labels.push('Location');\n            }\n            if (isEmpty(this.parser)) {\n                this.errors.parser = true;\n                labels.push('Parser');\n            }\n            if (isEmpty(this.matcher)) {\n                this.errors.matcher = true;\n                labels.push('Matcher');\n            }\n            if (isEmpty(this.parserCriteria)) {\n                this.errors.parserCriteria = true;\n                labels.push('Parser Criteria');\n            }\n            if (isEmpty(this.matcherCriteria)) {\n                this.errors.matcherCriteria = true;\n                labels.push('Matcher Criteria');\n            }\n            if (isNaN(this.index) || this.index < 0) {\n                this.errors.index = true;\n                labels.push('Index');\n            }\n        }\n        if (!this.validationService.isValidPEM(this.formData.certPem)) {\n            this.errors.certPem = true;\n            labels.push('Cert PEM');\n        }\n        if (!isEmpty(this.errors)) {\n            let errorLabels = '';\n            labels.forEach((label, index) => {\n                errorLabels += `<li>${label}</li>`;\n            });\n            errorLabels = `<ul>${errorLabels}</ul>`;\n            growlers.push(new GrowlerModel(\n                'error',\n                'Invalid',\n                `Missing Form Data`,\n                `Please enter a value for the highlighted fields: ${errorLabels}`,\n            ));\n        }\n        if (!isEmpty(growlers)) {\n            growlers.forEach((growlerData) => {\n                this.growlerService.show(growlerData);\n            });\n            return isEmpty(this.errors);\n        }\n\n        growlers.forEach((growlerData) => {\n            this.growlerService.show(growlerData);\n        });\n        return isEmpty(this.errors);\n    }\n\n    get apiCallURL() {\n        return this.settings.selectedEdgeController + '/edge/management/v1/cas' + (this.formData.id ? `/${this.formData.id}` : '');\n    }\n\n    get apiData(): any {\n        const data: any = {\n            name: this.formData.name || '',\n            isAutoCaEnrollmentEnabled: this.formData.isAutoCaEnrollmentEnabled,\n            isOttCaEnrollmentEnabled: this.formData.isOttCaEnrollmentEnabled,\n            identityRoles: this.formData.identityRoles || [],\n            identityNameFormat: this.formData.identityNameFormat,\n            isAuthEnabled: this.formData.isAuthEnabled,\n            certPem: this.formData.certPem,\n\n            tags: this.formData.tags || {}\n        };\n        if (this.externalIdClaim) {\n            data.externalIdClaim =  this.formData.externalIdClaim;\n        }\n        this._apiData = data;\n        return this._apiData;\n    }\n\n    _apiData: any = {};\n    set apiData(data) {\n        this._apiData = data;\n    }\n\n    dataChanged(event) {\n        this._apiData = cloneDeep(this.apiData);\n    }\n\n    get externalIdClaim() {\n        if (this.formData.externalIdClaim) {\n            this._externalIdClaim = true;\n        }\n        return this._externalIdClaim;\n    }\n\n    set externalIdClaim(val) {\n        if (!val) {\n            this.formData.externalIdClaim = undefined;\n        }\n        this._externalIdClaim = val;\n    }\n\n    toggleSwitch(prop) {\n        if (prop === 'externalIdClaim') {\n            this.externalIdClaim = !this.externalIdClaim;\n        }\n        this.formData[prop] = !this.formData[prop];\n    }\n\n    openFileSelect(event: any) {\n        this.filterInput.nativeElement.click();\n        this.fileSelectOpening = true;\n        delay(() => {\n            this.fileSelectOpening = false;\n        }, 1000);\n    }\n\n    selectPemFile(event: any) {\n        const file: File = event?.target?.files[0];\n\n        if (file) {\n            const fileReader = new FileReader();\n            fileReader.onload = (fileLoadedEvent) => {\n                const textFromSelectedFile: any = fileLoadedEvent.target?.result;\n                if (!this.validationService.isValidPEM(textFromSelectedFile?.trim())) {\n                    this.errors.certPem = true;\n                    const growlerData = new GrowlerModel(\n                        'error',\n                        'Invalid',\n                        `Cert PEM Invalid`,\n                        `The file selected for the Cert PEM field is invalid. Please check your input and try again.`,\n                    );\n                    this.growlerService.show(growlerData);\n                    this.formData.certPem = 'Invalid PEM. Please select or enter a valid PEM certificate.';\n                } else {\n                    unset(this.errors, 'certPem');\n                    this.formData.certPem = textFromSelectedFile;\n                }\n            };\n            fileReader.readAsText(file, \"UTF-8\");\n        }\n    }\n\n    apiActionRequested(action) {\n        switch (action.id) {\n            case 'cli':\n                this.copyCLICommand();\n                break;\n            case 'curl':\n                this.copyCURLCommand();\n                break;\n        }\n    }\n\n    copyCLICommand() {\n        let command = `ziti edge ${this.formData.id ? 'update' : 'create'} ca ${this.formData.id ? `'${this.formData.id}'` : ''} ${this.formData.id ? '--name' : ''} '${this.formData.name}' ${this.formData.id ? '' : this.formData.certPem} --identity-name-format '${this.formData.identityNameFormat}' --auth '${this.formData.isAuthEnabled}' --auth '${this.formData.isAuthEnabled}' --autoca '${this.formData.isAutoCaEnrollmentEnabled}' --ottca '${this.formData.isOttCaEnrollmentEnabled}'`;\n        if (this.externalIdClaim) {\n            command += ` --location '${this.formData.externalIdClaim.location}' --matcher '${this.formData.externalIdClaim.matcher}' --parser '${this.formData.externalIdClaim.parser}' --index '${this.formData.externalIdClaim.index}' --matcher-criteria '${this.formData.externalIdClaim.matcherCriteria}' --parser-criteria '${this.formData.externalIdClaim.parserCriteria}'`\n        }\n\n        navigator.clipboard.writeText(command);\n        const growlerData = new GrowlerModel(\n            'success',\n            'Success',\n            `Text Copied`,\n            `CLI command copied to clipboard`,\n        );\n        this.growlerService.show(growlerData);\n    }\n\n    copyCURLCommand() {\n        const command = `curl '${this.apiCallURL}' \\\\\n    ${this.formData.id ? '--request PATCH \\\\' : '\\\\'}\n    -H 'accept: application/json' \\\\\n    -H 'content-type: application/json' \\\\\n    -H 'zt-session: ${this.settings.session.id}' \\\\\n    --data-raw '${JSON.stringify(this.apiData)}'`;\n\n        navigator.clipboard.writeText(command);\n        const growlerData = new GrowlerModel(\n            'success',\n            'Success',\n            `Text Copied`,\n            `CURL command copied to clipboard`,\n        );\n        this.growlerService.show(growlerData);\n    }\n\n    verifyCertificate(event) {\n        event.stopPropagation();\n        event.preventDefault();\n        this.router?.navigateByUrl(`${this.basePath}/${this.formData.id}/verify`);\n    }\n\n    get claimLocation() {\n        return this.formData.externalIdClaim?.location;\n    }\n\n    set claimLocation(loc) {\n        if (!this.formData.externalIdClaim) {\n            return;\n        }\n        this.formData.externalIdClaim.location = loc;\n    }\n\n    get matcher() {\n        return this.formData.externalIdClaim?.matcher;\n    }\n\n    set matcher(matcher) {\n        if (!this.formData.externalIdClaim) {\n            return;\n        }\n        this.formData.externalIdClaim.matcher = matcher;\n    }\n\n    get parser() {\n        return this.formData.externalIdClaim?.parser;\n    }\n\n    set parser(parser) {\n        if (!this.formData.externalIdClaim) {\n            return;\n        }\n        this.formData.externalIdClaim.parser = parser;\n    }\n\n    get index() {\n        return this.formData.externalIdClaim?.index;\n    }\n\n    set index(index) {\n        if (!this.formData.externalIdClaim) {\n            return;\n        }\n        this.formData.externalIdClaim.index = index;\n    }\n\n    get matcherCriteria() {\n        return this.formData.externalIdClaim?.matcherCriteria;\n    }\n\n    set matcherCriteria(matcherCriteria) {\n        if (!this.formData.externalIdClaim) {\n            return;\n        }\n        this.formData.externalIdClaim.matcherCriteria = matcherCriteria;\n    }\n\n    get parserCriteria() {\n        return this.formData.externalIdClaim?.parserCriteria;\n    }\n\n    set parserCriteria(parserCriteria) {\n        if (!this.formData.externalIdClaim) {\n            return;\n        }\n        this.formData.externalIdClaim.parserCriteria = parserCriteria;\n    }\n}\n","<div class=\"projectable-form-wrapper\"\n  (keyup.enter)=\"save($event)\"\n  (keyup.escape)=\"closeModal(false)\"\n  tabindex=\"0\"\n  >\n  <lib-form-header\n    [data]=\"formData\"\n    [title]=\"(formData.id ? 'Certificate Authority Details' : 'Create Certificate Authority')\"\n    [moreActions]=\"moreActions\"\n    [multiActions]=\"multiActions\"\n    (actionRequested)=\"headerActionRequested($event)\"\n    (multiActionRequested)=\"multiActionRequested($event)\"\n    [(formView)]=\"formView\"\n    [saveDisabled]=\"svc.saveDisabled || formDataInvalid || formPermissionSaveDisabled\"\n    [saveTooltip]=\"formPermissionSaveTooltip\"\n    [badges]=\"badges\"\n    [strictReadonlyUi]=\"useStrictReadonlyForm\"\n  ></lib-form-header>\n  <div class=\"jwt-signer-form-container projectable-form-container\">\n    <div class=\"projectable-form-main-column form-group-row\" [hidden]=\"formView !== 'simple'\">\n      <div class=\"form-group-column three-fifths\">\n        <lib-form-field-container\n          [title]=\"'Name'\"\n          [label]=\"useStrictReadonlyForm ? '' : 'REQUIRED'\"\n          >\n          @if (!useStrictReadonlyForm) {\n            <input class=\"form-field-input\" [(ngModel)]=\"formData.name\" [ngClass]=\"{error: errors['name']}\" placeholder=\"Name this Certificate Authority\"/>\n          } @else {\n            <div class=\"form-field-readonly-value\">{{ formData.name }}</div>\n          }\n        </lib-form-field-container>\n        <lib-form-field-container\n          [title]=\"'Identity Name Format'\"\n          [contentStyle]=\"'z-index: 99999999'\"\n          [label]=\"useStrictReadonlyForm ? '' : 'OPTIONAL'\"\n          [helpText]=\"'The identity name format used to name automatically enrolling identities. Defaults to [caName]-[commonName]'\"\n          >\n          @if (!useStrictReadonlyForm) {\n            <input class=\"form-field-input\" [(ngModel)]=\"formData.identityNameFormat\" [ngClass]=\"{error: errors['identityNameFormat']}\" placeholder=\"Defaults to [caName]-[commonName]\"/>\n          } @else {\n            <div class=\"form-field-readonly-value\">{{ formData.identityNameFormat }}</div>\n          }\n        </lib-form-field-container>\n        <lib-form-field-container\n          [title]=\"'Identity Roles'\"\n          [contentStyle]=\"'z-index: 99999999'\"\n          [label]=\"useStrictReadonlyForm ? '' : 'OPTIONAL'\"\n          [helpText]=\"'The identity roles to give to automatically enrolling identities'\"\n          >\n          <lib-tag-selector\n            [disableField]=\"useStrictReadonlyForm\"\n            [disableCreate]=\"useStrictReadonlyForm\"\n            [(selectedRoleAttributes)]=\"formData.identityRoles\"\n            [availableRoleAttributes]=\"identityRoleAttributes\"\n            [placeholder]=\"'Type to filter and enter to assign'\"\n            [hasError]=\"errors.dialIdentities\"\n          ></lib-tag-selector>\n        </lib-form-field-container>\n        <lib-form-field-container\n          [title]=\"'Enrollment Options'\"\n          [layout]=\"'row'\"\n          >\n          <div class=\"config-item\">\n            <div class=\"config-container toggle-container\">\n              <div class=\"form-field-title-container\">\n                <div class=\"config-container-label\">Auto Enroll</div>\n                <div\n                  class=\"form-field-info infoicon\"\n                  matTooltip=\"Allows client certificates of the CA to automatically enroll when encountered\"\n                  matTooltipPosition=\"below\"\n                ></div>\n              </div>\n              <div\n                (click)=\"toggleSwitch('isAutoCaEnrollmentEnabled')\"\n                [ngClass]=\"{ on: formData.isAutoCaEnrollmentEnabled }\"\n                class=\"toggle\"\n                >\n                <span [hidden]=\"!formData.isAutoCaEnrollmentEnabled\" class=\"on-label\">YES</span>\n                <span [hidden]=\"formData.isAutoCaEnrollmentEnabled\" class=\"off-label\">NO</span>\n                <div class=\"switch\"></div>\n              </div>\n            </div>\n          </div>\n          <div class=\"config-item\">\n            <div class=\"config-container toggle-container\">\n              <div class=\"form-field-title-container\">\n                <div class=\"config-container-label\">OTT Enroll</div>\n                <div\n                  class=\"form-field-info infoicon\"\n                  matTooltip=\"Allows client certificates of the CA to enroll if an identity with an ottca enrollment was created\"\n                  matTooltipPosition=\"below\"\n                ></div>\n              </div>\n              <div\n                (click)=\"toggleSwitch('isOttCaEnrollmentEnabled')\"\n                [ngClass]=\"{ on: formData.isOttCaEnrollmentEnabled }\"\n                class=\"toggle\"\n                >\n                <span [hidden]=\"!formData.isOttCaEnrollmentEnabled\" class=\"on-label\">YES</span>\n                <span [hidden]=\"formData.isOttCaEnrollmentEnabled\" class=\"off-label\">NO</span>\n                <div class=\"switch\"></div>\n              </div>\n            </div>\n          </div>\n          <div class=\"config-item\">\n            <div class=\"config-container toggle-container\">\n              <div class=\"form-field-title-container\">\n                <div class=\"config-container-label\">Auth Enabled</div>\n                <div\n                  class=\"form-field-info infoicon\"\n                  matTooltip=\"Allows client certificates of the CA to attempt to enroll\"\n                  matTooltipPosition=\"below\"\n                ></div>\n              </div>\n              <div\n                (click)=\"toggleSwitch('isAuthEnabled')\"\n                [ngClass]=\"{ on: formData.isAuthEnabled }\"\n                class=\"toggle\"\n                >\n                <span [hidden]=\"!formData.isAuthEnabled\" class=\"on-label\">YES</span>\n                <span [hidden]=\"formData.isAuthEnabled\" class=\"off-label\">NO</span>\n                <div class=\"switch\"></div>\n              </div>\n            </div>\n          </div>\n        </lib-form-field-container>\n        <lib-form-field-container\n          [title]=\"'External ID Claim'\"\n          [layout]=\"'column'\"\n          [helpText]=\"'Configuration used to pull values out of the x509 client certificate used to match identity externalId'\"\n          [showToggle]=\"true\"\n          [(headerToggle)]=\"externalIdClaim\"\n          (headerToggleChange)=\"externalIdClaimChanged()\"\n          >\n          <div class=\"form-field-input-group\" [ngClass]=\"{disabled: !externalIdClaim}\">\n            <div class=\"form-field-row\">\n              <div class=\"form-field-label-container\">\n                <div class=\"form-field-title-container\">\n                  <span class=\"form-field-title\">Location</span>\n                  <div\n                    class=\"form-field-info infoicon\"\n                    matTooltip=\"Defines which value(s) in an x509 certificate will be processed\"\n                    matTooltipPosition=\"below\"\n                  ></div>\n                </div>\n                <select [(ngModel)]=\"claimLocation\" id=\"ClaimLocation\" class=\"form-field-dropdown\" [disabled]=\"!externalIdClaim\" [ngClass]=\"{error: errors['claimLocation']}\">\n                  <option value=\"\">Select an option</option>\n                  @for (loc of locations; track loc) {\n                    <option [value]=\"loc\">\n                      {{ loc }}\n                    </option>\n                  }\n                </select>\n              </div>\n              <div class=\"form-field-label-container\">\n                <div class=\"form-field-title-container\">\n                  <span class=\"form-field-title\">Matcher</span>\n                  <div\n                    class=\"form-field-info infoicon\"\n                    matTooltip=\"Defines how values from location will be filtered\"\n                    matTooltipPosition=\"below\"\n                  ></div>\n                </div>\n                <select [(ngModel)]=\"matcher\" id=\"ClaimMatcher\" class=\"form-field-dropdown\" [disabled]=\"!externalIdClaim\" [ngClass]=\"{error: errors['matcher']}\">\n                  <option value=\"\">Select an option</option>\n                  @for (matcher of matchers; track matcher) {\n                    <option [value]=\"matcher\">\n                      {{ matcher }}\n                    </option>\n                  }\n                </select>\n              </div>\n              <div class=\"form-field-label-container\">\n                <div class=\"form-field-title-container\">\n                  <span class=\"form-field-title\">Parser</span>\n                  <div\n                    class=\"form-field-info infoicon\"\n                    matTooltip=\"Defines how values from location filtered by matcher will be parsed\"\n                    matTooltipPosition=\"below\"\n                  ></div>\n                </div>\n                <select [(ngModel)]=\"parser\" id=\"ClaimParser\" class=\"form-field-dropdown\" [disabled]=\"!externalIdClaim\" [ngClass]=\"{error: errors['parser']}\">\n                  <option value=\"\">Select an option</option>\n                  @for (parser of parsers; track parser) {\n                    <option [value]=\"parser\">\n                      {{ parser }}\n                    </option>\n                  }\n                </select>\n              </div>\n            </div>\n            <div class=\"form-field-row\">\n              <div class=\"form-field-label-container\">\n                <div class=\"form-field-title-container\">\n                  <span class=\"form-field-title\">Index</span>\n                  <div\n                    class=\"form-field-info infoicon\"\n                    matTooltip=\"Should multiple values still be available after location, matcher, and parser processing the integer value here will be used from the set\"\n                    matTooltipPosition=\"below\"\n                  ></div>\n                </div>\n                <input class=\"form-field-input\" type=\"number\" placeholder=\"Enter a number\" [(ngModel)]=\"index\" [ngClass]=\"{error: errors['index']}\" [disabled]=\"!externalIdClaim\"/>\n              </div>\n              <div class=\"form-field-label-container\">\n                <div class=\"form-field-title-container\">\n                  <span class=\"form-field-title\">Match Criteria</span>\n                  <div\n                    class=\"form-field-info infoicon\"\n                    matTooltip=\"Defines the PREFIX, SUFFIX, or SCHEME to look for based on matcher\"\n                    matTooltipPosition=\"below\"\n                  ></div>\n                </div>\n                <input class=\"form-field-input\" placeholder=\"Enter matcher criteria\" [(ngModel)]=\"matcherCriteria\" [ngClass]=\"{error: errors['matcherCriteria']}\" [disabled]=\"!externalIdClaim\"/>\n              </div>\n              <div class=\"form-field-label-container\">\n                <div class=\"form-field-title-container\">\n                  <span class=\"form-field-title\">Parser Criteria</span>\n                  <div\n                    class=\"form-field-info infoicon\"\n                    matTooltip=\"Defines the criteria to provide to parser\"\n                    matTooltipPosition=\"below\"\n                  ></div>\n                </div>\n                <input class=\"form-field-input\" placeholder=\"Enter parser criteria\" [(ngModel)]=\"parserCriteria\" [ngClass]=\"{error: errors['parserCriteria']}\" [disabled]=\"!externalIdClaim\"/>\n              </div>\n            </div>\n          </div>\n        </lib-form-field-container>\n        <lib-form-field-container\n          [title]=\"'PEM'\"\n          [label]=\"'REQUIRED'\"\n          >\n          <div class=\"form-field-input-group\">\n            <div class=\"form-field-label-container select-file-label-container\">\n              <div class=\"form-field-header\">\n                <div class=\"form-field-title-container\">\n                  <span class=\"form-field-title\">Enter PEM</span>\n                </div>\n                <span class=\"select-file-button\" (click)=\"openFileSelect($event)\">\n                  Select File\n                  @if (fileSelectOpening) {\n                    <div class=\"spinner\"></div>\n                  }\n                </span>\n                <input #fileSelect type=\"file\" style=\"display:none\" (change)=\"selectPemFile($event)\">\n              </div>\n              <textarea placeholder=\"Paste pem contents or select file\" [(ngModel)]=\"formData.certPem\" [ngClass]=\"{error: errors['certPem']}\"></textarea>\n            </div>\n          </div>\n        </lib-form-field-container>\n        <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n        <div [hidden]=\"!showMore\" class=\"form-group-column\">\n          <lib-form-field-container\n            [title]=\"'Custom Tags'\"\n            [label]=\"'OPTIONAL'\"\n            class=\"form-field-advanced\"\n            >\n            <lib-custom-tags [(tags)]=\"formData.tags\" [readOnly]=\"useStrictReadonlyForm\"></lib-custom-tags>\n          </lib-form-field-container>\n        </div>\n      </div>\n      <div class=\"form-group-column two-fifths\">\n        @if (formData.id && !this.formData.isVerified) {\n          <lib-form-field-container\n            [showHeader]=\"false\"\n            >\n            <a class=\"download-button\" href=\"./{{this.basePath}}/{{this.formData.id}}/verify\" (click)=\"verifyCertificate($event)\">\n              <div class=\"verify-certificate\"></div>\n              <span>Verify Certificate</span>\n              <div class=\"tap-to-download\"></div>\n            </a>\n          </lib-form-field-container>\n        }\n        @if (showApiCalls) {\n          <lib-form-field-container\n            [title]=\"'API Calls'\"\n            [headerActions]=\"apiOptions\"\n            (actionRequested)=\"apiActionRequested($event)\"\n            [class]=\"'api-data-no-wrap'\"\n            >\n            <div class=\"form-row\">\n              <input class=\"form-field-input\" [value]=\"apiCallURL\"/>\n              <div class=\"icon-copy copy-text\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n            </div>\n            @if (formData) {\n              <lib-json-view [(data)]=\"apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n            }\n          </lib-form-field-container>\n        }\n      </div>\n    </div>\n    @if (formView === 'raw') {\n      <div class=\"form-group-column\">\n        @if (formData) {\n          <lib-json-view [(data)]=\"formData\" [readOnly]=\"useStrictReadonlyForm\"></lib-json-view>\n        }\n      </div>\n    }\n  </div>\n</div>\n@if (isLoading) {\n  <lib-loading-indicator [isLoading]=\"isLoading\"></lib-loading-indicator>\n}\n","import {Injectable, Inject} from '@angular/core';\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../../services/ziti-data.service\";\nimport {GrowlerModel} from \"../../../messaging/growler.model\";\nimport {GrowlerService} from \"../../../messaging/growler.service\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../../extendable/extensions-noop.service\";\nimport {ValidationService} from \"../../../../services/validation.service\";\nimport {CertificateAuthority} from \"../../../../models/certificate-authority\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class VerifyCertificateService {\n\n    items: any[] = [];\n    errors: any[] = [];\n    saveDisabled = false;\n\n    paging = {\n        filter: \"\",\n        noSearch: true,\n        order: \"asc\",\n        page: 1,\n        searchOn: \"name\",\n        sort: \"name\",\n        total: 100\n    }\n\n    constructor(\n        @Inject(ZITI_DATA_SERVICE) private dataService: ZitiDataService,\n        @Inject(SHAREDZ_EXTENSION)private extService: ExtensionService,\n        private growlerService: GrowlerService,\n        private validationService: ValidationService\n    ) {\n    }\n\n    save(formData, cert) {\n        return this.dataService.post(`cas/${formData.id}/verify`, cert, true, 'text/plain').then(async (result: any) => {\n            const growlerData = new GrowlerModel(\n                'success',\n                'Success',\n                `Certificate Verified`,\n                `Successfully verified certificate for this certificate authority`,\n            );\n            this.growlerService.show(growlerData);\n        }).catch((resp) => {\n            const errorMessage = this.dataService.getErrorMessage(resp);\n            const growlerData = new GrowlerModel(\n                'error',\n                'Error',\n                `Error Verifying Certificate`,\n                errorMessage,\n            );\n            this.growlerService.show(growlerData);\n            throw errorMessage;\n        })\n    }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {\n    Component, ElementRef,\n    EventEmitter, Inject,\n    Input,\n    OnDestroy,\n    OnInit, Output,\n    ViewChild,\n} from '@angular/core';\nimport {VerifyCertificateService} from \"./verify-certificate.service\";\nimport {SchemaService} from \"../../../../services/schema.service\";\nimport {KEY_CODES, ProjectableForm} from \"../../projectable-form.class\";\nimport {GrowlerService} from \"../../../messaging/growler.service\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../../extendable/extensions-noop.service\";\n\nimport {cloneDeep, defer, delay, forOwn, keys, invert, isEmpty, isNil, unset, sortedUniq, debounce} from 'lodash';\nimport {GrowlerModel} from \"../../../messaging/growler.model\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../../../services/settings.service\";\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../../services/ziti-data.service\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {Location} from \"@angular/common\";\nimport {ValidationService} from \"../../../../services/validation.service\";\nimport {CertificateAuthority} from \"../../../../models/certificate-authority\";\n\n@Component({\n    selector: 'lib-certificate-authority',\n    templateUrl: './verify-certificate.component.html',\n    styleUrls: ['./verify-certificate.component.scss'],\n    standalone: false\n})\nexport class VerifyCertificateComponent extends ProjectableForm implements OnInit, OnDestroy {\n\n    @Input() override errors: any = {};\n    @Output() close: EventEmitter<void> = new EventEmitter<void>();\n\n    _externalIdClaim = false;\n\n    formView = 'simple';\n    options: any[] = [];\n    isEditing = !isEmpty(this.formData.id);\n    formDataInvalid = false;\n    editMode = false;\n    items: any = [];\n    settings: any = {};\n    fileSelectOpening = false;\n    identityRoleAttributes = [];\n    override entityType = 'cas';\n    override entityClass = CertificateAuthority;\n\n    locations = ['COMMON_NAME', 'SAN_URI', 'SAN_EMAIL'];\n    matchers = ['ALL', 'PREFIX', 'SUFFIX', 'SCHEME'];\n    parsers = ['NONE', 'SPLIT'];\n\n    certificate = '';\n    certErrorMessage = '';\n\n    @ViewChild('fileSelect') filterInput: ElementRef;\n\n    constructor(\n        public svc: VerifyCertificateService,\n        private schemaSvc: SchemaService,\n        growlerService: GrowlerService,\n        @Inject(SHAREDZ_EXTENSION) extService: ExtensionService,\n        @Inject(SETTINGS_SERVICE) protected override settingsService: SettingsService,\n        @Inject(ZITI_DATA_SERVICE) override zitiService: ZitiDataService,\n        protected override router: Router,\n        protected override route: ActivatedRoute,\n        location: Location,\n        private validationService: ValidationService\n    ) {\n        super(growlerService, extService, zitiService, router, route, location, settingsService);\n    }\n\n    override ngOnInit(): void {\n        super.ngOnInit();\n        this.settingsService.settingsChange.subscribe((results:any) => {\n            this.settings = results;\n        });\n    }\n\n    protected override entityUpdated() {\n        super.entityUpdated();\n    }\n\n    ngOnDestroy(): void {\n        this.clearForm();\n    }\n\n    headerActionRequested(event) {\n        switch(event.name) {\n            case 'save':\n                this.save(event);\n                break;\n            case 'close':\n                this.returnToListPage();\n                break;\n            case 'toggle-view':\n                this.formView = event.data;\n                break;\n        }\n    }\n\n    override clear() {\n        this.formData.configTypeId = '';\n        this.clearForm();\n    }\n\n    clearForm() {\n        this.items.forEach((item: any) => {\n            if (item?.component) item.component.destroy();\n        });\n        this.errors = {};\n        this.items = [];\n        this.formData = new CertificateAuthority();\n        if (this.subscription) this.subscription.unsubscribe();\n    }\n\n    override copyToClipboard(val) {\n        navigator.clipboard.writeText(val);\n        const growlerData = new GrowlerModel(\n            'info',\n            'Information',\n            `Token Copied`,\n            `Token copied to clipboard`,\n        );\n        this.growlerService.show(growlerData);\n    }\n\n    async save(event?: any) {\n        if (!this.canSaveByPermissions()) {\n            return;\n        }\n        if(!this.validate()) {\n            return;\n        }\n        const tagVals = this.getTagValues();\n        if (!isEmpty(tagVals)) {\n            forOwn(tagVals, (value, key) => {\n                this.formData.tags[key] = value;\n            });\n        }\n        const apiData = this.apiData;\n        apiData.id = this.formData.id;\n        this.isLoading = true;\n        this.svc.save(apiData, this.certificate).then((result) => {\n            if (this.isModal) {\n                this.closeModal(true, true);\n                return;\n            }\n            this.initData = this.formData;\n            this._dataChange = false;\n            this.returnToListPage();\n        }).catch((errorMessage) => {\n            this.errors.certPem = true;\n            this.certErrorMessage = errorMessage;\n        }).finally(() => {\n            this.isLoading = false;\n        });\n    }\n\n    validate() {\n        this.errors = {};\n        const labels = [];\n        const growlers = [];\n        if (isEmpty(this.certificate)) {\n            this.errors.certPem = true;\n            this.certErrorMessage = 'Please enter or upload a valid certificate';\n            growlers.push(new GrowlerModel(\n                'error',\n                'Invalid',\n                `Missing Certificate`,\n                this.certErrorMessage,\n            ));\n        }\n        return isEmpty(this.errors);\n    }\n\n    get apiCallURL() {\n        return this.settings.selectedEdgeController + '/edge/management/v1/verify-certificate' + (this.formData.id ? `/${this.formData.id}` : '');\n    }\n\n    get apiData(): any {\n        const data: any = {};\n        this._apiData = data;\n        return this._apiData;\n    }\n\n    _apiData: any = {};\n    set apiData(data) {\n        this._apiData = data;\n    }\n\n    dataChanged(event) {\n        this._apiData = cloneDeep(this.apiData);\n    }\n\n\n    openFileSelect(event: any) {\n        this.filterInput.nativeElement.click();\n        this.fileSelectOpening = true;\n        delay(() => {\n            this.fileSelectOpening = false;\n        }, 1000);\n    }\n\n    selectPemFile(event: any) {\n        const file: File = event?.target?.files[0];\n\n        if (file) {\n            const fileReader = new FileReader();\n            fileReader.onload = (fileLoadedEvent) => {\n                const textFromSelectedFile: any = fileLoadedEvent.target?.result;\n                if (!this.validationService.isValidPEM(textFromSelectedFile?.trim())) {\n                    this.errors.certPem = true;\n                    const growlerData = new GrowlerModel(\n                        'error',\n                        'Invalid',\n                        `Cert Invalid`,\n                        `The file selected for the Certificate field is invalid. Please check your input and try again.`,\n                    );\n                    this.growlerService.show(growlerData);\n                    this.certificate = 'Invalid cert. Please select or enter a valid certificate.';\n                } else {\n                    unset(this.errors, 'certPem');\n                    this.certificate = textFromSelectedFile;\n                }\n            };\n            fileReader.readAsText(file, \"UTF-8\");\n        }\n    }\n\n}\n","<div class=\"projectable-form-wrapper verify-certificate-wrapper\"\n  (keyup.enter)=\"save($event)\"\n  (keyup.escape)=\"closeModal(false)\"\n  tabindex=\"0\"\n  >\n  <lib-form-header\n    [title]=\"'Verify Certificate for CA:'\"\n    [data]=\"formData\"\n    [moreActions]=\"formData.moreActions\"\n    (actionRequested)=\"headerActionRequested($event)\"\n    [(formView)]=\"formView\"\n    [saveDisabled]=\"svc.saveDisabled || formDataInvalid || formPermissionSaveDisabled\"\n    [saveTooltip]=\"formPermissionSaveTooltip\"\n    [showHeaderToggle]=\"false\"\n    [actionButtonText]=\"'Verify'\"\n    [strictReadonlyUi]=\"useStrictReadonlyForm\"\n  ></lib-form-header>\n  <div class=\"verify-certificate-container projectable-form-container\">\n    <div class=\"projectable-form-main-column form-group-row\" [hidden]=\"formView !== 'simple'\">\n      <div class=\"form-group-column\">\n        <lib-form-field-container\n          [title]=\"'Instructions'\"\n          >\n          <ul class=\"instructions-list\">\n            <li>Generate a certificate with the common name CN=<b>{{formData.verificationToken}}</b></li>\n            <li>Upload the generated cert, or copy & paste it using the text field below</li>\n            <li>Click the \"Verify\" button to submit certificate for verification</li>\n          </ul>\n        </lib-form-field-container>\n        <lib-form-field-container\n          [title]=\"'Token'\"\n          >\n          <div class=\"copy-token-container\" (click)=\"copyToClipboard(formData.verificationToken)\">\n            <span class=\"form-field-input copy-token-button\" matTooltip=\"Copy verifcation token\" matTooltipPosition=\"below\" matTooltipShowDelay=\"300\">{{formData.verificationToken}}</span>\n            <div class=\"copy-icon\"></div>\n          </div>\n        </lib-form-field-container>\n        <lib-form-field-container\n          [title]=\"'Certificate'\"\n          [label]=\"useStrictReadonlyForm ? '' : 'REQUIRED'\"\n          >\n          @if (errors['certPem']) {\n            <span class=\"cert-error-text error-text\">{{certErrorMessage}}</span>\n          }\n          <div class=\"form-field-input-group\">\n            <div class=\"form-field-label-container select-file-label-container\">\n              <div class=\"form-field-header\">\n                <div class=\"form-field-title-container\">\n                  <span class=\"form-field-title\">Enter PEM</span>\n                </div>\n                <span class=\"select-file-button\" (click)=\"openFileSelect($event)\">\n                  Select File\n                  @if (fileSelectOpening) {\n                    <div class=\"spinner\"></div>\n                  }\n                </span>\n                <input #fileSelect type=\"file\" style=\"display:none\" (change)=\"selectPemFile($event)\">\n              </div>\n              <textarea placeholder=\"Paste pem contents or select file\" [(ngModel)]=\"certificate\" [ngClass]=\"{error: errors['certPem']}\"></textarea>\n            </div>\n          </div>\n        </lib-form-field-container>\n        <div class=\"buttons-container buttons\">\n          <div class=\"linkButton cancel\" (click)=\"returnToListPage()\">Oops, no get me out of here</div>\n          @if (!useStrictReadonlyForm) {\n            <div class=\" save-button button save confirm\" (click)=\"save($event)\">Verify</div>\n          }\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n@if (isLoading) {\n  <lib-loading-indicator [isLoading]=\"isLoading\"></lib-loading-indicator>\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, Inject, OnInit} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef} from \"@angular/material/dialog\";\n\nimport {Router} from \"@angular/router\";\nimport {LoginServiceClass, ZAC_LOGIN_SERVICE} from \"../../services/login-service.class\";\nimport {SETTINGS_SERVICE} from \"../../services/settings.service\";\nimport {SettingsServiceClass} from \"../../services/settings-service.class\";\nimport {isEmpty} from \"lodash\";\n\n@Component({\n    selector: 'lib-confirm',\n    templateUrl: './login-dialog.component.html',\n    styleUrls: ['./login-dialog.component.scss'],\n    standalone: false\n})\nexport class LoginDialogComponent implements OnInit {\n\n  dataObj = {}\n  selectedEdgeController = '';\n  username = '';\n  password = '';\n  loginFailed = false;\n  edgeControllerList = [];\n  showNoControllers = false;\n\n  constructor(\n    @Inject(ZAC_LOGIN_SERVICE) public svc: LoginServiceClass,\n    @Inject(SETTINGS_SERVICE) private settingsService: SettingsServiceClass,\n    @Inject(MAT_DIALOG_DATA) public data: any,\n    private router: Router,\n    private dialogRef: MatDialogRef<LoginDialogComponent>\n  ) {\n    this.dataObj = data;\n    this.svc.loginDialogOpen = true;\n    this.selectedEdgeController = this.settingsService?.settings?.selectedEdgeController;\n  }\n\n  ngOnInit() {\n    this.settingsService.settingsChange.subscribe((results: any) => {\n      if (this.svc.originIsController) {\n        return;\n      }\n      if (results) this.settingsReturned(results);\n    });\n  }\n\n  settingsReturned(settings: any) {\n    this.edgeControllerList = [];\n    if (settings.edgeControllers?.length > 0) {\n      this.edgeControllerList = [];\n      settings.edgeControllers.forEach((controller) => {\n        if (!controller.url) {\n          return;\n        }\n        this.edgeControllerList.push({name:controller.name + ` (${controller.url})`, value: controller.url});\n      });\n    }\n    const serviceUrl = localStorage.getItem(\"ziti-serviceUrl-value\");\n    if (!isEmpty(serviceUrl)) {\n      const lastUrl: any = JSON.parse(serviceUrl).data;\n      this.selectedEdgeController = lastUrl.trim();\n    } else {\n      this.selectedEdgeController = settings.selectedEdgeController;\n    }\n  }\n\n  edgeChanged(event?) {\n    if (this.selectedEdgeController) {\n      this.settingsService.initApiVersions(this.selectedEdgeController.trim())\n    }\n    this.settingsService.settings.selectedEdgeController = this.selectedEdgeController?.trim();\n  }\n\n  login() {\n      const apiVersions = this.settingsService.apiVersions;\n      const prefix = apiVersions && apiVersions[\"edge-management\"]?.v1?.path || '';\n      this.loginFailed = false;\n      this.svc.login(\n          prefix,\n          this.selectedEdgeController.trim(),\n          this.username.trim(),\n          this.password,\n          false\n      ).then((result) => {\n        if (result?.error) {\n          return;\n        }\n        this.svc.loginDialogOpen = false;\n        this.settingsService.set(this.settingsService.settings);\n        this.dialogRef.close({isLoggedIn: true});\n      }).catch(() => {\n        this.loginFailed = true;\n      });\n  }\n\n  close() {\n    this.svc.loginDialogOpen = false;\n    this.dialogRef.close();\n  }\n\n  returnToLoginPage() {\n    this.svc.loginDialogOpen = false;\n    this.dialogRef.close({returnToLogin: true});\n  }\n}\n","<div class=\"login-modal-container\">\n  <div class=\"close icon-close\" (click)=\"close()\"></div>\n  <form id=\"login-form\" (submit)=\"login()\" autocomplete=\"on\">\n    <div class=\"login-modal-body\">\n      <div class=\"login-modal-content\">\n        <div class=\"login-title-container\">\n          <span class=\"login-title\">Session Expired</span>\n          <span class=\"login-subtitle\">Please login to continue.</span>\n        </div>\n        <div class=\"login-modal-main\">\n          @if (!svc.originIsController) {\n            <lib-selector-input\n              [fieldName]=\"'Edge Controller'\"\n              [(fieldValue)]=\"selectedEdgeController\"\n              [placeholder]=\"'Select an Edge Controller'\"\n              [valueList]=\"edgeControllerList\"\n              (fieldValueChange)=\"edgeChanged($event)\"\n              >\n            </lib-selector-input>\n          }\n          <div class=\"username-pass-container\">\n            <div class=\"input-fields-container\">\n              <label for=\"Username\" class=\"userlogin open\" [ngClass]=\"{'login-disabled': showNoControllers}\">Username</label>\n              <input\n                id=\"Username\"\n                name=\"username\"\n                type=\"text\"\n                autocomplete=\"on\"\n                required\n                [ngClass]=\"{'login-disabled': showNoControllers}\"\n                [placeholder]=\"'Enter your ziti admin username'\"\n                [(ngModel)]=\"username\"\n                >\n            </div>\n          </div>\n          <div class=\"input-fields-container\">\n            <label for=\"Password\" class=\"userlogin open\" [ngClass]=\"{'login-disabled': showNoControllers}\">Password</label>\n            <input\n              id=\"Password\"\n              name=\"password\"\n              type=\"password\"\n              autocomplete=\"on\"\n              required\n              [ngClass]=\"{'login-disabled': showNoControllers}\"\n              [placeholder]=\"'Enter your ziti admin password'\"\n              [(ngModel)]=\"password\"\n              >\n          </div>\n          @if (loginFailed) {\n            <span class=\"login-error-message\">Login Failed</span>\n          }\n        </div>\n      </div>\n    </div>\n    <div class=\"login-buttons-container\">\n      <button class=\"button\" type=\"submit\">Login</button>\n      <div class=\"linkButton cancel\" (click)=\"returnToLoginPage()\">Return to login page</div>\n    </div>\n  </form>\n</div>\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Inject, Injectable} from '@angular/core';\nimport {DataTableFilterService, FilterObj} from \"../../features/data-table/data-table-filter.service\";\nimport _, {isEmpty, unset} from \"lodash\";\nimport moment from \"moment\";\nimport {ListPageServiceClass} from \"../../shared/list-page-service.class\";\nimport {\n    TableColumnDefaultComponent\n} from \"../../features/data-table/column-headers/table-column-default/table-column-default.component\";\nimport {CallbackResults} from \"../../features/list-page-features/list-page-form/list-page-form.component\";\nimport {SchemaService} from \"../../services/schema.service\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../services/settings.service\";\nimport {CsvDownloadService} from \"../../services/csv-download.service\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../features/extendable/extensions-noop.service\";\nimport {Service} from \"../../models/service\";\nimport {TableCellNameComponent} from \"../../features/data-table/cells/table-cell-name/table-cell-name.component\";\nimport {Router} from \"@angular/router\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class ConfigTypesPageService extends ListPageServiceClass {\n\n    private paging = this.DEFAULT_PAGING;\n\n    resourceType = 'config-types';\n    selectedConfig: any = {};\n    modalType = '';\n\n    override menuItems = [\n        {name: 'Edit', action: 'update'},\n        {name: 'Delete', action: 'delete'},\n    ]\n\n    constructor(\n        private schemaSvc: SchemaService,\n        @Inject(SETTINGS_SERVICE) settings: SettingsService,\n        filterService: DataTableFilterService,\n        csvDownloadService: CsvDownloadService,\n        @Inject(SHAREDZ_EXTENSION) extService: ExtensionService,\n        protected override router: Router\n    ) {\n        super(settings, filterService, csvDownloadService, extService, router);\n    }\n\n    initTableColumns(): any {\n\n        const createdAtHeaderComponentParams = {\n            filterType: 'DATETIME',\n        };\n        return [\n            {\n                colId: 'name',\n                field: 'name',\n                headerName: 'Name',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: this.headerComponentParams,\n                cellRenderer: TableCellNameComponent,\n                cellRendererParams: { pathRoot: this.basePath },\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.openEditForm(data?.data?.id);\n                },\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: true,\n                filter: true,\n                sortColumn: this.sort.bind(this),\n            },\n            {\n                colId: 'createdAt',\n                field: 'createdAt',\n                headerName: 'Created At',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: createdAtHeaderComponentParams,\n                valueFormatter: this.createdAtFormatter,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                width: this.remToPx(10),\n            },\n            this.ID_COLUMN_DEF\n        ];\n    }\n\n    getData(filters?: FilterObj[], sort?: any) {\n        // we can customize filters or sorting here before moving on...\n        return super.getTableData('config-types', this.paging, filters, sort)\n            .then((results: any) => {\n                return this.processData(results);\n            });\n    }\n\n    private processData(results: any) {\n        if (!isEmpty(results?.data)) {\n            //pre-process data before rendering\n            results.data = this.addActionsPerRow(results);\n        }\n        return results;\n    }\n\n    private addActionsPerRow(results: any): any[] {\n        const reservedConfigTypes = ['host.v1', 'host.v2', 'intercept.v1', 'ziti-tunneler-client.v1', 'ziti-tunneler-server.v1'];\n        return results.data.map((row) => {\n            row.actionList = ['update', 'delete'];\n            if (reservedConfigTypes.includes(row.name)) {\n                row.reserved = true;\n            }\n            return row;\n        });\n    }\n\n    public openUpdate(item?: any) {\n        this.modalType = 'config';\n        if (item) {\n            this.selectedConfig = item;\n            this.selectedConfig.badges = [];\n            unset(this.selectedConfig, '_links');\n        } else {\n            this.selectedConfig = new Service();\n        }\n        this.sideModalOpen = true;\n    }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, Inject, OnInit} from '@angular/core';\nimport {DataTableFilterService} from \"../../features/data-table/data-table-filter.service\";\nimport {ConfigTypesPageService} from \"./config-types-page.service\";\nimport {TabNameService} from \"../../services/tab-name.service\";\nimport {ListPageComponent} from \"../../shared/list-page-component.class\";\nimport {ConsoleEventsService} from \"../../services/console-events.service\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {ConfirmComponent} from \"../../features/confirm/confirm.component\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../features/extendable/extensions-noop.service\";\n\n\n@Component({\n    selector: 'lib-configurations',\n    templateUrl: './config-types-page.component.html',\n    styleUrls: ['./config-types-page.component.scss'],\n    standalone: false\n})\nexport class ConfigTypesPageComponent extends ListPageComponent implements OnInit {\n    title = 'Config Types'\n    tabs: { url: string, label: string }[] ;\n    isLoading: boolean;\n    formDataChanged = false;\n    override reservedNames = ['host.v1', 'host.v2', 'intercept.v1', 'ziti-tunneler-client.v1', 'ziti-tunneler-server.v1'];\n\n    constructor(\n        override svc: ConfigTypesPageService,\n        filterService: DataTableFilterService,\n        private tabNames: TabNameService,\n        consoleEvents: ConsoleEventsService,\n        dialogForm: MatDialog,\n        @Inject(SHAREDZ_EXTENSION) private extService: ExtensionService,\n    ) {\n        super(filterService, svc, consoleEvents, dialogForm, extService);\n    }\n\n    override ngOnInit() {\n        this.tabs = this.tabNames.getTabs('services');\n        this.svc.refreshData = this.refreshData;\n        super.ngOnInit();\n    }\n\n    headerActionClicked(action: string) {\n        switch (action) {\n            case 'add':\n                this.svc.openEditForm();\n                break;\n            case 'edit':\n                this.svc.openEditForm();\n                break;\n            case 'delete':\n                const selectedItems = this.rowData.filter((row) => {\n                    return row.selected;\n                });\n                const label = selectedItems.length > 1 ? 'config types' : 'config type';\n                this.openBulkDelete(selectedItems, label);\n                break;\n            default:\n        }\n    }\n\n    tableAction(event: any) {\n        this.trackMenuAction(event?.action, event?.item);\n        switch(event?.action) {\n            case 'toggleAll':\n            case 'toggleItem':\n                this.itemToggled(event.item)\n                break;\n            case 'update':\n                this.svc.openEditForm(event.item?.id);\n                break;\n            case 'create':\n                this.svc.openEditForm();\n                break;\n            case 'delete':\n                this.deleteItem(event.item)\n                break;\n            case 'download-all':\n                this.downloadAllItems();\n                break;\n            case 'download-selected':\n                this.svc.downloadItems(this.selectedItems);\n                break;\n            default:\n                break;\n        }\n    }\n\n    trackMenuAction(action: string, item: any) {\n        this.extService?.consoleActionTriggered?.emit({\n            action,\n            page: 'config-type',\n            item,\n            type:'menu-action'\n        });\n    }\n    deleteItem(item: any) {\n        this.openBulkDelete([item], 'config type');\n    }\n\n    closeModal(event: any) {\n        this.svc.sideModalOpen = false;\n        if(event?.refresh) {\n            this.refreshData();\n        }\n    }\n\n    dataChanged(event) {\n        this.formDataChanged = event;\n    }\n\n    confirmAssociatedDelete(configsWithAssociations, selectedItems, label) {\n        const configNames = configsWithAssociations.map((item) => {\n            return item.name;\n        });\n        const data = {\n            appendId: 'DeleteConfigTypesWithAssociations',\n            title: 'Config Type In Use',\n            message: `The following config types are still in use by a service:`,\n            submessage: 'Deleting these config types may cause disruption to those services. Would you still like to continue?',\n            bulletList: configNames,\n            confirmLabel: 'Yes',\n            cancelLabel: 'Oops, no get me out of here',\n            imageUrl: 'assets/svgs/Growl_Warning.svg',\n            showCancelLink: true\n        };\n        this.dialogRef = this.dialogForm.open(ConfirmComponent, {\n            data: data,\n            autoFocus: false,\n        });\n        this.dialogRef.afterClosed().subscribe((result) => {\n            if (result?.confirmed) {\n                this.openBulkDelete(selectedItems, label);\n            }\n        });\n    }\n}\n","<div class=\"ziti-page-container ziti-config-types-container\">\n  <lib-list-page-header [title]=\"title\"\n    [tabs]=\"tabs\"\n    [showAdd]=\"!itemsSelected\"\n    [blockCreate]=\"headerBlockCreate\"\n    [blockDelete]=\"headerBlockDelete\"\n  (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n\n  <lib-data-table [tableId]=\"'config-types'\"\n    [noItemsReadonly]=\"headerBlockCreate\"\n     [accessDenied]=\"headerBlockRead\"\n    [rowData]=\"rowData\"\n    [isLoading]=\"isLoading\"\n    [columnDefinitions]=\"columnDefs\"\n    (actionRequested)=\"tableAction($event)\"\n    [startCount]=\"startCount\"\n    [endCount]=\"endCount\"\n    [totalCount]=\"totalCount\"\n    [emptyMsg]=\"'No Config Types defined, Click the plus to add a Configuration.'\"\n    [filterApplied]=\"filterApplied\"\n    [menuItems]=\"svc.menuItems\"\n    (gridReady)=\"gridReady($event)\"\n    >\n  </lib-data-table>\n</div>\n@if (isLoading) {\n  <lib-loading-indicator [isLoading]=\"isLoading\"></lib-loading-indicator>\n}","export class ConfigType {\n    name = '';\n    id = '';\n    schema = {};\n    tags: any = {};\n};","import {Injectable, Inject} from '@angular/core';\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../services/ziti-data.service\";\nimport {Resolver} from \"@stoplight/json-ref-resolver\";\nimport {SchemaService} from \"../../../services/schema.service\";\nimport {defer, isBoolean, isEmpty, isNil, keys} from \"lodash\";\nimport {GrowlerModel} from \"../../messaging/growler.model\";\nimport {GrowlerService} from \"../../messaging/growler.service\";\nimport {ConfigType} from \"../../../models/config-type\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../extendable/extensions-noop.service\";\nimport {SERVICE_EXTENSION_SERVICE} from \"../service/service-form.service\";\nimport {ValidationService} from \"../../../services/validation.service\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class ConfigTypeFormService {\n    private configTypes: any[] = [];\n\n    items: any[] = [];\n    errors: any[] = [];\n    saveDisabled = false;\n    configJsonView = false;\n    configDataLabel = 'Config Type Form';\n\n    constructor(\n        @Inject(ZITI_DATA_SERVICE) private dataService: ZitiDataService,\n        @Inject(SHAREDZ_EXTENSION)private extService: ExtensionService,\n        private schemaSvc: SchemaService,\n        private growlerService: GrowlerService,\n        private validationService: ValidationService\n    ) {\n    }\n\n    async getSchema(schemaType: string): Promise<any> {\n        if (!schemaType) return Promise.resolve();\n        for (let idx = 0; idx < this.configTypes.length; idx++) {\n            if(this.configTypes[idx].id === schemaType)\n                return this.configTypes[idx].schema;\n        }\n    }\n\n    save(formData) {\n        const isUpdate = !isEmpty(formData.id);\n        const data: any = this.getConfigTypeDataModel(formData, isUpdate);\n        let prom;\n        if (isUpdate) {\n            prom = this.dataService.patch('config-types', data, formData.id, true);\n        } else {\n            prom = this.dataService.post('config-types', data, true);\n        }\n\n        return prom.then(async (result: any) => {\n            const id = isUpdate ? formData.id : (result?.data?.id || result?.id);\n            let config = await this.dataService.getSubdata('config-types', id, '').then((svcData) => {\n                return svcData.data;\n            });\n            return this.extService.formDataSaved(config).then((formSavedResult: any) => {\n                if (!formSavedResult) {\n                    return config;\n                }\n                const growlerData = new GrowlerModel(\n                    'success',\n                    'Success',\n                    `Config Type ${isUpdate ? 'Updated' : 'Created'}`,\n                    `Successfully ${isUpdate ? 'updated' : 'created'} Config Type: ${formData.name}`,\n                );\n                this.growlerService.show(growlerData);\n                return config;\n            }).catch((result) => {\n                return false;\n            });\n        }).catch((resp) => {\n            const errorMessage = this.dataService.getErrorMessage(resp);\n            const growlerData = new GrowlerModel(\n                'error',\n                'Error',\n                `Error ${isUpdate ? 'Updating' : 'Creating'} Config Type`,\n                errorMessage,\n            );\n            this.growlerService.show(growlerData);\n            throw resp;\n        })\n    }\n\n    getConfigTypeDataModel(formData, isUpdate) {\n        const saveModel = new ConfigType();\n        const modelProperties = keys(saveModel);\n        modelProperties.forEach((prop) => {\n            switch(prop) {\n                default:\n                    saveModel[prop] = formData[prop];\n            }\n        });\n        return saveModel;\n    }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {\n    Component,\n    EventEmitter, Inject,\n    Input,\n    OnDestroy,\n    OnInit, Output,\n    ViewChild,\n} from '@angular/core';\nimport {ConfigTypeFormService} from \"./config-type-form.service\";\nimport {Subscription} from \"rxjs\";\nimport {SchemaService} from \"../../../services/schema.service\";\nimport {ProjectableForm} from \"../projectable-form.class\";\nimport {GrowlerService} from \"../../messaging/growler.service\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../extendable/extensions-noop.service\";\nimport {ConfigEditorComponent} from \"../../config-editor/config-editor.component\";\n\nimport {cloneDeep, defer, isEmpty, unset} from 'lodash';\nimport {GrowlerModel} from \"../../messaging/growler.model\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../../services/settings.service\";\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../services/ziti-data.service\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {ConfigType} from \"../../../models/config-type\";\nimport {Location} from \"@angular/common\";\nimport {ValidationService} from \"../../../services/validation.service\";\nimport {MatDialog} from \"@angular/material/dialog\";\n\n@Component({\n    selector: 'lib-config-type-form',\n    templateUrl: './config-type-form.component.html',\n    styleUrls: ['./config-type-form.component.scss'],\n    standalone: false\n})\nexport class ConfigTypeFormComponent extends ProjectableForm implements OnInit, OnDestroy {\n\n    @Input() override errors: any = {};\n    @Output() close: EventEmitter<void> = new EventEmitter<void>();\n\n    options: any[] = [];\n    isEditing = !isEmpty(this.formData.id);\n    formView = 'simple';\n    formDataInvalid = false;\n    editMode = false;\n    items: any = [];\n    selectedSchema: any = '';\n    associatedServices = [];\n    associatedServiceNames = [];\n    servicesLoading = false;\n    settings: any = {};\n    selectedConfigTypeId = '';\n\n    override entityType = 'config-types';\n    override entityClass = ConfigType;\n\n    @ViewChild(\"configEditor\", {read: ConfigEditorComponent}) configEditor!: ConfigEditorComponent;\n    constructor(\n        public svc: ConfigTypeFormService,\n        private schemaSvc: SchemaService,\n        growlerService: GrowlerService,\n        @Inject(SHAREDZ_EXTENSION) extService: ExtensionService,\n        @Inject(SETTINGS_SERVICE) protected override settingsService: SettingsService,\n        @Inject(ZITI_DATA_SERVICE) override zitiService: ZitiDataService,\n        protected override router: Router,\n        protected override route: ActivatedRoute,\n        location: Location,\n        private validationService: ValidationService,\n        dialogForm: MatDialog\n    ) {\n        super(growlerService, extService, zitiService, router, route, location, settingsService, dialogForm);\n    }\n\n    override ngOnInit(): void {\n        super.ngOnInit();\n        this.settingsService.settingsChange.subscribe((results:any) => {\n            this.settings = results;\n        });\n    }\n\n    override entityUpdated() {\n    super.entityUpdated();\n        if (!isEmpty(this.formData) && isEmpty(this.formData?.schema)) {\n            this.formData.schema = {};\n        }\n        this.selectedConfigTypeId = this.formData.configTypeId;\n        this.initData = cloneDeep(this.formData);\n        this.isEditing = !isEmpty(this.formData.id);\n    }\n\n    ngOnDestroy(): void {\n        this.clearForm();\n    }\n\n    get configTypeEmpty() {\n        return isEmpty(this.formData.configTypeId);\n    }\n\n    headerActionRequested(event) {\n        switch(event.name) {\n            case 'save':\n                this.save(event);\n                break;\n            case 'close':\n                this.returnToListPage();\n                break;\n            case 'toggle-view':\n                this.formView = event.data;\n                break;\n            case 'delete':\n                this.deleteEntity();\n                break;\n        }\n    }\n\n    multiActionRequested(action) {\n        switch (action.id) {\n            case 'save':\n                this.save();\n                break;\n            case 'delete':\n                this.deleteEntity();\n                break;\n        }\n    }\n\n    apiActionRequested(action) {\n        switch (action.id) {\n            case 'cli':\n                this.copyCLICommand();\n                break;\n            case 'curl':\n                this.copyCURLCommand();\n                break;\n        }\n    }\n\n    copyCLICommand() {\n        const command = `ziti edge ${this.formData.id ? 'update' : 'create'} config-type ${this.formData.id ? `'${this.formData.id}'` : ''} ${this.formData.id ? '--name' : ''} '${this.formData.name}' --schema '${JSON.stringify(this.formData.schema)}' --tags-json '${JSON.stringify(this.formData.tags)}'`;\n\n        navigator.clipboard.writeText(command);\n        const growlerData = new GrowlerModel(\n            'success',\n            'Success',\n            `Text Copied`,\n            `CLI command copied to clipboard`,\n        );\n        this.growlerService.show(growlerData);\n    }\n\n    copyCURLCommand() {\n        const command = `curl '${this.apiCallURL}' \\\\\n    ${this.formData.id ? '--request PATCH \\\\' : '\\\\'}\n    -H 'accept: application/json' \\\\\n    -H 'content-type: application/json' \\\\\n    -H 'zt-session: ${this.settings.session.id}' \\\\\n    --data-raw '${JSON.stringify(this.apiData)}'`;\n\n        navigator.clipboard.writeText(command);\n        const growlerData = new GrowlerModel(\n            'success',\n            'Success',\n            `Text Copied`,\n            `CURL command copied to clipboard`,\n        );\n        this.growlerService.show(growlerData);\n    }\n\n    override clear() {\n        this.formData.configTypeId = '';\n        this.clearForm();\n    }\n\n    clearForm() {\n        this.items.forEach((item: any) => {\n            if (item?.component) item.component.destroy();\n        });\n        this.errors = {};\n        this.items = [];\n        this.formData = {};\n        if (this.subscription) this.subscription.unsubscribe();\n    }\n\n    async save(event?: any) {\n        if (!this.canSaveByPermissions()) {\n            return;\n        }\n        this.errors = {};\n        if (!this.validate()) {\n            this.isLoading = false;\n            return;\n        }\n        const configId = await this.svc.save(this.formData).then((result) => {\n            if (!isEmpty(result?.id)) {\n                this.formData = result;\n                this.initData = cloneDeep(this.formData);\n            }\n            return result?.id;\n        }).finally(() => {\n            this.isLoading = false;\n        });\n        if (configId) {\n            this.initData = this.formData;\n            this._dataChange = false;\n            if (this.isModal) {\n                this.closeModal(true, true);\n            } else {\n                this.returnToListPage();\n            }\n        };\n    }\n\n    validate() {\n        this.errors = {};\n        const labels = [];\n        if (isEmpty(this.formData.name)) {\n            this.errors['name'] = true;\n            labels.push('Name');\n        }\n        if (!this.validationService.isValidJSON(this.formData.schema)) {\n            this.errors['schema'] = true;\n            labels.push('Schema');\n        }\n        if (!isEmpty(this.errors)) {\n            let errorLabels = '';\n            labels.forEach((label, index) => {\n                errorLabels += `<li>${label}</li>`;\n            });\n            errorLabels = `<ul>${errorLabels}</ul>`;\n            const growler = new GrowlerModel(\n                'error',\n                'Invalid',\n                `Invalid Form Data`,\n                `Please correct the highlighted fields: ${errorLabels}`,\n            );\n            this.growlerService.show(growler);\n        }\n        return isEmpty(this.errors);\n    }\n\n    get apiCallURL() {\n        return this.settings.selectedEdgeController + '/edge/management/v1/config-types' + (this.formData.id ? `/${this.formData.id}` : '');\n    }\n\n    get apiData(): any {\n        const data: any = {\n            name: this.formData?.name || '',\n            schema: this.formData?.schema || {},\n            tags: this.formData?.tags\n        };\n        this._apiData = data;\n        return this._apiData;\n    }\n\n    _apiData: any = {};\n    set apiData(data) {\n        this._apiData = data;\n    }\n\n    dataChanged(event) {\n        this._apiData = cloneDeep(this.apiData);\n    }\n\n    get saveDisabled() {\n        const reservedConfigTypes = ['host.v1', 'host.v2', 'intercept.v1', 'ziti-tunneler-client.v1', 'ziti-tunneler-server.v1'];\n        return reservedConfigTypes.includes(this.formData.name);\n    }\n\n    get saveButtonTooltip() {\n        if (this.saveDisabled) {\n            return 'Can not edit this system config type';\n        }\n        return '';\n    }\n}\n","<div class=\"config-type-form-container projectable-form-wrapper\"\n  (keyup.enter)=\"save($event)\"\n  (keyup.escape)=\"closeModal(false)\"\n  tabindex=\"0\"\n  [class.projectable-form-hidden]=\"!dataInit\"\n  >\n  <lib-form-header\n    [data]=\"formData\"\n    [title]=\"(formData.id ? 'Edit Config Type' : 'Create Config Type')\"\n    [moreActions]=\"moreActions\"\n    [multiActions]=\"multiActions\"\n    (actionRequested)=\"headerActionRequested($event)\"\n    (multiActionRequested)=\"multiActionRequested($event)\"\n    [(formView)]=\"formView\"\n    [saveDisabled]=\"saveDisabled || formPermissionSaveDisabled\"\n    [saveTooltip]=\"formPermissionSaveDisabled ? formPermissionSaveTooltip : saveButtonTooltip\"\n    [class.is-scrolled]=\"isScrolled\"\n    [strictReadonlyUi]=\"useStrictReadonlyForm\"\n  ></lib-form-header>\n  <div class=\"config-form-container projectable-form-container\" #formContainer>\n    <div class=\"projectable-form-main-column form-group-row\" [hidden]=\"formView !== 'simple'\">\n      <div class=\"form-group-column three-fifths\">\n        <lib-form-field-container [title]=\"'Config Name'\" [label]=\"useStrictReadonlyForm ? '' : 'REQUIRED'\">\n            <input\n              class=\"form-field-input\"\n              id=\"ConfigName\"\n              type=\"text\"\n              maxlength=\"500\"\n              placeholder=\"Name this config\"\n              [ngClass]=\"{error: errors['name']}\"\n              [(ngModel)]=\"formData.name\"\n              [disabled]=\"useStrictReadonlyForm\"\n              >\n        </lib-form-field-container>\n        <lib-form-field-container [title]=\"'Schema'\" [label]=\"useStrictReadonlyForm ? '' : 'REQUIRED'\" class=\"schema-json-editor\">\n          <lib-json-view [(data)]=\"formData.schema\" [jsonInvalid]=\"errors['schema']\" [readOnly]=\"useStrictReadonlyForm\"></lib-json-view>\n        </lib-form-field-container>\n        <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n        <div [hidden]=\"!showMore\" class=\"form-group-column\">\n          @if (!hideTags) {\n            <lib-form-field-container\n              [title]=\"'Custom Tags'\"\n              [label]=\"'OPTIONAL'\"\n              class=\"form-field-advanced\"\n              >\n              <lib-custom-tags [(tags)]=\"formData.tags\" [readOnly]=\"useStrictReadonlyForm\"></lib-custom-tags>\n            </lib-form-field-container>\n          }\n        </div>\n      </div>\n      @if (showApiCalls) {\n        <div class=\"form-group-column two-fifths\">\n          <lib-form-field-container\n            [title]=\"'API Calls'\"\n            [label]=\"''\"\n            [headerActions]=\"apiOptions\"\n            (actionRequested)=\"apiActionRequested($event)\"\n            >\n            <div class=\"form-row\">\n              <input class=\"form-field-input\" [value]=\"apiCallURL\" readonly/>\n              <div class=\"url-copy icon-copy copy-text\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n            </div>\n            @if (formData) {\n              <lib-json-view [(data)]=\"apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n            }\n          </lib-form-field-container>\n        </div>\n      }\n    </div>\n    @if (formView === 'raw') {\n      <div class=\"form-group-column\">\n        @if (formData) {\n          <lib-json-view [(data)]=\"formData\" [readOnly]=\"useStrictReadonlyForm\"></lib-json-view>\n        }\n      </div>\n    }\n  </div>\n</div>\n@if (isLoading || !dataInit) {\n  <lib-loading-indicator [isLoading]=\"isLoading || !dataInit\"></lib-loading-indicator>\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Inject, Injectable} from '@angular/core';\nimport {DataTableFilterService, FilterObj} from \"../../features/data-table/data-table-filter.service\";\nimport _, {isEmpty, unset} from \"lodash\";\nimport moment from \"moment\";\nimport {ListPageServiceClass} from \"../../shared/list-page-service.class\";\nimport {\n    TableColumnDefaultComponent\n} from \"../../features/data-table/column-headers/table-column-default/table-column-default.component\";\nimport {CallbackResults} from \"../../features/list-page-features/list-page-form/list-page-form.component\";\nimport {SchemaService} from \"../../services/schema.service\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../services/settings.service\";\nimport {CsvDownloadService} from \"../../services/csv-download.service\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../features/extendable/extensions-noop.service\";\nimport {Service} from \"../../models/service\";\nimport {TableCellNameComponent} from \"../../features/data-table/cells/table-cell-name/table-cell-name.component\";\nimport {Router} from \"@angular/router\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class PostureChecksPageService extends ListPageServiceClass {\n\n    private paging = this.DEFAULT_PAGING;\n\n    resourceType = 'posture-checks';\n    modalType = '';\n\n    override menuItems = [\n        {name: 'Edit', action: 'update'},\n        {name: 'Delete', action: 'delete'},\n    ]\n\n    constructor(\n        private schemaSvc: SchemaService,\n        @Inject(SETTINGS_SERVICE) settings: SettingsService,\n        filterService: DataTableFilterService,\n        csvDownloadService: CsvDownloadService,\n        @Inject(SHAREDZ_EXTENSION) extService: ExtensionService,\n        protected override router: Router\n    ) {\n        super(settings, filterService, csvDownloadService, extService, router);\n    }\n\n    initTableColumns(): any {\n\n        const osTypeFilterOptions = {\n            filterType: 'SELECT',\n            enableSorting: true,\n            filterOptions: [\n                { label: 'Domain', value: 'DOMAIN' },\n                { label: 'MAC', value: 'MAC' },\n                { label: 'MFA', value: 'MFA' },\n                { label: 'OS', value: 'OS' },\n                { label: 'Process', value: 'PROCESS' },\n                { label: 'Process Multi', value: 'MULTI_PROCESS' },\n            ]\n        };\n\n        const createdAtHeaderComponentParams = {\n            filterType: 'DATETIME',\n        };\n\n        const detailsRenderer = (row) => {\n            const data = row?.data || '';\n            let details = '';\n            if (data.typeId==\"DOMAIN\") {\n                details = data.domains.join(',');\n            } else if (data.typeId==\"MAC\") {\n                for (let i=0; i < data.macAddresses.length; i++) {\n                    try {\n                        details += data.macAddresses[i].match( /.{1,2}/g).join(':').toUpperCase();\n                    } catch(e) {\n                        details = '';\n                    }\n                }\n            } else if (data.typeId==\"OS\") {\n                for (let i=0; i < data.operatingSystems.length; i++) {\n                    const os = data.operatingSystems[i];\n                    const versionData = os.versions?.length > 0 ? \" (\"+os.versions.join(',')+\") \" : ' ()';\n                    details += os.type + versionData;\n                }\n            } else if (data.typeId==\"PROCESS\") {\n                details = data.process.path;\n            } else {\n                details = \"Requires MFA\";\n            }\n            return details;\n        }\n\n        return [\n            {\n                colId: 'name',\n                field: 'name',\n                headerName: 'Name',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: this.headerComponentParams,\n                cellRenderer: TableCellNameComponent,\n                cellRendererParams: { pathRoot: this.basePath },\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.openEditForm(data?.data?.id);\n                },\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: true,\n                filter: true,\n                sortColumn: this.sort.bind(this),\n            },\n            {\n                colId: 'typeId',\n                field: 'typeId',\n                headerName: 'Type',\n                headerComponent: TableColumnDefaultComponent,\n                cellRendererParams: { pathRoot: this.basePath },\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.openEditForm(data?.data?.id);\n                },\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: false,\n                filter: false,\n                width: 120,\n                sortColumn: this.sort.bind(this),\n            },\n            {\n                colId: 'details',\n                field: 'details',\n                headerName: 'Details',\n                headerComponent: TableColumnDefaultComponent,\n                cellRenderer: detailsRenderer,\n                cellRendererParams: { pathRoot: this.basePath },\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.openEditForm(data?.data?.id);\n                },\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: false,\n                filter: false,\n                sortColumn: this.sort.bind(this),\n            },\n            {\n                colId: 'createdAt',\n                field: 'createdAt',\n                headerName: 'Created At',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: createdAtHeaderComponentParams,\n                valueFormatter: this.createdAtFormatter,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                width: this.remToPx(10),\n            },\n            this.ID_COLUMN_DEF\n        ];\n    }\n\n    getData(filters?: FilterObj[], sort?: any) {\n        // we can customize filters or sorting here before moving on...\n        return super.getTableData('posture-checks', this.paging, filters, sort)\n            .then((results: any) => {\n                return this.processData(results);\n            });\n    }\n\n    private processData(results: any) {\n        if (!isEmpty(results?.data)) {\n            //pre-process data before rendering\n            results.data = this.addActionsPerRow(results);\n        }\n        return results;\n    }\n\n    private addActionsPerRow(results: any): any[] {\n        return results.data.map((row) => {\n            row.actionList = ['update', 'delete'];\n            return row;\n        });\n    }\n\n    public openUpdate(item?: any) {\n        //no-opp\n    }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, Inject, OnInit} from '@angular/core';\nimport {DataTableFilterService} from \"../../features/data-table/data-table-filter.service\";\nimport {PostureChecksPageService} from \"./posture-checks-page.service\";\nimport {TabNameService} from \"../../services/tab-name.service\";\nimport {ListPageComponent} from \"../../shared/list-page-component.class\";\nimport {ConsoleEventsService} from \"../../services/console-events.service\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {ConfirmComponent} from \"../../features/confirm/confirm.component\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../features/extendable/extensions-noop.service\";\n\n\n@Component({\n    selector: 'lib-configurations',\n    templateUrl: './posture-checks-page.component.html',\n    styleUrls: ['./posture-checks-page.component.scss'],\n    standalone: false\n})\nexport class PostureChecksPageComponent extends ListPageComponent implements OnInit {\n    title = 'Posture Checks'\n    tabs: { url: string, label: string }[] ;\n    isLoading: boolean;\n    formDataChanged = false;\n\n    constructor(\n        override svc: PostureChecksPageService,\n        filterService: DataTableFilterService,\n        private tabNames: TabNameService,\n        consoleEvents: ConsoleEventsService,\n        dialogForm: MatDialog,\n        @Inject(SHAREDZ_EXTENSION) private extService: ExtensionService,\n    ) {\n        super(filterService, svc, consoleEvents, dialogForm, extService);\n    }\n\n    override ngOnInit() {\n        this.tabs = this.tabNames.getTabs('policies');\n        this.svc.refreshData = this.refreshData;\n        super.ngOnInit();\n    }\n\n    headerActionClicked(action: string) {\n        switch (action) {\n            case 'add':\n                this.svc.openEditForm();\n                break;\n            case 'edit':\n                this.svc.openEditForm();\n                break;\n            case 'delete':\n                const selectedItems = this.rowData.filter((row) => {\n                    return row.selected;\n                });\n                const label = selectedItems.length > 1 ? 'posture checks' : 'posture check';\n                this.openBulkDelete(selectedItems, label);\n                break;\n            default:\n        }\n    }\n\n    tableAction(event: any) {\n        this.trackMenuAction(event?.action, event?.item);\n        switch(event?.action) {\n            case 'toggleAll':\n            case 'toggleItem':\n                this.itemToggled(event.item)\n                break;\n            case 'update':\n                this.svc.openEditForm(event.item?.id);\n                break;\n            case 'create':\n                this.svc.openEditForm();\n                break;\n            case 'delete':\n                this.deleteItem(event.item)\n                break;\n            case 'download-all':\n                this.downloadAllItems();\n                break;\n            case 'download-selected':\n                this.svc.downloadItems(this.selectedItems);\n                break;\n            default:\n                break;\n        }\n    }\n\n    trackMenuAction(action: string, item: any) {\n        this.extService?.consoleActionTriggered?.emit({\n            action,\n            page: 'posture-check',\n            item,\n            type:'menu-action'\n        });\n    }\n    deleteItem(item: any) {\n        this.openBulkDelete([item], 'posture check');\n    }\n\n    closeModal(event: any) {\n        this.svc.sideModalOpen = false;\n        if(event?.refresh) {\n            this.refreshData();\n        }\n    }\n\n    dataChanged(event) {\n        this.formDataChanged = event;\n    }\n}\n","<div class=\"ziti-page-container ziti-posture-checks-container\">\n  <lib-list-page-header [title]=\"title\"\n    [tabs]=\"tabs\"\n    [showAdd]=\"!itemsSelected\"\n    [blockCreate]=\"headerBlockCreate\"\n    [blockDelete]=\"headerBlockDelete\"\n  (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n\n  <lib-data-table [tableId]=\"'posture-checks'\"\n    [noItemsReadonly]=\"headerBlockCreate\"\n    [accessDenied]=\"headerBlockRead\"\n    [rowData]=\"rowData\"\n    [isLoading]=\"isLoading\"\n    [columnDefinitions]=\"columnDefs\"\n    (actionRequested)=\"tableAction($event)\"\n    [startCount]=\"startCount\"\n    [endCount]=\"endCount\"\n    [totalCount]=\"totalCount\"\n    [emptyMsg]=\"'No Posture Checks defined, Click the plus to add a Configuration.'\"\n    [filterApplied]=\"filterApplied\"\n    [menuItems]=\"svc.menuItems\"\n    (gridReady)=\"gridReady($event)\"\n    >\n  </lib-data-table>\n</div>\n@if (isLoading) {\n  <lib-loading-indicator [isLoading]=\"isLoading\"></lib-loading-indicator>\n}","export class PostureCheck {\n    name = '';\n    id: string;\n    typeId = '';\n    semantic: string = 'AllOf'\n    roleAttributes: any[] = [];\n    domains: any[] = []\n    macAddresses: any[] = [];\n    operatingSystems: any[] = [];\n    processes: any[] = [{\n        hashes: [],\n        osType: '',\n        path: '',\n        signerFingerprints: []\n    }];\n    process: any = {\n        hashes: [],\n        osType: '',\n        path: '',\n        signerFingerprint: ''\n    };\n    promptOnWake = false;\n    promptOnUnlock = false;\n    timeoutSeconds: number = 0;\n    tags: any = {};\n};\n","import {Injectable, Inject} from '@angular/core';\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../services/ziti-data.service\";\nimport {Resolver} from \"@stoplight/json-ref-resolver\";\nimport {SchemaService} from \"../../../services/schema.service\";\nimport {defer, isBoolean, isEmpty, isNil, keys} from \"lodash\";\nimport {GrowlerModel} from \"../../messaging/growler.model\";\nimport {GrowlerService} from \"../../messaging/growler.service\";\nimport {ConfigType} from \"../../../models/config-type\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../extendable/extensions-noop.service\";\nimport {ValidationService} from \"../../../services/validation.service\";\nimport {PostureCheck} from \"../../../models/posture-check\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class PostureCheckFormService {\n\n    items: any[] = [];\n    errors: any[] = [];\n    saveDisabled = false;\n\n    constructor(\n        @Inject(ZITI_DATA_SERVICE) private dataService: ZitiDataService,\n        @Inject(SHAREDZ_EXTENSION)private extService: ExtensionService,\n        private schemaSvc: SchemaService,\n        private growlerService: GrowlerService,\n        private validationService: ValidationService\n    ) {\n    }\n\n    save(formData) {\n        const isUpdate = !isEmpty(formData.id);\n        const data: any = this.getConfigTypeDataModel(formData, isUpdate);\n        let prom;\n        if (isUpdate) {\n            prom = this.dataService.patch('posture-checks', data, formData.id, true);\n        } else {\n            prom = this.dataService.post('posture-checks', data, true);\n        }\n\n        return prom.then(async (result: any) => {\n            const id = isUpdate ? formData.id : (result?.data?.id || result?.id);\n            let config = await this.dataService.getSubdata('posture-checks', id, '').then((svcData) => {\n                return svcData.data;\n            });\n            return this.extService.formDataSaved(config).then((formSavedResult: any) => {\n                if (!formSavedResult) {\n                    return config;\n                }\n                const growlerData = new GrowlerModel(\n                    'success',\n                    'Success',\n                    `Posture Check ${isUpdate ? 'Updated' : 'Created'}`,\n                    `Successfully ${isUpdate ? 'updated' : 'created'} Posture Check: ${formData.name}`,\n                );\n                this.growlerService.show(growlerData);\n                return config;\n            }).catch((result) => {\n                return false;\n            });\n        }).catch((resp) => {\n            const errorMessage = this.dataService.getErrorMessage(resp);\n            const growlerData = new GrowlerModel(\n                'error',\n                'Error',\n                `Error ${isUpdate ? 'Updating' : 'Creating'} Posture Check`,\n                errorMessage,\n            );\n            this.growlerService.show(growlerData);\n            throw resp;\n        })\n    }\n\n    getConfigTypeDataModel(formData, isUpdate) {\n        const saveModel = new PostureCheck();\n        const modelProperties = keys(saveModel);\n        modelProperties.forEach((prop) => {\n            switch(prop) {\n                default:\n                    saveModel[prop] = formData[prop];\n            }\n        });\n        return saveModel;\n    }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {\n    Component,\n    EventEmitter, Inject,\n    Input,\n    OnDestroy,\n    OnInit, Output,\n    ViewChild,\n} from '@angular/core';\nimport {PostureCheckFormService} from \"./posture-check-form.service\";\nimport {SchemaService} from \"../../../services/schema.service\";\nimport {ProjectableForm} from \"../projectable-form.class\";\nimport {GrowlerService} from \"../../messaging/growler.service\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../extendable/extensions-noop.service\";\n\nimport {cloneDeep, defer, isEmpty, unset, forEach} from 'lodash';\nimport {GrowlerModel} from \"../../messaging/growler.model\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../../services/settings.service\";\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../services/ziti-data.service\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {Location} from \"@angular/common\";\nimport {ValidationService} from \"../../../services/validation.service\";\nimport {PostureCheck} from \"../../../models/posture-check\";\nimport {MatDialog} from \"@angular/material/dialog\";\n\n@Component({\n    selector: 'lib-posture-check',\n    templateUrl: './posture-check-form.component.html',\n    styleUrls: ['./posture-check-form.component.scss'],\n    standalone: false\n})\nexport class PostureCheckFormComponent extends ProjectableForm implements OnInit, OnDestroy {\n\n    @Input() override errors: any = {};\n    @Output() close: EventEmitter<void> = new EventEmitter<void>();\n\n    options: any[] = [];\n    isEditing = !isEmpty(this.formData.id);\n    formView = 'simple';\n    formDataInvalid = false;\n    editMode = false;\n    items: any = [];\n    associatedServices = [];\n    associatedServiceNames = [];\n    servicesLoading = false;\n    settings: any = {};\n    pcRoleAttributes = [];\n    postureCheckTypes = [];\n    processMultiItems = [\n        {\n            hashes: [],\n            osType: '',\n            path: '',\n            signerFingerprints: []\n        }\n    ];\n\n    osTypes = [\n        {name: 'Android', type: 'Android'},\n        {name: 'iOS', type: 'iOS'},\n        {name: 'Linux', type: 'Linux'},\n        {name: 'macOS', type: 'macOS'},\n        {name: 'Windows', type: 'Windows'},\n        {name: 'Windows Server', type: 'WindowsServer'},\n    ];\n\n    osCheckData = {\n        Android: {type: \"Android\", versions: [], min: '', max: '', enabled: false, isAdvanced: false},\n        iOS: {type: \"iOS\", versions: [], min: '', max: '', enabled: false, isAdvanced: false},\n        Linux: {type: \"Linux\", versions: [], min: '', max: '', enabled: false, isAdvanced: false},\n        macOS: {type: \"macOS\", versions: [], min: '', max: '', enabled: false, isAdvanced: false},\n        Windows: {type: \"Windows\", versions: [], min: '', max: '', enabled: false, isAdvanced: false},\n        WindowsServer: {type: \"WindowsServer\", versions: [], min: '', max: '', enabled: false, isAdvanced: false},\n    };\n\n    override entityType = 'posture-checks';\n    override entityClass = PostureCheck;\n\n    constructor(\n        public svc: PostureCheckFormService,\n        private schemaSvc: SchemaService,\n        growlerService: GrowlerService,\n        @Inject(SHAREDZ_EXTENSION) extService: ExtensionService,\n        @Inject(SETTINGS_SERVICE) protected override settingsService: SettingsService,\n        @Inject(ZITI_DATA_SERVICE) override zitiService: ZitiDataService,\n        protected override router: Router,\n        protected override route: ActivatedRoute,\n        location: Location,\n        private validationService: ValidationService,\n        dialogForm: MatDialog\n    ) {\n        super(growlerService, extService, zitiService, router, route, location, settingsService, dialogForm);\n        this.getPostureCheckTypes();\n        this.getIdentityRoleAttributes();\n    }\n\n    override ngOnInit(): void {\n        super.ngOnInit();\n        this.settingsService.settingsChange.subscribe((results:any) => {\n            this.settings = results;\n        });\n    }\n\n    override entityUpdated() {\n    super.entityUpdated();\n        if (this.formData.typeId === 'OS' && this.formData.operatingSystems) {\n            this.parseOperatingSystems();\n        }\n        if (this.formData.typeId === 'MAC') {\n            this.formData.macAddresses = this.formData.macAddresses.map(address => {\n                return address.match( /.{1,2}/g).join(':').toUpperCase();\n            });\n        }\n        if (this.formData.typeId === 'PROCESS_MULTI') {\n            this.processMultiItems = this.formData.processes || [];\n        }\n        this.initData = cloneDeep(this.formData);\n        this.isEditing = !isEmpty(this.formData.id);\n    }\n\n    getMinMaxVersions(version) {\n        const regex = /^\\s*(>=(\\d+\\.\\d+\\.\\d+))?\\s*(<=(\\d+\\.\\d+\\.\\d+))?\\s*$/;\n        let min, max;\n        try {\n            const matches = version.match(regex);\n            if (matches) {\n                min = matches[2];\n                max = matches[4];\n            }\n        } catch(e) {}\n        return {min, max};\n    }\n\n    parseOperatingSystems() {\n        this.formData.operatingSystems.forEach((osData) => {\n            this.osCheckData[osData.type] = osData;\n            this.osCheckData[osData.type].enabled = true;\n            this.osCheckData[osData.type].versions = this.osCheckData[osData.type].versions || [];\n\n            if (osData.versions.length > 1) {\n                this.osCheckData[osData.type].isAdvanced = true;\n            } else {\n                if (isEmpty(osData.versions[0])) {\n                    this.osCheckData[osData.type].min = '';\n                    this.osCheckData[osData.type].max = '';\n                    return;\n                }\n                const {min, max} = this.getMinMaxVersions(osData.versions[0]);\n                if (isEmpty(min) && isEmpty(max)) {\n                    this.osCheckData[osData.type].isAdvanced = true;\n                } else {\n                    this.osCheckData[osData.type].min = min || '';\n                    this.osCheckData[osData.type].max = max || '';\n                }\n            }\n        });\n    }\n\n    getOperatingSystemsData() {\n        const operatingSystems = [];\n        forEach(this.osCheckData, (os, key) => {\n            if (os.enabled) {\n                const versions = this.getOSVersionData(os);\n                operatingSystems.push({type: os.type, versions: versions});\n            }\n        });\n        return operatingSystems;\n    }\n\n    getOSVersionData(os) {\n        let versions = [];\n        if (!os.isAdvanced) {\n            let version = '';\n            if (!isEmpty(os.min)) {\n                version = `>=${os.min}`;\n            }\n            if (!isEmpty(os.max)) {\n                if (!isEmpty(version)) {\n                    version += ` <=${os.max}`;\n                } else {\n                    version = `<=${os.max}`;\n                }\n            }\n            if (!isEmpty(version)) {\n                versions = [version];\n            }\n        } else {\n            versions = os.versions;\n        }\n        return versions;\n    }\n\n    ngOnDestroy(): void {\n        this.clearForm();\n    }\n\n    getIdentityRoleAttributes() {\n        this.getRoleAttributes('posture-check-role-attributes').then((attributes) => {\n            this.pcRoleAttributes = attributes;\n        });\n    }\n\n    getPostureCheckTypes() {\n        return this.zitiService.get('posture-check-types', this.zitiService.DEFAULT_PAGING, []).then((result) => {\n            const pcTypes = result?.data || [];\n            pcTypes.push({id: 'MFA', name: 'Multi Factor'});\n            this.postureCheckTypes = pcTypes;\n        }).catch((resp) => {\n            const errorMessage = this.zitiService.getErrorMessage(resp);\n            const growlerData = new GrowlerModel(\n                'error',\n                'Error',\n                `Error Getting Posture Check Types`,\n                errorMessage,\n            );\n            this.growlerService.show(growlerData);\n            throw resp;\n        });\n    }\n\n    headerActionRequested(event) {\n        switch(event.name) {\n            case 'save':\n                this.save(event);\n                break;\n            case 'close':\n                this.returnToListPage();\n                break;\n            case 'toggle-view':\n                if (this.formData.typeId === 'OS') {\n                    if (event.data !== 'simple') {\n                        this.formData.operatingSystems = this.getOperatingSystemsData();\n                    } else {\n                        this.parseOperatingSystems();\n                    }\n                } else if (this.formData.typeId === 'PROCESS_MULTI') {\n                    if (event.data !== 'simple') {\n                        this.formData.processes = this.processMultiItems;\n                    } else {\n                        this.processMultiItems = this.formData.processes || [];\n                    }\n                }\n                this.formView = event.data;\n                break;\n            case 'delete':\n                this.deleteEntity();\n                break;\n        }\n    }\n\n    multiActionRequested(action) {\n        switch (action.id) {\n            case 'save':\n                this.save();\n                break;\n            case 'delete':\n                this.deleteEntity();\n                break;\n        }\n    }\n\n    removeProcessItem(index) {\n        this.processMultiItems.splice(index, 1);\n    }\n\n    addProcessItem() {\n        this.processMultiItems.push(\n            {\n                hashes: [],\n                osType: '',\n                path: '',\n                signerFingerprints: []\n            }\n        );\n    }\n\n    apiActionRequested(action) {\n        switch (action.id) {\n            case 'cli':\n                this.copyCLICommand();\n                break;\n            case 'curl':\n                this.copyCURLCommand();\n                break;\n        }\n    }\n\n    copyCLICommand() {\n        const command = `ziti edge ${this.formData.id ? 'update' : 'create'} posture-check ${this.formData.id ? `'${this.formData.id}'` : ''} ${this.formData.id ? '--name' : ''} '${this.formData.name}' --schema '${JSON.stringify(this.formData.schema)}' --tags-json '${JSON.stringify(this.formData.tags)}'`;\n\n        navigator.clipboard.writeText(command);\n        const growlerData = new GrowlerModel(\n            'success',\n            'Success',\n            `Text Copied`,\n            `CLI command copied to clipboard`,\n        );\n        this.growlerService.show(growlerData);\n    }\n\n    copyCURLCommand() {\n        const command = `curl '${this.apiCallURL}' \\\\\n    ${this.formData.id ? '--request PATCH \\\\' : '\\\\'}\n    -H 'accept: application/json' \\\\\n    -H 'content-type: application/json' \\\\\n    -H 'zt-session: ${this.settings.session.id}' \\\\\n    --data-raw '${JSON.stringify(this.apiData)}'`;\n\n        navigator.clipboard.writeText(command);\n        const growlerData = new GrowlerModel(\n            'success',\n            'Success',\n            `Text Copied`,\n            `CURL command copied to clipboard`,\n        );\n        this.growlerService.show(growlerData);\n    }\n\n    override clear() {\n        this.formData.configTypeId = '';\n        this.clearForm();\n    }\n\n    clearForm() {\n        this.items.forEach((item: any) => {\n            if (item?.component) item.component.destroy();\n        });\n        this.errors = {};\n        this.items = [];\n        this.formData = {};\n        if (this.subscription) this.subscription.unsubscribe();\n    }\n\n    async save(event?: any) {\n        if (!this.canSaveByPermissions()) {\n            return;\n        }\n        this.errors = {};\n        if (!this.validate()) {\n            this.isLoading = false;\n            return;\n        }\n\n        if (this.formData.typeId === 'OS') {\n            if (this.formView === 'simple') {\n                this.formData.operatingSystems = this.getOperatingSystemsData();\n            } else {\n                this.parseOperatingSystems();\n            }\n        }\n        if (this.formData.typeId === 'PROCESS_MULTI') {\n            if (this.formView === 'simple') {\n                this.formData.processes = this.processMultiItems;\n            }\n        }\n        const configId = await this.svc.save(this.formData).then((result) => {\n            if (!isEmpty(result?.id)) {\n                this.formData = result;\n                this.initData = cloneDeep(this.formData);\n            }\n            return result?.id;\n        }).finally(() => {\n            this.isLoading = false;\n        });\n        if (configId) {\n            this.initData = this.formData;\n            this._dataChange = false;\n            if (this.isModal) {\n                this.closeModal(true, true);\n            } else {\n                this.returnToListPage();\n            }\n        };\n    }\n\n    validate() {\n        this.errors = {};\n        const labels = [];\n        if (isEmpty(this.apiData.name)) {\n            this.errors['name'] = true;\n            labels.push('Name');\n        }\n        if (this.apiData.typeId === 'MAC' && isEmpty(this.apiData.macAddresses)) {\n            this.errors['macAddresses'] = true;\n            labels.push('Mac Addresses');\n        }\n        if (!isEmpty(this.errors)) {\n            let errorLabels = '';\n            labels.forEach((label, index) => {\n                errorLabels += `<li>${label}</li>`;\n            });\n            errorLabels = `<ul>${errorLabels}</ul>`;\n            const growler = new GrowlerModel(\n                'error',\n                'Invalid',\n                `Invalid Form Data`,\n                `Please correct the highlighted fields: ${errorLabels}`,\n            );\n            this.growlerService.show(growler);\n        }\n        return isEmpty(this.errors);\n    }\n\n    get apiCallURL() {\n        return this.settings.selectedEdgeController + '/edge/management/v1/posture-checks' + (this.formData.id ? `/${this.formData.id}` : '');\n    }\n\n    get apiData(): any {\n        const data: any = {\n            name: this.formData?.name || '',\n            typeId: this.formData?.typeId || {},\n            tags: this.formData?.tags\n        };\n        switch (this.formData.typeId) {\n            case 'MAC':\n                data.macAddresses = this.formData.macAddresses;\n                break;\n            case 'OS':\n                const operatingSystems = this.getOperatingSystemsData();\n                data.operatingSystems = operatingSystems;\n                break;\n            case 'DOMAIN':\n                data.domains = this.formData.domains;\n                break;\n            case 'MFA':\n                data.promptOnWake = this.formData.promptOnWake;\n                data.promptOnUnlock = this.formData.promptOnUnlock;\n                data.timeoutSeconds = this.formData.timeoutSeconds;\n                break;\n            case 'PROCESS_MULTI':\n                data.processes = this.processMultiItems;\n                break;\n            case 'PROCESS':\n                data.process = this.formData.process;\n                break;\n        }\n        this._apiData = data;\n        return this._apiData;\n    }\n\n    _apiData: any = {};\n    set apiData(data) {\n        this._apiData = data;\n    }\n\n    toggleOS(os) {\n        this.osCheckData[os].enabled = !this.osCheckData[os].enabled;\n    }\n\n    toggleMFAPrompt(type) {\n        switch (type) {\n            case 'wake':\n                this.formData.promptOnWake = !this.formData.promptOnWake;\n                break;\n            case 'unlock':\n                this.formData.promptOnUnlock = !this.formData.promptOnUnlock;\n                break;\n        }\n    }\n\n    dataChanged(event) {\n        this._apiData = cloneDeep(this.apiData);\n    }\n\n    preventEnterProp(event) {\n        event.stopPropagation();\n    }\n\n    pcTypeChanged(event) {\n\n    }\n\n    macAddressesChange(event) {\n\n    }\n}\n","<div class=\"posture-check-form-container projectable-form-wrapper\"\n  (keyup.enter)=\"save($event)\"\n  (keyup.escape)=\"closeModal(false)\"\n  tabindex=\"0\"\n  [class.projectable-form-hidden]=\"!dataInit\"\n  >\n  <lib-form-header\n    [data]=\"formData\"\n    [title]=\"(formData.id ? 'Edit Posture Check' : 'Create Posture Check')\"\n    [moreActions]=\"moreActions\"\n    [multiActions]=\"multiActions\"\n    (actionRequested)=\"headerActionRequested($event)\"\n    (multiActionRequested)=\"multiActionRequested($event)\"\n    [(formView)]=\"formView\"\n    [class.is-scrolled]=\"isScrolled\"\n    [saveDisabled]=\"formPermissionSaveDisabled\"\n    [saveTooltip]=\"formPermissionSaveTooltip\"\n    [strictReadonlyUi]=\"useStrictReadonlyForm\"\n  ></lib-form-header>\n  <div class=\"posture-checkform-container projectable-form-container\" #formContainer>\n    <div class=\"projectable-form-main-column form-group-row\" [hidden]=\"formView !== 'simple'\">\n      <div class=\"form-group-column three-fifths\">\n        <lib-form-field-container [title]=\"'Name'\" [label]=\"useStrictReadonlyForm ? '' : 'REQUIRED'\">\n            <input\n            id=\"PostureCheckName\"\n            type=\"text\"\n            maxlength=\"500\"\n            placeholder=\"Name this posture check\"\n            [ngClass]=\"{error: errors['name']}\"\n            [(ngModel)]=\"formData.name\"\n            [disabled]=\"useStrictReadonlyForm\"\n            >\n        </lib-form-field-container>\n        <lib-form-field-container\n          [title]=\"'Select or create Posture Check attributes'\"\n          [label]=\"useStrictReadonlyForm ? '' : 'OPTIONAL'\"\n          [contentStyle]=\"'z-index: 99999999'\"\n          [helpText]=\"'Attributes are tags applied to an resource. Apply the same tag to other Posture Checks to form a group of Posture Checks.'\"\n          >\n          <lib-tag-selector\n            [disableField]=\"useStrictReadonlyForm\"\n            [disableCreate]=\"useStrictReadonlyForm\"\n            [(selectedRoleAttributes)]=\"formData.roleAttributes\"\n            [availableRoleAttributes]=\"pcRoleAttributes\"\n            [placeholder]=\"'Add attributes to group Posture Checks'\"\n          ></lib-tag-selector>\n        </lib-form-field-container>\n        <lib-form-field-container [title]=\"'Type'\" [label]=\"useStrictReadonlyForm ? '' : 'REQUIRED'\" class=\"schema-json-editor\">\n          @if (postureCheckTypes.length > 0) {\n            <select\n              [(ngModel)]=\"formData.typeId\"\n              (change)=\"pcTypeChanged($event)\"\n              [disabled]=\"formData.id || useStrictReadonlyForm\"\n              [matTooltip]=\"formData.id ? 'Type cannot be changed' : ''\"\n              matTooltipPosition=\"below\"\n              id=\"SelectedConfigType\"\n              class=\"form-field-dropdown\"\n              (keyup.enter)=\"preventEnterProp($event)\"\n              >\n              <option value=\"\">Select posture check type...</option>\n              @for (type of postureCheckTypes; track type) {\n                <option\n                  [value]=\"type.id\"\n                  >\n                  {{ type.name }}\n                </option>\n              }\n            </select>\n          }\n        </lib-form-field-container>\n        @if (formData.typeId === 'MAC') {\n          <lib-form-field-container [title]=\"'MAC Addresses'\" [label]=\"useStrictReadonlyForm ? '' : 'REQUIRED'\">\n            <lib-chips-input\n              (keyup)=\"macAddressesChange($event)\"\n              [(ngModel)]=\"formData.macAddresses\"\n              [allowDuplicate]=\"false\"\n              placeholder=\"Enter mc addresses\"\n              [addOnBlur]=\"true\"\n              [ngClass]=\"{ error: errors['macAddresses'] }\"\n              [invalid]=\"errors['macAddresses']\"\n              separator=\",\"\n              (keyup.enter)=\"preventEnterProp($event)\"\n              [disabled]=\"useStrictReadonlyForm\"\n            ></lib-chips-input>\n          </lib-form-field-container>\n        }\n        @if (formData.typeId === 'DOMAIN') {\n          <lib-form-field-container [title]=\"'Windows Domain Details'\" [label]=\"useStrictReadonlyForm ? '' : 'REQUIRED'\">\n            <lib-chips-input\n              (keyup)=\"macAddressesChange($event)\"\n              [(ngModel)]=\"formData.domains\"\n              [allowDuplicate]=\"false\"\n              placeholder=\"Enter domains\"\n              [addOnBlur]=\"true\"\n              [ngClass]=\"{ error: errors['domains'] }\"\n              [invalid]=\"errors['domains']\"\n              separator=\",\"\n              (keyup.enter)=\"preventEnterProp($event)\"\n            ></lib-chips-input>\n          </lib-form-field-container>\n        }\n        @if (formData.typeId === 'PROCESS') {\n          <lib-form-field-container [title]=\"'Process Details'\" [label]=\"useStrictReadonlyForm ? '' : 'REQUIRED'\" [contentClass]=\"'form-field-input-group'\">\n            <div class=\"form-field-label-container process-os-details-header\">\n              <div class=\"form-field-header\">\n                <div class=\"form-field-title-container\">\n                  <span class=\"form-field-title\">Operating System</span>\n                </div>\n                <span class=\"form-field-label\" >Required</span>\n              </div>\n              <lib-filter-select\n                placeholder=\"Select OS...\"\n                optionLabel=\"name\"\n                optionValue=\"type\"\n                [options]=\"osTypes\"\n                [searchable]=\"false\"\n                [showClear]=\"true\"\n                [(ngModel)]=\"formData.process.osType\"\n                (keyup.enter)=\"preventEnterProp($event)\"\n                >\n                <ng-template libFilterSelectTrigger let-option=\"option\" let-value=\"value\">\n                  @if (value && value !== '') {\n                    <div class=\"os-type-dropdown-item\">\n                      <div class=\"os-type-dropdown-icon\" [class]=\"'os-type-dropdown-icon-' + value\"></div>\n                      <div>{{ value }}</div>\n                    </div>\n                  }\n                </ng-template>\n                <ng-template libFilterSelectOption let-os>\n                  <div class=\"os-type-dropdown-item\">\n                    <div class=\"os-type-dropdown-icon\" [class]=\"'os-type-dropdown-icon-' + os.type\"></div>\n                    <div>{{ os.name }}</div>\n                  </div>\n                </ng-template>\n              </lib-filter-select>\n            </div>\n            <div class=\"form-field-label-container\">\n              <div class=\"form-field-header\">\n                <div class=\"form-field-title-container\">\n                  <span class=\"form-field-title\">Binary Hashes</span>\n                  <div\n                    class=\"form-field-info infoicon\"\n                    matTooltip=\"Valid sha256 hashes of a binary\"\n                    matTooltipPosition=\"below\"\n                  ></div>\n                </div>\n              </div>\n              <lib-chips-input [(ngModel)]=\"formData.process.hashes\"\n                [allowDuplicate]=\"false\"\n                placeholder=\"Enter hashes\"\n                [addOnBlur]=\"true\"\n                [ngClass]=\"{ error: errors['processHashes'] }\"\n                [invalid]=\"errors['processHashes']\"\n                separator=\",\"\n                (keyup.enter)=\"preventEnterProp($event)\"\n                [disabled]=\"useStrictReadonlyForm\"\n              ></lib-chips-input>\n            </div>\n            <div class=\"form-field-label-container\">\n              <div class=\"form-field-header\">\n                <div class=\"form-field-title-container\">\n                  <span class=\"form-field-title\">Path</span>\n                </div>\n                <span class=\"form-field-label\" >Required</span>\n              </div>\n              <input class=\"form-field-input\" placeholder=\"/path/to/process\" [(ngModel)]=\"formData.process.path\" [ngClass]=\"{error: errors['processPath']}\"/>\n            </div>\n            <div class=\"form-field-label-container\">\n              <div class=\"form-field-header\">\n                <div class=\"form-field-title-container\">\n                  <span class=\"form-field-title\">Signer Fingerprints</span>\n                  <div\n                    class=\"form-field-info infoicon\"\n                    matTooltip=\"Fingerprints are the sha1 fingerprints (thumbprints) of valid signing certificates\"\n                    matTooltipPosition=\"below\"\n                  ></div>\n                </div>\n              </div>\n              <input class=\"form-field-input\" placeholder=\"Enter a fingerprint\" [(ngModel)]=\"formData.process.signerFingerprint\" [ngClass]=\"{error: errors['androidOSMin']}\"/>\n            </div>\n          </lib-form-field-container>\n        }\n        @if (formData.typeId === 'PROCESS_MULTI') {\n          <lib-form-field-container [title]=\"'Process Multi Details'\" [label]=\"useStrictReadonlyForm ? '' : 'REQUIRED'\" >\n            <div class=\"form-field-label-container\">\n              <div class=\"form-field-header\">\n                <div class=\"form-field-title-container\">\n                  <span class=\"form-field-title\">Semantic</span>\n                </div>\n                <span class=\"form-field-label\" >Required</span>\n              </div>\n              <select\n                [(ngModel)]=\"formData.semantic\"\n                id=\"PolicySemantic\"\n                class=\"form-field-dropdown\"\n                >\n                <option value=\"AllOf\">AllOf</option>\n                <option value=\"AnyOf\">AnyOf</option>\n              </select>\n            </div>\n            @for (process of processMultiItems; track process; let i = $index) {\n              <div class=\"process-multi-item form-field-input-group\">\n                @if (processMultiItems.length > 1) {\n                  <div class=\"icon-clear\" (click)=\"removeProcessItem(i)\"></div>\n                }\n                <div class=\"form-field-label-container process-os-details-header\">\n                  <div class=\"form-field-header\">\n                    <div class=\"form-field-title-container\">\n                      <span class=\"form-field-title\">Operating System</span>\n                    </div>\n                    <span class=\"form-field-label\" >Required</span>\n                  </div>\n                  <lib-filter-select\n                    placeholder=\"Select OS...\"\n                    optionLabel=\"name\"\n                    optionValue=\"type\"\n                    [options]=\"osTypes\"\n                    [searchable]=\"false\"\n                    [showClear]=\"true\"\n                    [(ngModel)]=\"process.osType\"\n                    (keyup.enter)=\"preventEnterProp($event)\"\n                    >\n                    <ng-template libFilterSelectTrigger let-option=\"option\" let-value=\"value\">\n                      @if (value && value !== '') {\n                        <div class=\"os-type-dropdown-item\">\n                          <div class=\"os-type-dropdown-icon\" [class]=\"'os-type-dropdown-icon-' + value\"></div>\n                          <div>{{ value }}</div>\n                        </div>\n                      }\n                    </ng-template>\n                    <ng-template libFilterSelectOption let-os>\n                      <div class=\"os-type-dropdown-item\">\n                        <div class=\"os-type-dropdown-icon\" [class]=\"'os-type-dropdown-icon-' + os.type\"></div>\n                        <div>{{ os.name }}</div>\n                      </div>\n                    </ng-template>\n                  </lib-filter-select>\n                </div>\n                <div class=\"form-field-label-container\">\n                  <div class=\"form-field-header\">\n                    <div class=\"form-field-title-container\">\n                      <span class=\"form-field-title\">Binary Hashes</span>\n                      <div\n                        class=\"form-field-info infoicon\"\n                        matTooltip=\"Valid sha256 hashes of a binary\"\n                        matTooltipPosition=\"below\"\n                      ></div>\n                    </div>\n                  </div>\n                  <lib-chips-input [(ngModel)]=\"process.hashes\"\n                    [allowDuplicate]=\"false\"\n                    placeholder=\"Enter hashes\"\n                    [addOnBlur]=\"true\"\n                    [ngClass]=\"{ error: errors['processHashes'] }\"\n                    [invalid]=\"errors['processHashes']\"\n                    separator=\",\"\n                    (keyup.enter)=\"preventEnterProp($event)\"\n                    [disabled]=\"useStrictReadonlyForm\"\n                  ></lib-chips-input>\n                </div>\n                <div class=\"form-field-label-container\">\n                  <div class=\"form-field-header\">\n                    <div class=\"form-field-title-container\">\n                      <span class=\"form-field-title\">Path</span>\n                    </div>\n                    <span class=\"form-field-label\" >Required</span>\n                  </div>\n                  <input class=\"form-field-input\" placeholder=\"/path/to/process\" [(ngModel)]=\"process.path\" [ngClass]=\"{error: errors['processPath']}\"/>\n                </div>\n                <div class=\"form-field-label-container\">\n                  <div class=\"form-field-header\">\n                    <div class=\"form-field-title-container\">\n                      <span class=\"form-field-title\">Signer Fingerprints</span>\n                      <div\n                        class=\"form-field-info infoicon\"\n                        matTooltip=\"Signer fingerprints are the sha1 fingerprints (thumbprints) of valid signing certificates\"\n                        matTooltipPosition=\"below\"\n                      ></div>\n                    </div>\n                  </div>\n                  <lib-chips-input (keyup)=\"macAddressesChange($event)\"\n                    [(ngModel)]=\"process.signerFingerprints\"\n                    [allowDuplicate]=\"false\"\n                    placeholder=\"Enter signer fingerprints\"\n                    [addOnBlur]=\"true\"\n                    [ngClass]=\"{ error: errors['process[' + i +'].signerFingerprints'] }\"\n                    [invalid]=\"errors['process[' + i +'].signerFingerprints']\"\n                    separator=\",\"\n                    (keyup.enter)=\"preventEnterProp($event)\"\n                    [disabled]=\"useStrictReadonlyForm\"\n                  ></lib-chips-input>\n                </div>\n              </div>\n            }\n            <div class=\"buttons process-multi-buttons\">\n              <button class=\"button\" (click)=\"addProcessItem()\">Add Another Process</button>\n            </div>\n          </lib-form-field-container>\n        }\n        @if (formData.typeId === 'MFA') {\n          <lib-form-field-container\n            [title]=\"'Multi Factor Details'\"\n            [layout]=\"'column'\"\n            [label]=\"useStrictReadonlyForm ? '' : 'REQUIRED'\"\n            >\n            <div class=\"form-field-row\">\n              <div class=\"form-field-label-container\">\n                <div class=\"form-field-title-container\">\n                  <span class=\"form-field-title\">Timeout (seconds)</span>\n                </div>\n                <input class=\"form-field-input\" placeholder=\"# in seconds\" [(ngModel)]=\"formData.timeoutSeconds\" [ngClass]=\"{error: errors['timeoutSeconds']}\" type=\"number\"/>\n              </div>\n              <div class=\"config-item os-toggle-container\" (click)=\"toggleMFAPrompt('wake')\">\n                <div class=\"form-field-title-container\">\n                  <span class=\"form-field-title\">Require On Wake</span>\n                </div>\n                <div class=\"config-container toggle-container os-toggle-container\">\n                  <div class=\"form-field-title-container\">\n                    <div class=\"config-container-label\">Require</div>\n                  </div>\n                  <div\n                    [ngClass]=\"{ on: formData.promptOnWake }\"\n                    class=\"toggle\"\n                    >\n                    <span [hidden]=\"!formData.promptOnWake\" class=\"on-label\">YES</span>\n                    <span [hidden]=\"formData.promptOnWake\" class=\"off-label\">NO</span>\n                    <div class=\"switch\"></div>\n                  </div>\n                </div>\n              </div>\n              <div class=\"config-item os-toggle-container\" (click)=\"toggleMFAPrompt('unlock')\">\n                <div class=\"form-field-title-container\">\n                  <span class=\"form-field-title\">Require On Unlock</span>\n                </div>\n                <div class=\"config-container toggle-container os-toggle-container\">\n                  <div class=\"form-field-title-container\">\n                    <div class=\"config-container-label\">Require</div>\n                  </div>\n                  <div\n                    [ngClass]=\"{ on: formData.promptOnUnlock }\"\n                    class=\"toggle\"\n                    >\n                    <span [hidden]=\"!formData.promptOnUnlock\" class=\"on-label\">YES</span>\n                    <span [hidden]=\"formData.promptOnUnlock\" class=\"off-label\">NO</span>\n                    <div class=\"switch\"></div>\n                  </div>\n                </div>\n              </div>\n            </div>\n          </lib-form-field-container>\n        }\n        @if (formData.typeId === 'OS') {\n          <lib-form-field-container\n            [showHeader]=\"false\"\n            [layout]=\"'column'\"\n            [label]=\"useStrictReadonlyForm ? '' : 'REQUIRED'\"\n            >\n            <div class=\"form-field-row os-version-row\">\n              <div class=\"config-item os-toggle-container\">\n                <div class=\"form-field-title-container\">\n                  <span class=\"form-field-title\">Operating System</span>\n                </div>\n                <div class=\"config-container toggle-container os-toggle-container\"\n                  (click)=\"toggleOS('Android')\">\n                  <div class=\"form-field-title-container\">\n                    <div class=\"pc-os-button android-os-button\"></div>\n                    <div class=\"config-container-label\">Android</div>\n                  </div>\n                  <div\n                    [ngClass]=\"{ on: osCheckData.Android.enabled }\"\n                    class=\"toggle\"\n                    >\n                    <span [hidden]=\"!osCheckData.Android.enabled\" class=\"on-label\">YES</span>\n                    <span [hidden]=\"osCheckData.Android.enabled\" class=\"off-label\">NO</span>\n                    <div class=\"switch\"></div>\n                  </div>\n                </div>\n              </div>\n              <div class=\"form-field-label-container\">\n                <div class=\"form-field-title-container\">\n                  <span class=\"form-field-title\">Min Version</span>\n                </div>\n                <input class=\"form-field-input\" placeholder=\"#.#.#\" [matTooltip]=\"osCheckData.Android.isAdvanced ? 'Use JSON view to edit' : ''\" [(ngModel)]=\"osCheckData.Android.min\" [ngClass]=\"{error: errors['androidOSMin']}\" [disabled]=\"!osCheckData.Android.enabled || osCheckData.Android.isAdvanced\"/>\n              </div>\n              <div class=\"form-field-label-container\">\n                <div class=\"form-field-title-container\">\n                  <span class=\"form-field-title\">Max Version</span>\n                </div>\n                <input class=\"form-field-input\" placeholder=\"#.#.#\" [matTooltip]=\"osCheckData.Android.isAdvanced ? 'Use JSON view to edit' : ''\" [(ngModel)]=\"osCheckData.Android.max\" [ngClass]=\"{error: errors['androidOSMax']}\" [disabled]=\"!osCheckData.Android.enabled || osCheckData.Android.isAdvanced\"/>\n              </div>\n            </div>\n            <div class=\"form-field-row os-version-row\">\n              <div class=\"config-item os-toggle-container\"\n                (click)=\"toggleOS('iOS')\">\n                <div class=\"config-container toggle-container os-toggle-container\">\n                  <div class=\"form-field-title-container\">\n                    <div class=\"pc-os-button ios-os-button\"></div>\n                    <div class=\"config-container-label\">iOS</div>\n                  </div>\n                  <div\n                    [ngClass]=\"{ on: osCheckData.iOS.enabled }\"\n                    class=\"toggle\"\n                    >\n                    <span [hidden]=\"!osCheckData.iOS.enabled\" class=\"on-label\">YES</span>\n                    <span [hidden]=\"osCheckData.iOS.enabled\" class=\"off-label\">NO</span>\n                    <div class=\"switch\"></div>\n                  </div>\n                </div>\n              </div>\n              <div class=\"form-field-label-container\">\n                <input class=\"form-field-input\" placeholder=\"#.#.#\" [matTooltip]=\"osCheckData.iOS.isAdvanced ? 'Use JSON view to edit' : ''\" [(ngModel)]=\"osCheckData.iOS.min\" [ngClass]=\"{error: errors['iOS']}\" [disabled]=\"!osCheckData.iOS.enabled || osCheckData.iOS.isAdvanced\"/>\n              </div>\n              <div class=\"form-field-label-container\">\n                <input class=\"form-field-input\" placeholder=\"#.#.#\" [matTooltip]=\"osCheckData.iOS.isAdvanced ? 'Use JSON view to edit' : ''\" [(ngModel)]=\"osCheckData.iOS.max\" [ngClass]=\"{error: errors['iOS']}\" [disabled]=\"!osCheckData.iOS.enabled || osCheckData.iOS.isAdvanced\"/>\n              </div>\n            </div>\n            <div class=\"form-field-row os-version-row\">\n              <div class=\"config-item os-toggle-container\"\n                (click)=\"toggleOS('Linux')\">\n                <div class=\"config-container toggle-container os-toggle-container\">\n                  <div class=\"form-field-title-container\">\n                    <div class=\"pc-os-button linux-os-button\"></div>\n                    <div class=\"config-container-label\">Linux</div>\n                  </div>\n                  <div\n                    [ngClass]=\"{ on: osCheckData.Linux.enabled }\"\n                    class=\"toggle\"\n                    >\n                    <span [hidden]=\"!osCheckData.Linux.enabled\" class=\"on-label\">YES</span>\n                    <span [hidden]=\"osCheckData.Linux.enabled\" class=\"off-label\">NO</span>\n                    <div class=\"switch\"></div>\n                  </div>\n                </div>\n              </div>\n              <div class=\"form-field-label-container\">\n                <input class=\"form-field-input\" placeholder=\"#.#.#\" [matTooltip]=\"osCheckData.Linux.isAdvanced ? 'Use JSON view to edit' : ''\" [(ngModel)]=\"osCheckData.Linux.min\" [ngClass]=\"{error: errors['linuxOS']}\" [disabled]=\"!osCheckData.Linux.enabled || osCheckData.Linux.isAdvanced\"/>\n              </div>\n              <div class=\"form-field-label-container\">\n                <input class=\"form-field-input\" placeholder=\"#.#.#\" [matTooltip]=\"osCheckData.Linux.isAdvanced ? 'Use JSON view to edit' : ''\" [(ngModel)]=\"osCheckData.Linux.max\" [ngClass]=\"{error: errors['linuxOS']}\" [disabled]=\"!osCheckData.Linux.enabled || osCheckData.Linux.isAdvanced\"/>\n              </div>\n            </div>\n            <div class=\"form-field-row os-version-row\">\n              <div class=\"config-item os-toggle-container\">\n                <div class=\"config-container toggle-container os-toggle-container\"\n                  (click)=\"toggleOS('macOS')\">\n                  <div class=\"form-field-title-container\">\n                    <div class=\"pc-os-button mac-os-button\"></div>\n                    <div class=\"config-container-label\">macOS</div>\n                  </div>\n                  <div\n                    [ngClass]=\"{ on: osCheckData.macOS.enabled }\"\n                    class=\"toggle\"\n                    >\n                    <span [hidden]=\"!osCheckData.macOS.enabled\" class=\"on-label\">YES</span>\n                    <span [hidden]=\"osCheckData.macOS.enabled\" class=\"off-label\">NO</span>\n                    <div class=\"switch\"></div>\n                  </div>\n                </div>\n              </div>\n              <div class=\"form-field-label-container\">\n                <input class=\"form-field-input\" placeholder=\"#.#.#\" [matTooltip]=\"osCheckData.macOS.isAdvanced ? 'Use JSON view to edit' : ''\" [(ngModel)]=\"osCheckData.macOS.min\" [ngClass]=\"{error: errors['macOS']}\" [disabled]=\"!osCheckData.macOS.enabled || osCheckData.macOS.isAdvanced\"/>\n              </div>\n              <div class=\"form-field-label-container\">\n                <input class=\"form-field-input\" placeholder=\"#.#.#\" [matTooltip]=\"osCheckData.macOS.isAdvanced ? 'Use JSON view to edit' : ''\" [(ngModel)]=\"osCheckData.macOS.max\" [ngClass]=\"{error: errors['macOS']}\" [disabled]=\"!osCheckData.macOS.enabled || osCheckData.macOS.isAdvanced\"/>\n              </div>\n            </div>\n            <div class=\"form-field-row os-version-row\">\n              <div class=\"config-item os-toggle-container\"\n                (click)=\"toggleOS('Windows')\">\n                <div class=\"config-container toggle-container os-toggle-container\">\n                  <div class=\"form-field-title-container\">\n                    <div class=\"pc-os-button windows-os-button\"></div>\n                    <div class=\"config-container-label\">Windows</div>\n                  </div>\n                  <div\n                    [ngClass]=\"{ on: osCheckData.Windows.enabled }\"\n                    class=\"toggle\"\n                    >\n                    <span [hidden]=\"!osCheckData.Windows.enabled\" class=\"on-label\">YES</span>\n                    <span [hidden]=\"osCheckData.Windows.enabled\" class=\"off-label\">NO</span>\n                    <div class=\"switch\"></div>\n                  </div>\n                </div>\n              </div>\n              <div class=\"form-field-label-container\">\n                <input class=\"form-field-input\" placeholder=\"#.#.#\" [matTooltip]=\"osCheckData.Windows.isAdvanced ? 'Use JSON view to edit' : ''\" [(ngModel)]=\"osCheckData.Windows.min\" [ngClass]=\"{error: errors['windowsOS']}\" [disabled]=\"!osCheckData.Windows.enabled || osCheckData.Windows.isAdvanced\"/>\n              </div>\n              <div class=\"form-field-label-container\">\n                <input class=\"form-field-input\" placeholder=\"#.#.#\" [matTooltip]=\"osCheckData.Windows.isAdvanced ? 'Use JSON view to edit' : ''\" [(ngModel)]=\"osCheckData.Windows.max\" [ngClass]=\"{error: errors['windowsOS']}\" [disabled]=\"!osCheckData.Windows.enabled || osCheckData.Windows.isAdvanced\"/>\n              </div>\n            </div>\n            <div class=\"form-field-row os-version-row\">\n              <div class=\"config-item os-toggle-container\"\n                (click)=\"toggleOS('WindowsServer')\">\n                <div class=\"config-container toggle-container os-toggle-container\">\n                  <div class=\"form-field-title-container\">\n                    <div class=\"pc-os-button windows-server-os-button\"></div>\n                    <div class=\"config-container-label\">Windows Server</div>\n                  </div>\n                  <div\n                    [ngClass]=\"{ on: osCheckData.WindowsServer.enabled }\"\n                    class=\"toggle\"\n                    >\n                    <span [hidden]=\"!osCheckData.WindowsServer.enabled\" class=\"on-label\">YES</span>\n                    <span [hidden]=\"osCheckData.WindowsServer.enabled\" class=\"off-label\">NO</span>\n                    <div class=\"switch\"></div>\n                  </div>\n                </div>\n              </div>\n              <div class=\"form-field-label-container\">\n                <input class=\"form-field-input\" placeholder=\"#.#.#\" [matTooltip]=\"osCheckData.WindowsServer.isAdvanced ? 'Use JSON view to edit' : ''\" [(ngModel)]=\"osCheckData.WindowsServer.min\" [ngClass]=\"{error: errors['windowsServerOS']}\" [disabled]=\"!osCheckData.WindowsServer.enabled || osCheckData.WindowsServer.isAdvanced\"/>\n              </div>\n              <div class=\"form-field-label-container\">\n                <input class=\"form-field-input\" placeholder=\"#.#.#\" [matTooltip]=\"osCheckData.WindowsServer.isAdvanced ? 'Use JSON view to edit' : ''\" [(ngModel)]=\"osCheckData.WindowsServer.max\" [ngClass]=\"{error: errors['windowsServerOS']}\" [disabled]=\"!osCheckData.WindowsServer.enabled || osCheckData.WindowsServer.isAdvanced\"/>\n              </div>\n            </div>\n          </lib-form-field-container>\n        }\n        <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n        <div [hidden]=\"!showMore\" class=\"form-group-column\">\n          @if (!hideTags) {\n            <lib-form-field-container\n              [title]=\"'Custom Tags'\"\n              [label]=\"'OPTIONAL'\"\n              class=\"form-field-advanced\"\n              >\n              <lib-custom-tags [(tags)]=\"formData.tags\" [readOnly]=\"useStrictReadonlyForm\"></lib-custom-tags>\n            </lib-form-field-container>\n          }\n        </div>\n      </div>\n      @if (showApiCalls) {\n        <div class=\"form-group-column two-fifths\">\n          <lib-form-field-container\n            [title]=\"'API Calls'\"\n            [label]=\"''\"\n            [headerActions]=\"apiOptions\"\n            (actionRequested)=\"apiActionRequested($event)\"\n            >\n            <div class=\"form-row\">\n              <input class=\"form-field-input\" [value]=\"apiCallURL\" readonly/>\n              <div class=\"url-copy icon-copy copy-text\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n            </div>\n            @if (formData) {\n              <lib-json-view [(data)]=\"apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n            }\n          </lib-form-field-container>\n        </div>\n      }\n    </div>\n    @if (formView === 'raw') {\n      <div class=\"form-group-column\">\n        @if (formData) {\n          <lib-json-view [(data)]=\"formData\" [readOnly]=\"useStrictReadonlyForm\"></lib-json-view>\n        }\n      </div>\n    }\n  </div>\n</div>\n@if (isLoading || !dataInit) {\n  <lib-loading-indicator [isLoading]=\"isLoading || !dataInit\"></lib-loading-indicator>\n}\n","export class Session {\n    name = '';\n    tags: any = {};\n    serviceId: string;\n    token: string;\n    type: string;\n    servicePolicies: any[];\n    identityId: string;\n    service: any;\n    edgeRouters: any[];\n    apiSessionId: string;\n    apiSession: any;\n    updatedAt: any;\n    createdAt: any;\n    id: string;\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Inject, Injectable} from '@angular/core';\nimport {DataTableFilterService, FilterObj} from \"../../features/data-table/data-table-filter.service\";\nimport _, {isEmpty, unset} from \"lodash\";\nimport moment from \"moment\";\nimport {ListPageServiceClass} from \"../../shared/list-page-service.class\";\nimport {\n    TableColumnDefaultComponent\n} from \"../../features/data-table/column-headers/table-column-default/table-column-default.component\";\nimport {CallbackResults} from \"../../features/list-page-features/list-page-form/list-page-form.component\";\nimport {SchemaService} from \"../../services/schema.service\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../services/settings.service\";\nimport {CsvDownloadService} from \"../../services/csv-download.service\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../features/extendable/extensions-noop.service\";\nimport {Session} from \"../../models/session\";\nimport {TableCellNameComponent} from \"../../features/data-table/cells/table-cell-name/table-cell-name.component\";\nimport {Router} from \"@angular/router\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class SessionsPageService extends ListPageServiceClass {\n\n    override DEFAULT_PAGING: any = {\n        filter: \"\",\n        noSearch: false,\n        order: \"asc\",\n        page: 1,\n        searchOn: \"id\",\n        sort: \"id\",\n        total: 50\n    }\n\n    private paging = this.DEFAULT_PAGING;\n\n    resourceType = 'sessions';\n    selectedConfig: any = {};\n    modalType = '';\n\n    override menuItems = [\n        {name: 'View', action: 'update'},\n        {name: 'Delete', action: 'delete'},\n    ]\n\n    constructor(\n        private schemaSvc: SchemaService,\n        @Inject(SETTINGS_SERVICE) settings: SettingsService,\n        filterService: DataTableFilterService,\n        csvDownloadService: CsvDownloadService,\n        @Inject(SHAREDZ_EXTENSION) extService: ExtensionService,\n        protected override router: Router\n    ) {\n        super(settings, filterService, csvDownloadService, extService, router);\n    }\n\n    initTableColumns(): any {\n\n        const edgeRoutersFormatter = (row) => {\n            let rowData = '';\n            row?.data?.edgeRouters?.forEach((router, index) => {\n                rowData += ((index>0) ? \",\" : \"\") + router.name;\n            });\n            return rowData;\n        };\n        const createdAtHeaderComponentParams = {\n            filterType: 'DATETIME',\n        };\n        const typeHeaderComponentParams = {\n            filterType: 'SELECT',\n            enableSorting: true,\n            filterOptions: [\n                { label: 'All', value: '', columnId: 'type' },\n                { label: 'Bind', value: 'Bind', columnId: 'type' },\n                { label: 'Dial', value: 'Dial', columnId: 'type' },\n            ],\n            getFilterOptions: () => {\n                return typeHeaderComponentParams.filterOptions;\n            }\n        };\n        return [\n            {\n                colId: 'id',\n                field: 'id',\n                headerName: 'ID',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: this.headerComponentParams,\n                cellRenderer: TableCellNameComponent,\n                cellRendererParams: { pathRoot: this.basePath },\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.openEditForm(data?.data?.id);\n                },\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: true,\n                filter: false,\n                sortColumn: this.sort.bind(this),\n            },\n            {\n                colId: 'service.name',\n                field: 'service.name',\n                headerName: 'Service Name',\n                headerComponent: TableColumnDefaultComponent,\n                cellRenderer: TableCellNameComponent,\n                cellRendererParams: { pathRoot: 'services/advanced', itemProp: 'service.id' },\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.openEditForm(data?.data?.id);\n                },\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: false,\n                filter: false,\n                sortColumn: this.sort.bind(this),\n            },\n            {\n                colId: 'service',\n                field: 'service.id',\n                headerName: 'Service ID',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: this.headerComponentParams,\n                cellRenderer: TableCellNameComponent,\n                cellRendererParams: { pathRoot: 'services/advanced', itemProp: 'service.id' },\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.openEditForm(data?.data?.id);\n                },\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: true,\n                filter: true,\n                sortColumn: this.sort.bind(this),\n            },\n            {\n                colId: 'edgeRouters',\n                field: 'edgeRouters',\n                headerName: 'Edge Routers',\n                headerComponent: TableColumnDefaultComponent,\n                valueFormatter: edgeRoutersFormatter,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                width: this.remToPx(10),\n            },\n            {\n                colId: 'type',\n                field: 'type',\n                headerName: 'Type',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: typeHeaderComponentParams,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                width: this.remToPx(10),\n            },\n            {\n                colId: 'isSystem',\n                field: 'isSystem',\n                headerName: 'Is System',\n                headerComponent: TableColumnDefaultComponent,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                width: this.remToPx(10),\n            },\n            {\n                colId: 'createdAt',\n                field: 'createdAt',\n                headerName: 'Created At',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: createdAtHeaderComponentParams,\n                valueFormatter: this.createdAtFormatter,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                width: this.remToPx(10),\n            }\n        ];\n    }\n\n    getData(filters?: FilterObj[], sort?: any) {\n        if (sort.sortBy === 'name') {\n            sort.sortBy = 'id';\n        }\n        // we can customize filters or sorting here before moving on...\n        return super.getTableData('sessions', this.paging, filters, sort)\n            .then((results: any) => {\n                return this.processData(results);\n            });\n    }\n\n    private processData(results: any) {\n        if (!isEmpty(results?.data)) {\n            //pre-process data before rendering\n            results.data = this.addActionsPerRow(results);\n        }\n        return results;\n    }\n\n    private addActionsPerRow(results: any): any[] {\n        return results.data.map((row) => {\n            row.actionList = ['update', 'delete'];\n            return row;\n        });\n    }\n\n    public openUpdate(item?: any) {\n        this.modalType = 'session';\n        if (item) {\n            this.selectedConfig = item;\n            this.selectedConfig.badges = [];\n            unset(this.selectedConfig, '_links');\n        } else {\n            this.selectedConfig = new Session();\n        }\n        this.sideModalOpen = true;\n    }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, Inject, OnInit} from '@angular/core';\nimport {DataTableFilterService} from \"../../features/data-table/data-table-filter.service\";\nimport {SessionsPageService} from \"./sessions-page.service\";\nimport {TabNameService} from \"../../services/tab-name.service\";\nimport {ListPageComponent} from \"../../shared/list-page-component.class\";\nimport {ConsoleEventsService} from \"../../services/console-events.service\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {ConfirmComponent} from \"../../features/confirm/confirm.component\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../features/extendable/extensions-noop.service\";\n\n\n@Component({\n    selector: 'lib-sessions',\n    templateUrl: './sessions-page.component.html',\n    styleUrls: ['./sessions-page.component.scss'],\n    standalone: false\n})\nexport class SessionsPageComponent extends ListPageComponent implements OnInit {\n    title = 'Sessions'\n    tabs: { url: string, label: string }[] ;\n    isLoading: boolean;\n    formDataChanged = false;\n\n    constructor(\n        override svc: SessionsPageService,\n        filterService: DataTableFilterService,\n        private tabNames: TabNameService,\n        consoleEvents: ConsoleEventsService,\n        dialogForm: MatDialog,\n        @Inject(SHAREDZ_EXTENSION) private extService: ExtensionService,\n    ) {\n        super(filterService, svc, consoleEvents, dialogForm, extService);\n    }\n\n    override ngOnInit() {\n        this.tabs = this.tabNames.getTabs('sessions');\n        this.svc.refreshData = this.refreshData;\n        super.ngOnInit();\n    }\n\n    headerActionClicked(action: string) {\n        switch (action) {\n            case 'add':\n                this.svc.openEditForm();\n                break;\n            case 'edit':\n                this.svc.openEditForm();\n                break;\n            case 'delete':\n                const selectedItems = this.rowData.filter((row) => {\n                    return row.selected;\n                });\n                const label = selectedItems.length > 1 ? 'sessions' : 'sessions';\n                this.openBulkDelete(selectedItems, label);\n                break;\n            default:\n        }\n    }\n\n    tableAction(event: any) {\n        this.trackMenuAction(event?.action, event?.item);\n        switch(event?.action) {\n            case 'toggleAll':\n            case 'toggleItem':\n                this.itemToggled(event.item)\n                break;\n            case 'update':\n                this.svc.openEditForm(event.item?.id);\n                break;\n            case 'create':\n                this.svc.openEditForm();\n                break;\n            case 'delete':\n                this.deleteItem(event.item)\n                break;\n            case 'download-all':\n                this.downloadAllItems();\n                break;\n            case 'download-selected':\n                this.svc.downloadItems(this.selectedItems);\n                break;\n            default:\n                break;\n        }\n    }\n\n    trackMenuAction(action: string, item: any) {\n        this.extService?.consoleActionTriggered?.emit({\n            action,\n            page: 'session',\n            item,\n            type:'menu-action'\n        });\n    }\n    override openBulkDelete(selectedItems, label) {\n        const updatedItems = selectedItems.map((item) => {\n            return {\n                name: item.service?.name + ': ' + item.id,\n                id: item.id\n            }\n        });\n        super.openBulkDelete(updatedItems, label);\n    }\n\n    deleteItem(item: any) {\n        this.openBulkDelete([item], 'sessions');\n    }\n\n    closeModal(event: any) {\n        this.svc.sideModalOpen = false;\n        if(event?.refresh) {\n            this.refreshData();\n        }\n    }\n\n    dataChanged(event) {\n        this.formDataChanged = event;\n    }\n}\n","<div class=\"ziti-page-container ziti-sessions-container\">\n  <lib-list-page-header [title]=\"title\"\n    [tabs]=\"tabs\"\n    [hideAction]=\"true\"\n    [blockCreate]=\"headerBlockCreate\"\n    [blockDelete]=\"headerBlockDelete\"\n  (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n\n  <lib-data-table [tableId]=\"'sessions'\"\n    [noItemsReadonly]=\"headerBlockCreate\"\n    [accessDenied]=\"headerBlockRead\"\n    [rowData]=\"rowData\"\n    [isLoading]=\"isLoading\"\n    [columnDefinitions]=\"columnDefs\"\n    (actionRequested)=\"tableAction($event)\"\n    [startCount]=\"startCount\"\n    [endCount]=\"endCount\"\n    [totalCount]=\"totalCount\"\n    [emptyMsg]=\"'No Sessions defined'\"\n    [filterApplied]=\"filterApplied\"\n    [filterColumn]=\"'id'\"\n    [filterName]=\"'id'\"\n    [menuItems]=\"svc.menuItems\"\n    [showNoItemsAdd]=\"false\"\n    (gridReady)=\"gridReady($event)\"\n    >\n  </lib-data-table>\n</div>\n@if (isLoading) {\n  <lib-loading-indicator [isLoading]=\"isLoading\"></lib-loading-indicator>\n}\n","import {Injectable, Inject, InjectionToken} from \"@angular/core\";\nimport {isEmpty, unset, keys} from 'lodash';\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../services/ziti-data.service\";\nimport {GrowlerService} from \"../../messaging/growler.service\";\nimport {GrowlerModel} from \"../../messaging/growler.model\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../../services/settings.service\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../extendable/extensions-noop.service\";\n\nimport {Session} from \"../../../models/session\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class SessionFormService {\n\n    associatedIdentities: any = [];\n    associatedIdentityNames: any = [];\n    associatedServices: any = [];\n    associatedServiceNames: any = [];\n\n    constructor(\n        @Inject(SETTINGS_SERVICE) public settingsService: SettingsService,\n        @Inject(ZITI_DATA_SERVICE) private zitiService: ZitiDataService,\n        private growlerService: GrowlerService,\n        @Inject(SHAREDZ_EXTENSION)private extService: ExtensionService\n    ) {}\n \n    save(formData): Promise<any> {\n        const isUpdate = !isEmpty(formData.id);\n        const data: any = this.getSessionDataModel(formData, isUpdate);\n        const svc = isUpdate ? this.zitiService.patch.bind(this.zitiService) : this.zitiService.post.bind(this.zitiService);\n        return svc('api-sessions', data, formData.id).then(async (result: any) => {\n            const id = result?.data?.id || formData.id;\n            let router = await this.zitiService.getSubdata('api-sessions', id, '').then((routerData) => {\n                return routerData.data;\n            });\n            return this.extService.formDataSaved(router).then((formSavedResult: any) => {\n                const returnVal = {\n                    data: router,\n                    close: this.extService.closeAfterSave\n                };\n                const growlerData = new GrowlerModel(\n                    'success',\n                    'Success',\n                    `API Session ${isUpdate ? 'Updated' : 'Created'}`,\n                    `Successfully ${isUpdate ? 'updated' : 'created'} API Session: ${formData.name}`,\n                );\n                this.growlerService.show(growlerData);\n                return returnVal;\n            }).catch((result) => {\n                return false;\n            });\n        }).catch((resp) => {\n            const errorMessage = this.zitiService.getErrorMessage(resp);\n            const growlerData = new GrowlerModel(\n                'error',\n                'Error',\n                `Error ${isUpdate ? 'Updating' : 'Creating'} API Session`,\n                errorMessage,\n            );\n            this.growlerService.show(growlerData);\n            throw resp;\n        })\n    }\n\n    getSessionDataModel(formData, isUpdate) {\n        const saveModel = new Session();\n        const modelProperties = keys(saveModel);\n        modelProperties.forEach((prop) => {\n            switch(prop) {\n                default:\n                    saveModel[prop] = formData[prop];\n            }\n        });\n        return saveModel;\n    }\n\n    copyToClipboard(val) {\n        navigator.clipboard.writeText(val);\n        const growlerData = new GrowlerModel(\n            'success',\n            'Success',\n            `Text Copied`,\n            `API call URL copied to clipboard`,\n        );\n        this.growlerService.show(growlerData);\n    }\n}\n","import {\n  Component,\n  EventEmitter,\n  Input,\n  OnInit,\n  OnDestroy,\n  Output,\n  OnChanges,\n  SimpleChanges,\n  AfterViewInit,\n  Inject\n} from '@angular/core';\nimport {Subscription} from 'rxjs';\nimport {ProjectableForm} from \"../projectable-form.class\";\n\nimport {isEmpty, delay, cloneDeep, isEqual, set, unset} from 'lodash';\nimport moment from \"moment\";\n\nimport {SETTINGS_SERVICE, SettingsService} from \"../../../services/settings.service\";\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../services/ziti-data.service\";\nimport {GrowlerService} from \"../../messaging/growler.service\";\nimport {SessionFormService} from './session-form.service';\nimport {MatDialogRef} from \"@angular/material/dialog\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../extendable/extensions-noop.service\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {Location} from \"@angular/common\";\nimport {Session} from \"../../../models/session\";\n\n@Component({\n    selector: 'lib-sessions-form',\n    templateUrl: './session-form.component.html',\n    styleUrls: ['./session-form.component.scss'],\n    providers: [\n        {\n            provide: MatDialogRef,\n            useValue: {}\n        }\n    ],\n    standalone: false\n})\nexport class SessionFormComponent extends ProjectableForm implements OnInit, OnChanges, OnDestroy, AfterViewInit {\n  @Input() edgeRouterRoleAttributes: any[] = [];\n  @Output() close: EventEmitter<any> = new EventEmitter<any>();\n  @Input() headerToggle = false;\n\n  override entityType = 'sessions';\n  override entityClass = Session;\n\n  moment = moment;\n\n  associatedIdentity: any = {};\n  formView = 'simple';\n  isEditing = false;\n  servicesLoading = false;\n  identityLoading = false;\n  authPolicies: any = [\n    {id: 'default', name: 'Default'}\n  ];\n\n  associatedEdgeRouters = [];\n  associatedServicePolicies = [];\n  associatedEdgeRoutersMap = {};\n  associatedServicePoliciesMap = {};\n\n  settings: any = {};\n\n  constructor(\n      @Inject(SETTINGS_SERVICE) protected override settingsService: SettingsService,\n      public svc: SessionFormService,\n      @Inject(ZITI_DATA_SERVICE) override zitiService: ZitiDataService,\n      growlerService: GrowlerService,\n      @Inject(SHAREDZ_EXTENSION) extService: ExtensionService,\n      protected override router: Router,\n      protected override route: ActivatedRoute,\n      location: Location\n  ) {\n    super(growlerService, extService, zitiService, router, route, location, settingsService);\n  }\n\n  override ngOnInit(): void {\n    super.ngOnInit();\n    this.subscription.add(\n      this.settingsService.settingsChange.subscribe((results:any) => {\n        this.settings = results;\n      })\n    );\n    this.subscription.add(\n      this.extService.formDataChanged.subscribe((data) => {\n        if (data.isEmpty) {\n          return;\n        }\n        this.formData = data;\n        this.initAssociatedEntities();\n      })\n    );\n  }\n\n  override entityUpdated() {\n    super.entityUpdated();\n    this.initAssociatedEntities();\n  }\n\n  initAssociatedEntities() {\n    this.getAssociatedIdentity();\n    this.getAssociatedEdgeRouters();\n    this.getAssociatedServicePolicies();\n  }\n\n  getAssociatedIdentity() {\n    this.identityLoading = true;\n    this.zitiService.getSubdata('identities', this.formData.identityId, '').then((result) => {\n      this.associatedIdentity = result?.data || {};\n    }).finally(() => {\n      this.identityLoading = false;\n    });\n  }\n\n  getAssociatedEdgeRouters() {\n    if (!this.formData.edgeRouters) {\n      this.associatedEdgeRouters = []\n      return;\n    }\n    this.associatedEdgeRouters = this.formData.edgeRouters.map((router) => {\n      const item = cloneDeep(router);\n      this.associatedEdgeRoutersMap[item.name] = item;\n      item.href = '/routers/' + item.id;\n      return item;\n    });\n  }\n\n  getAssociatedServicePolicies() {\n    if (!this.formData.servicePolicies) {\n      this.associatedServicePolicies = []\n      return;\n    }\n    this.associatedServicePolicies = this.formData.servicePolicies.map((policy) => {\n      const item = cloneDeep(policy);\n      this.associatedServicePoliciesMap[item.name] = item;\n      item.href = '/service-policies/' + item.id;\n      return item;\n    });\n  }\n\n  previewEdgeRouter(routerName, router) {\n    const selectedRouter = this.associatedEdgeRoutersMap[routerName];\n    router.navigateByUrl('/routers/' + selectedRouter.id);\n  }\n\n  previewServicePolicy(policyName, router) {\n    const selectedRouter = this.associatedServicePoliciesMap[policyName];\n    router.navigateByUrl('/service-policies/' + selectedRouter.id);\n  }\n\n  identityNameLinkClicked(event) {\n    this.router.navigateByUrl('/identities/' + this.associatedIdentity.id);\n    event.preventDefault();\n  }\n\n  serviceNameLinkClicked(event) {\n    this.router.navigateByUrl('/services/advanced/' + this.formData.service.id);\n    event.preventDefault();\n  }\n\n  apiSessionLinkClicked(event) {\n    this.router.navigateByUrl('/api-sessions/' + this.formData.apiSessionId);\n    event.preventDefault();\n  }\n\n  ngOnDestroy() {\n    this.extService?.closed?.emit({});\n    this.subscription.unsubscribe();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    this.isEditing = !isEmpty(this.formData.id);\n  }\n\n  get hasEnrolmentToken() {\n    return !isEmpty(this.formData.enrollmentJwt) || !isEmpty(this.formData.enrollmentToken);\n  }\n\n  headerActionRequested(action) {\n    switch(action.name) {\n      case 'save':\n        this.save();\n        break;\n      case 'close':\n        this.closeForm();\n        break;\n      case 'toggle-view':\n        this.formView = action.data;\n        break;\n    }\n  }\n\n  async save(event?) {}\n\n  get apiCallURL() {\n    return this.settings.selectedEdgeController + '/edge/management/v1/sessions' + (this.formData.id ? `/${this.formData.id}` : '');\n  }\n\n  get apiData() {\n    const data: any = {\n          name: this.formData?.name || '',\n          appData: this.formData?.appData || '',\n          roleAttributes: this.formData.roleAttributes || '',\n          isTunnelerEnabled: this.formData.isTunnelerEnabled,\n          noTraversal: this.formData.noTraversal,\n          cost: this.formData.cost || '0',\n          tags: this.formData.tags || ''\n    }\n    if (!this.isEditing) {\n      data.enrollment = this.formData.enrollment || {ott: true};\n    }\n    return data;\n  }\n\n  _apiData = {};\n  set apiData(data) {\n    this._apiData = data;\n  }\n\n  toggleDisabled(state = undefined) {\n    if (state !== undefined) {\n      this.formData.disabled = state;\n      return;\n    }\n    this.formData.disabled = !this.formData.disabled;\n  }\n\n  toggleNoTraversal() {\n    this.formData.noTraversal = !this.formData.noTraversal;\n  }\n\n  clear(): void {\n  }\n}\n","<div class=\"projectable-form-wrapper\"\n  (keyup.enter)=\"save($event)\"\n  (keyup.escape)=\"closeModal(false)\"\n  >\n  <lib-form-header\n    [data]=\"formData\"\n    [title]=\"'Session Details'\"\n    [moreActions]=\"moreActions\"\n    (actionRequested)=\"headerActionRequested($event)\"\n    [(formView)]=\"formView\"\n    [showHeaderButton]=\"false\"\n    [strictReadonlyUi]=\"useStrictReadonlyForm\"\n  ></lib-form-header>\n  <div class=\"edge-router-form-container projectable-form-container\">\n    @if (formView === 'simple') {\n      <div class=\"projectable-form-main-column form-group-row\">\n        <div class=\"form-group-column three-fifths\">\n          <lib-form-field-container [showHeader]=\"false\">\n            <div class=\"form-field-label-container\">\n              <div class=\"form-field-title-container\">\n                <span class=\"form-field-title\">ID</span>\n              </div>\n              <div class=\"config-container\">\n                <span>{{formData.id}}</span>\n              </div>\n            </div>\n            <div class=\"form-field-label-container\">\n              <div class=\"form-field-title-container\">\n                <span class=\"form-field-title\">Service Name</span>\n              </div>\n              <a class=\"form-field-link\" [href]=\"'./services/' + formData.service.id\" (click)=\"serviceNameLinkClicked($event)\">\n                <div class=\"config-container config-container-clickable\">\n                  <span>{{formData.service.name}}</span>\n                </div>\n              </a>\n            </div>\n            <div class=\"form-field-label-container\">\n              <div class=\"form-field-title-container\">\n                <span class=\"form-field-title\">Identity Name</span>\n              </div>\n              <a class=\"form-field-link\" [href]=\"'./identities/' + associatedIdentity.id\" (click)=\"identityNameLinkClicked($event)\">\n                <div class=\"config-container config-container-clickable\">\n                  <div class=\"entity-name-and-spinner\">\n                    <span>{{associatedIdentity.name}}</span>\n                    @if (identityLoading) {\n                      <div class=\"spinner\"></div>\n                    }\n                  </div>\n                </div>\n              </a>\n            </div>\n            <div class=\"form-field-label-container\">\n              <div class=\"form-field-title-container\">\n                <span class=\"form-field-title\">API Session ID</span>\n              </div>\n              <a class=\"form-field-link\" [href]=\"'./api-sessions/' + formData.apiSessionId\" (click)=\"apiSessionLinkClicked($event)\">\n                <div class=\"config-container config-container-clickable\">\n                  <span>{{formData.apiSessionId}}</span>\n                </div>\n              </a>\n            </div>\n            <div class=\"form-field-label-container\">\n              <div class=\"form-field-title-container\">\n                <span class=\"form-field-title\">Type</span>\n              </div>\n              <div class=\"config-container\">\n                <span>{{formData.type}}</span>\n              </div>\n            </div>\n            <div class=\"form-field-label-container\">\n              <div class=\"form-field-title-container\">\n                <span class=\"form-field-title\">Created At</span>\n              </div>\n              <div class=\"config-container\">\n                <span>{{moment(formData.createdAt).format(\"M/D/YYYY h:mm A\")}}</span>\n              </div>\n            </div>\n            <div class=\"form-field-label-container\">\n              <div class=\"form-field-title-container\">\n                <span class=\"form-field-title\">Updated At</span>\n              </div>\n              <div class=\"config-container\">\n                <span>{{moment(formData.updatedAt).format(\"M/D/YYYY h:mm A\")}}</span>\n              </div>\n            </div>\n          </lib-form-field-container>\n          <ng-content select=\"[slot=column-1-slot-1]\"></ng-content>\n        </div>\n        <div class=\"form-group-column two-fifths\">\n          <lib-form-field-container\n            [title]=\"'Associated Entities'\"\n            [label]=\"'click item to view details'\"\n            [helpText]=\"'List the edge routers and service policies that are associated with this session. Click on the entity name to navigate to the entity\\'s detailed view.'\"\n            [class]=\"'no-gap'\"\n            >\n            <div class=\"form-row space-between\" style=\"margin-top: 0;\">\n              <div class=\"config-title-row\">\n                <span class=\"form-field-title\">Edge Routers</span>\n              </div>\n              <span class=\"form-field-count\">{{associatedEdgeRouters.length}}</span>\n            </div>\n            <lib-preview-list\n              [isLoading]=\"false\"\n              [allNames]=\"associatedEdgeRouters\"\n              [allowRemove]=\"false\"\n              [clickable]=\"true\"\n              [showfilter]=\"false\"\n              [tooltip]=\"'View Edge Router'\"\n              (itemSelected)=\"previewEdgeRouter($event, router)\"\n            ></lib-preview-list>\n            <div class=\"form-row space-between\">\n              <div class=\"config-title-row\">\n                <span class=\"form-field-title\">Service Policies</span>\n              </div>\n              <span class=\"form-field-count\">{{associatedServicePolicies.length}}</span>\n            </div>\n            <lib-preview-list\n              [isLoading]=\"false\"\n              [clickable]=\"true\"\n              (itemSelected)=\"previewServicePolicy($event, router)\"\n              [tooltip]=\"'View Service Policy'\"\n              [allNames]=\"associatedServicePolicies\"\n              [showfilter]=\"false\"\n            ></lib-preview-list>\n          </lib-form-field-container>\n        </div>\n      </div>\n    }\n    @if (formView === 'raw') {\n      <div class=\"form-group-column\">\n        @if (formData) {\n          <lib-json-view [(data)]=\"formData\" [readOnly]=\"useStrictReadonlyForm\"></lib-json-view>\n        }\n      </div>\n    }\n  </div>\n</div>\n@if (isLoading) {\n  <lib-loading-indicator [isLoading]=\"isLoading\"></lib-loading-indicator>\n}\n","export class APISession {\n    name = '';\n    tags: any = {};\n    serviceId: string;\n    token: string;\n    type: string;\n    servicePolicies: any[];\n    identityId: string;\n    service: any;\n    edgeRouters: any[];\n    isCertExtendable: boolean;\n    isMfaComplete: boolean;\n    isMfaRequired: boolean;\n    updatedAt: any;\n    createdAt: any;\n    id: string;\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Inject, Injectable} from '@angular/core';\nimport {DataTableFilterService, FilterObj} from \"../../features/data-table/data-table-filter.service\";\nimport _, {isEmpty, unset} from \"lodash\";\nimport moment from \"moment\";\nimport {ListPageServiceClass} from \"../../shared/list-page-service.class\";\nimport {\n    TableColumnDefaultComponent\n} from \"../../features/data-table/column-headers/table-column-default/table-column-default.component\";\nimport {CallbackResults} from \"../../features/list-page-features/list-page-form/list-page-form.component\";\nimport {SchemaService} from \"../../services/schema.service\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../services/settings.service\";\nimport {CsvDownloadService} from \"../../services/csv-download.service\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../features/extendable/extensions-noop.service\";\nimport {APISession} from \"../../models/api-session\";\nimport {TableCellNameComponent} from \"../../features/data-table/cells/table-cell-name/table-cell-name.component\";\nimport {Router} from \"@angular/router\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class ApiSessionsPageService extends ListPageServiceClass {\n\n    override DEFAULT_PAGING: any = {\n        filter: \"\",\n        noSearch: false,\n        order: \"asc\",\n        page: 1,\n        searchOn: \"service\",\n        sort: \"service\",\n        total: 50\n    }\n\n    private paging = this.DEFAULT_PAGING;\n\n    resourceType = 'api-sessions';\n    selectedConfig: any = {};\n    modalType = '';\n\n    override menuItems = [\n        {name: 'Edit', action: 'update'},\n        {name: 'Delete', action: 'delete'},\n    ]\n\n    constructor(\n        private schemaSvc: SchemaService,\n        @Inject(SETTINGS_SERVICE) settings: SettingsService,\n        filterService: DataTableFilterService,\n        csvDownloadService: CsvDownloadService,\n        @Inject(SHAREDZ_EXTENSION) extService: ExtensionService,\n        protected override router: Router\n    ) {\n        super(settings, filterService, csvDownloadService, extService, router);\n    }\n\n    initTableColumns(): any {\n\n        const edgeRoutersFormatter = (row) => {\n            let rowData = '';\n            row?.data?.edgeRouters?.forEach((router, index) => {\n                rowData += ((index>0) ? \",\" : \"\") + router.name;\n            });\n            return rowData;\n        };\n        const createdAtHeaderComponentParams = {\n            filterType: 'DATETIME',\n        };\n\n        return [\n            {\n                colId: 'id',\n                field: 'id',\n                headerName: 'ID',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: this.headerComponentParams,\n                cellRenderer: TableCellNameComponent,\n                cellRendererParams: { pathRoot: this.basePath },\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                width: this.remToPx(10),\n                hide: false,\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.openEditForm(data?.data?.id);\n                },\n            },\n            {\n                colId: 'identity.name',\n                field: 'identity.name',\n                headerName: 'Identity Name',\n                headerComponent: TableColumnDefaultComponent,\n                cellRenderer: TableCellNameComponent,\n                cellRendererParams: { pathRoot: 'identities', itemProp: 'identity.id' },\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.openIdentityForm(data?.data?.identityId);\n                },\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: false,\n                filter: true,\n                sortColumn: this.sort.bind(this),\n            },\n            {\n                colId: 'identity',\n                field: 'identity.id',\n                headerName: 'Identity ID',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: this.headerComponentParams,\n                cellRenderer: TableCellNameComponent,\n                cellRendererParams: { pathRoot: 'identities', itemProp: 'identity.id' },\n                onCellClicked: (data) => {\n                    if (this.hasSelectedText()) {\n                        return;\n                    }\n                    this.openIdentityForm(data?.data?.identityId);\n                },\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                sortable: true,\n                filter: true,\n                sortColumn: this.sort.bind(this),\n            },\n            {\n                colId: 'ipAddress',\n                field: 'ipAddress',\n                headerName: 'IP Address',\n                headerComponentParams: this.headerComponentParams,\n                headerComponent: TableColumnDefaultComponent,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                width: this.remToPx(10),\n            },\n            {\n                colId: 'isMfaRequired',\n                field: 'isMfaRequired',\n                headerName: 'MFA Required',\n                headerComponent: TableColumnDefaultComponent,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                width: this.remToPx(10),\n                hide: true\n            },\n            {\n                colId: 'isMfaComplete',\n                field: 'isMfaComplete',\n                headerName: 'MFA Complete',\n                headerComponent: TableColumnDefaultComponent,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                width: this.remToPx(10),\n                hide: true\n            },\n            {\n                colId: 'lastActivity',\n                field: 'lastActivity',\n                headerName: 'Last Activity',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: createdAtHeaderComponentParams,\n                valueFormatter: this.createdAtFormatter,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                width: this.remToPx(10),\n            },\n            {\n                colId: 'createdAt',\n                field: 'createdAt',\n                headerName: 'Created At',\n                headerComponent: TableColumnDefaultComponent,\n                headerComponentParams: createdAtHeaderComponentParams,\n                valueFormatter: this.createdAtFormatter,\n                resizable: true,\n                cellClass: 'nf-cell-vert-align tCol',\n                width: this.remToPx(10),\n                hide: true\n            },\n        ];\n    }\n\n    public openIdentityForm(itemId = '', basePath?) {\n        if (isEmpty(itemId)) {\n            itemId = 'create';\n        }\n        basePath = basePath ? basePath : this.basePath;\n        this.router?.navigateByUrl(`identities/${itemId}`);\n    }\n\n    getData(filters?: FilterObj[], sort?: any) {\n        if (sort.sortBy === 'name') {\n            sort.sortBy = 'id';\n        }\n        // we can customize filters or sorting here before moving on...\n        return super.getTableData('api-sessions', this.paging, filters, sort)\n            .then((results: any) => {\n                return this.processData(results);\n            });\n    }\n\n    private processData(results: any) {\n        if (!isEmpty(results?.data)) {\n            //pre-process data before rendering\n            results.data = this.addActionsPerRow(results);\n        }\n        return results;\n    }\n\n    private addActionsPerRow(results: any): any[] {\n        return results.data.map((row) => {\n            row.actionList = ['update', 'delete'];\n            return row;\n        });\n    }\n\n    public openUpdate(item?: any) {\n        this.modalType = 'api-session';\n        if (item) {\n            this.selectedConfig = item;\n            this.selectedConfig.badges = [];\n            unset(this.selectedConfig, '_links');\n        } else {\n            this.selectedConfig = new APISession();\n        }\n        this.sideModalOpen = true;\n    }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, Inject, OnInit} from '@angular/core';\nimport {DataTableFilterService} from \"../../features/data-table/data-table-filter.service\";\nimport {ApiSessionsPageService} from \"./api-sessions-page.service\";\nimport {TabNameService} from \"../../services/tab-name.service\";\nimport {ListPageComponent} from \"../../shared/list-page-component.class\";\nimport {ConsoleEventsService} from \"../../services/console-events.service\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {ConfirmComponent} from \"../../features/confirm/confirm.component\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../features/extendable/extensions-noop.service\";\n\n@Component({\n    selector: 'lib-api-sessions',\n    templateUrl: './api-sessions-page.component.html',\n    styleUrls: ['./api-sessions-page.component.scss'],\n    standalone: false\n})\nexport class APISessionsPageComponent extends ListPageComponent implements OnInit {\n    title = 'API Sessions'\n    tabs: { url: string, label: string }[] ;\n    isLoading: boolean;\n    formDataChanged = false;\n\n    constructor(\n        override svc: ApiSessionsPageService,\n        filterService: DataTableFilterService,\n        private tabNames: TabNameService,\n        consoleEvents: ConsoleEventsService,\n        dialogForm: MatDialog,\n        @Inject(SHAREDZ_EXTENSION) private extService: ExtensionService,\n    ) {\n        super(filterService, svc, consoleEvents, dialogForm, extService);\n    }\n\n    override ngOnInit() {\n        this.tabs = this.tabNames.getTabs('sessions');\n        this.svc.refreshData = this.refreshData;\n        super.ngOnInit();\n    }\n\n    headerActionClicked(action: string) {\n        switch (action) {\n            case 'add':\n                this.svc.openEditForm();\n                break;\n            case 'edit':\n                this.svc.openEditForm();\n                break;\n            case 'delete':\n                const selectedItems = this.rowData.filter((row) => {\n                    return row.selected;\n                });\n                const label = selectedItems.length > 1 ? 'api session' : 'api sessions';\n                this.openBulkDelete(selectedItems, label);\n                break;\n            default:\n        }\n    }\n\n    tableAction(event: any) {\n        this.trackMenuAction(event?.action, event?.item);\n        switch(event?.action) {\n            case 'toggleAll':\n            case 'toggleItem':\n                this.itemToggled(event.item)\n                break;\n            case 'update':\n                this.svc.openEditForm(event.item?.id);\n                break;\n            case 'create':\n                this.svc.openEditForm();\n                break;\n            case 'delete':\n                this.deleteItem(event.item)\n                break;\n            case 'download-all':\n                this.downloadAllItems();\n                break;\n            case 'download-selected':\n                this.svc.downloadItems(this.selectedItems);\n                break;\n            default:\n                break;\n        }\n    }\n\n    trackMenuAction(action: string, item: any) {\n        this.extService?.consoleActionTriggered?.emit({\n            action,\n            page: 'api-session',\n            item,\n            type:'menu-action'\n        });\n    }\n    override openBulkDelete(selectedItems, label) {\n        const updatedItems = selectedItems.map((item) => {\n            return {\n                name: item.service?.name + ': ' + item.id,\n                id: item.id\n            }\n        });\n        super.openBulkDelete(updatedItems, label);\n    }\n\n    deleteItem(item: any) {\n        this.openBulkDelete([item], 'session');\n    }\n\n    closeModal(event: any) {\n        this.svc.sideModalOpen = false;\n        if(event?.refresh) {\n            this.refreshData();\n        }\n    }\n\n    dataChanged(event) {\n        this.formDataChanged = event;\n    }\n}\n","<div class=\"ziti-page-container ziti-api-sessions-container\">\n  <lib-list-page-header [title]=\"title\"\n    [tabs]=\"tabs\"\n    [hideAction]=\"true\"\n    [blockCreate]=\"headerBlockCreate\"\n    [blockDelete]=\"headerBlockDelete\"\n  (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n\n  <lib-data-table [tableId]=\"'api-sessions'\"\n    [noItemsReadonly]=\"headerBlockCreate\"\n    [accessDenied]=\"headerBlockRead\"\n    [rowData]=\"rowData\"\n    [isLoading]=\"isLoading\"\n    [columnDefinitions]=\"columnDefs\"\n    (actionRequested)=\"tableAction($event)\"\n    [startCount]=\"startCount\"\n    [endCount]=\"endCount\"\n    [totalCount]=\"totalCount\"\n    [emptyMsg]=\"'No API Sessions defined'\"\n    [filterApplied]=\"filterApplied\"\n    [filterColumn]=\"'id'\"\n    [filterName]=\"'ID'\"\n    [menuItems]=\"svc.menuItems\"\n    (gridReady)=\"gridReady($event)\"\n    >\n  </lib-data-table>\n</div>\n@if (isLoading) {\n  <lib-loading-indicator [isLoading]=\"isLoading\"></lib-loading-indicator>\n}\n","import {Injectable, Inject, InjectionToken} from \"@angular/core\";\nimport {isEmpty, unset, keys} from 'lodash';\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../services/ziti-data.service\";\nimport {GrowlerService} from \"../../messaging/growler.service\";\nimport {GrowlerModel} from \"../../messaging/growler.model\";\nimport {SETTINGS_SERVICE, SettingsService} from \"../../../services/settings.service\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../extendable/extensions-noop.service\";\n\nimport {EdgeRouter} from \"../../../models/edge-router\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class APISessionFormService {\n\n    associatedIdentities: any = [];\n    associatedIdentityNames: any = [];\n    associatedServices: any = [];\n    associatedServiceNames: any = [];\n\n    constructor(\n        @Inject(SETTINGS_SERVICE) public settingsService: SettingsService,\n        @Inject(ZITI_DATA_SERVICE) private zitiService: ZitiDataService,\n        private growlerService: GrowlerService,\n        @Inject(SHAREDZ_EXTENSION)private extService: ExtensionService\n    ) {}\n \n    save(formData): Promise<any> {\n        const isUpdate = !isEmpty(formData.id);\n        const data: any = this.getEdgeRouterDataModel(formData, isUpdate);\n        const svc = isUpdate ? this.zitiService.patch.bind(this.zitiService) : this.zitiService.post.bind(this.zitiService);\n        return svc('transit-routers', data, formData.id).then(async (result: any) => {\n            const id = result?.data?.id || formData.id;\n            let router = await this.zitiService.getSubdata('transit-routers', id, '').then((routerData) => {\n                return routerData.data;\n            });\n            return this.extService.formDataSaved(router).then((formSavedResult: any) => {\n                const returnVal = {\n                    data: router,\n                    close: this.extService.closeAfterSave\n                };\n                const growlerData = new GrowlerModel(\n                    'success',\n                    'Success',\n                    `Transit Router ${isUpdate ? 'Updated' : 'Created'}`,\n                    `Successfully ${isUpdate ? 'updated' : 'created'} Transit Router: ${formData.name}`,\n                );\n                this.growlerService.show(growlerData);\n                return returnVal;\n            }).catch((result) => {\n                return false;\n            });\n        }).catch((resp) => {\n            const errorMessage = this.zitiService.getErrorMessage(resp);\n            const growlerData = new GrowlerModel(\n                'error',\n                'Error',\n                `Error ${isUpdate ? 'Updating' : 'Creating'} Transit Router`,\n                errorMessage,\n            );\n            this.growlerService.show(growlerData);\n            throw resp;\n        })\n    }\n\n    getEdgeRouterDataModel(formData, isUpdate) {\n        const saveModel = new EdgeRouter();\n        const modelProperties = keys(saveModel);\n        modelProperties.forEach((prop) => {\n            switch(prop) {\n                default:\n                    saveModel[prop] = formData[prop];\n            }\n        });\n        return saveModel;\n    }\n\n    getAuthPolicies() {\n        const paging = {\n            filter: \"\",\n            noSearch: true,\n            order: \"asc\",\n            page: 1,\n            searchOn: \"name\",\n            sort: \"name\",\n            total: 100\n        }\n        return this.zitiService.get('auth-policies', paging, []).then((result: any) => {\n            return [{id: 'default', name: 'Default'}, ...result.data];\n        });\n    }\n\n    copyToClipboard(val) {\n        navigator.clipboard.writeText(val);\n        const growlerData = new GrowlerModel(\n            'success',\n            'Success',\n            `Text Copied`,\n            `API call URL copied to clipboard`,\n        );\n        this.growlerService.show(growlerData);\n    }\n\n    getAssociatedServices(id) {\n        this.zitiService.getSubdata('transit-routers', id, 'services',this.zitiService.DEFAULT_PAGING).then((result: any) => {\n            this.associatedServices = result.data;\n            this.associatedServiceNames = this.associatedServices.map((svc) => {\n                return svc.name;\n            });\n        });\n    }\n\n    getAssociatedIdentities(id) {\n        this.zitiService.getSubdata('transit-routers', id, 'identities',this.zitiService.DEFAULT_PAGING).then((result: any) => {\n            this.associatedIdentities = result.data;\n            this.associatedIdentityNames = this.associatedIdentities.map((policy) => {\n                return policy.name;\n            });\n        });\n    }\n\n    refreshRouter(id) {\n        const url: any = `/transit-routers/${id}`\n        return this.zitiService.call(url);\n    }\n}\n","import {\n  Component,\n  EventEmitter,\n  Input,\n  OnInit,\n  OnDestroy,\n  Output,\n  OnChanges,\n  SimpleChanges,\n  AfterViewInit,\n  Inject\n} from '@angular/core';\nimport {Subscription} from 'rxjs';\nimport {ProjectableForm} from \"../projectable-form.class\";\n\nimport {isEmpty, delay, cloneDeep, isEqual, set, unset} from 'lodash';\nimport moment from \"moment\";\n\nimport {SETTINGS_SERVICE, SettingsService} from \"../../../services/settings.service\";\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../../services/ziti-data.service\";\nimport {GrowlerService} from \"../../messaging/growler.service\";\nimport {APISessionFormService} from './api-session-form.service';\nimport {MatDialogRef} from \"@angular/material/dialog\";\nimport {ExtensionService, SHAREDZ_EXTENSION} from \"../../extendable/extensions-noop.service\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {EdgeRouter} from \"../../../models/edge-router\";\nimport {Location} from \"@angular/common\";\nimport {APISession} from \"../../../models/api-session\";\n\n@Component({\n    selector: 'lib-sessions-form',\n    templateUrl: './api-session-form.component.html',\n    styleUrls: ['./api-session-form.component.scss'],\n    providers: [\n        {\n            provide: MatDialogRef,\n            useValue: {}\n        }\n    ],\n    standalone: false\n})\nexport class APISessionFormComponent extends ProjectableForm implements OnInit, OnChanges, OnDestroy, AfterViewInit {\n  @Input() edgeRouterRoleAttributes: any[] = [];\n  @Output() close: EventEmitter<any> = new EventEmitter<any>();\n  @Input() headerToggle = false;\n\n  override entityType = 'api-sessions';\n  override entityClass = APISession;\n\n  moment = moment;\n\n  associatedIdentity: any = {};\n  formView = 'simple';\n  isEditing = false;\n  servicesLoading = false;\n  identityLoading = false;\n  authPolicies: any = [\n    {id: 'default', name: 'Default'}\n  ];\n\n  associatedEdgeRouters = [];\n  associatedServicePolicies = [];\n\n  settings: any = {};\n\n  constructor(\n      @Inject(SETTINGS_SERVICE) protected override settingsService: SettingsService,\n      public svc: APISessionFormService,\n      @Inject(ZITI_DATA_SERVICE) override zitiService: ZitiDataService,\n      growlerService: GrowlerService,\n      @Inject(SHAREDZ_EXTENSION) extService: ExtensionService,\n      protected override router: Router,\n      protected override route: ActivatedRoute,\n      location: Location\n  ) {\n    super(growlerService, extService, zitiService, router, route, location, settingsService);\n  }\n\n  override ngOnInit(): void {\n    super.ngOnInit();\n    this.subscription.add(\n      this.settingsService.settingsChange.subscribe((results:any) => {\n        this.settings = results;\n      })\n    );\n    this.subscription.add(\n      this.extService.formDataChanged.subscribe((data) => {\n        if (data.isEmpty) {\n          return;\n        }\n        this.formData = data || {};\n      })\n    );\n  }\n\n  identityNameLinkClicked(event) {\n    this.router.navigateByUrl('/identities/' + this.formData?.identity?.id);\n    event.preventDefault();\n  }\n\n  ngOnDestroy() {\n    this.extService?.closed?.emit({});\n    this.subscription.unsubscribe();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    this.isEditing = !isEmpty(this.formData.id);\n  }\n\n  get hasEnrolmentToken() {\n    return !isEmpty(this.formData.enrollmentJwt) || !isEmpty(this.formData.enrollmentToken);\n  }\n\n  headerActionRequested(action) {\n    switch(action.name) {\n      case 'save':\n        this.save();\n        break;\n      case 'close':\n        this.closeForm();\n        break;\n      case 'toggle-view':\n        this.formView = action.data;\n        break;\n    }\n  }\n\n  async save(event?) {}\n\n  get apiCallURL() {\n    return this.settings.selectedEdgeController + '/edge/management/v1/sessions' + (this.formData.id ? `/${this.formData.id}` : '');\n  }\n\n  get apiData() {\n    const data: any = {\n          name: this.formData?.name || '',\n          appData: this.formData?.appData || '',\n          roleAttributes: this.formData.roleAttributes || '',\n          isTunnelerEnabled: this.formData.isTunnelerEnabled,\n          noTraversal: this.formData.noTraversal,\n          cost: this.formData.cost || '0',\n          tags: this.formData.tags || ''\n    }\n    if (!this.isEditing) {\n      data.enrollment = this.formData.enrollment || {ott: true};\n    }\n    return data;\n  }\n\n  _apiData = {};\n  set apiData(data) {\n    this._apiData = data;\n  }\n\n  clear(): void {\n  }\n}\n","<div class=\"projectable-form-wrapper api-session-form-wrapper\"\n  (keyup.enter)=\"save($event)\"\n  (keyup.escape)=\"closeModal(false)\"\n  >\n  <lib-form-header\n    [data]=\"formData\"\n    [title]=\"'API Session Details'\"\n    [moreActions]=\"moreActions\"\n    (actionRequested)=\"headerActionRequested($event)\"\n    [(formView)]=\"formView\"\n    [showHeaderButton]=\"false\"\n    [strictReadonlyUi]=\"useStrictReadonlyForm\"\n  ></lib-form-header>\n  <div class=\"edge-router-form-container projectable-form-container\">\n    @if (formView === 'simple') {\n      <div class=\"projectable-form-main-column form-group-row\">\n        <div class=\"form-group-column\">\n          <lib-form-field-container [showHeader]=\"false\">\n            <div class=\"form-field-label-container\">\n              <div class=\"form-field-title-container\">\n                <span class=\"form-field-title\">ID</span>\n              </div>\n              <div class=\"config-container\">\n                <span>{{formData.id}}</span>\n              </div>\n            </div>\n            <div class=\"form-field-label-container\">\n              <div class=\"form-field-title-container\">\n                <span class=\"form-field-title\">Identity Name</span>\n              </div>\n              <a class=\"form-field-link\" [href]=\"'./services/' + formData.identity.id\" (click)=\"identityNameLinkClicked($event)\">\n                <div class=\"config-container config-container-clickable\">\n                  <span>{{formData.identity.name}}</span>\n                </div>\n              </a>\n            </div>\n            <div class=\"form-field-label-container\">\n              <div class=\"form-field-title-container\">\n                <span class=\"form-field-title\">IP Address</span>\n              </div>\n              <div class=\"config-container\">\n                <span>{{formData.ipAddress}}</span>\n              </div>\n            </div>\n            <div class=\"form-field-label-container\">\n              <div class=\"form-field-title-container\">\n                <span class=\"form-field-title\">Created At</span>\n              </div>\n              <div class=\"config-container\">\n                <span>{{moment(formData.createdAt).format(\"M/D/YYYY h:mm A\")}}</span>\n              </div>\n            </div>\n            <div class=\"form-field-label-container\">\n              <div class=\"form-field-title-container\">\n                <span class=\"form-field-title\">Updated At</span>\n              </div>\n              <div class=\"config-container\">\n                <span>{{moment(formData.updatedAt).format(\"M/D/YYYY h:mm A\")}}</span>\n              </div>\n            </div>\n            <div class=\"form-field-label-container\">\n              <div class=\"form-field-title-container\">\n                <span class=\"form-field-title\">Last Activity</span>\n              </div>\n              <div class=\"config-container\">\n                <span>{{moment(formData.lastActivity).format(\"M/D/YYYY h:mm A\")}}</span>\n              </div>\n            </div>\n          </lib-form-field-container>\n          <ng-content select=\"[slot=column-1-slot-1]\"></ng-content>\n        </div>\n      </div>\n    }\n    @if (formView === 'raw') {\n      <div class=\"form-group-column\">\n        @if (formData) {\n          <lib-json-view [(data)]=\"formData\" [readOnly]=\"useStrictReadonlyForm\"></lib-json-view>\n        }\n      </div>\n    }\n  </div>\n</div>\n@if (isLoading) {\n  <lib-loading-indicator [isLoading]=\"isLoading\"></lib-loading-indicator>\n}\n","import {Component, Inject, OnInit} from '@angular/core';\nimport {OAuthService} from \"angular-oauth2-oidc\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {isEmpty} from \"lodash\";\nimport {GrowlerModel} from \"../../features/messaging/growler.model\";\nimport {GrowlerService} from \"../../features/messaging/growler.service\";\nimport {LoginServiceClass, ZAC_LOGIN_SERVICE} from \"../../services/login-service.class\";\nimport {SettingsServiceClass} from \"../../services/settings-service.class\";\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../services/ziti-data.service\";\nimport {SETTINGS_SERVICE} from \"../../services/settings.service\";\n\n@Component({\n    selector: 'lib-callback',\n    template: '<lib-loading-indicator [isLoading]=\"true\"></lib-loading-indicator>',\n    standalone: false\n})\nexport class CallbackComponent implements OnInit {\n    constructor(\n        private oauthService: OAuthService,\n        @Inject(ZAC_LOGIN_SERVICE) private loginService: LoginServiceClass,\n        private growlerService: GrowlerService,\n        private router: Router,\n        private route: ActivatedRoute,\n        @Inject(ZITI_DATA_SERVICE) private zitiService: ZitiDataService,\n        @Inject(SETTINGS_SERVICE) private settingsService: SettingsServiceClass,\n\n    ) {\n\n    }\n\n    ngOnInit() {\n        try {\n            const configString = localStorage.getItem('oauth_callback_config');\n            const tokenType = localStorage.getItem('oauth_callback_target_token');\n            const oauthConfig = JSON.parse(configString);\n            const redirectRoute = this.route.snapshot.queryParamMap.get('redirectRoute');\n            if (!isEmpty(oauthConfig)) {\n                this.oauthService.configure(oauthConfig);\n                this.oauthService.loadDiscoveryDocument().then((loadResult) => {\n                    this.oauthService.tryLogin().then((result) => {\n                        if (result) {\n                            // Handle post-login\n                            let token;\n                            if (tokenType === 'ID') {\n                                token = this.oauthService.getIdToken();\n                            } else {\n                                token = this.oauthService.getAccessToken();\n                            }\n                            const prefix = '/edge/client/v1';\n                            // Use the controller pinned when the flow was initiated, not the currently\n                            // selected one (which may have changed across the IdP redirect).\n                            const url = localStorage.getItem('oauth_callback_controller') || this.settingsService.settings.selectedEdgeController;\n                            localStorage.removeItem('oauth_callback_controller');\n                            this.settingsService.settings.selectedEdgeController = url;\n                            let doNav = true;\n                            let isTest = false;\n                            if (!isEmpty(redirectRoute)) {\n                                \n                                doNav = false;\n                                isTest = true;\n                            }\n                            const claimsObj = this.loginService.decodeJwt(token);\n                            const claimsStr = JSON.stringify(claimsObj, null, 2);\n                            // a fresh SSO arrival has no session, so OIDC capability detection\n                            // hasn't run yet - populate it before the login service branches\n                            this.settingsService.initApiVersions(url).catch(() => null).then(() => {\n                                return this.loginService.login(prefix, url, undefined, undefined, doNav, 'ext-jwt', token, isTest);\n                            }).then((result) => {\n                                if (!isEmpty(redirectRoute)) {\n                                    this.router.navigate([redirectRoute], {\n                                        queryParams: {\n                                            oidcAuthResult: 'success',\n                                            oidcAuthTokenClaims: claimsStr\n                                        }\n                                    });\n                                }\n                            }).catch((error) => {\n                                if (error?.totpRequired) {\n                                    // login service holds the pending MFA state; the login page\n                                    // resumes with the TOTP prompt\n                                    this.router.navigate(['/login']);\n                                    return;\n                                }\n                                let errorMessage = this.zitiService.getErrorMessage(error);\n                                if (error.statusText) {\n                                    errorMessage = error.statusText + ': ' + errorMessage;\n                                }\n                                if (error.status) {\n                                    errorMessage = error.status + ' ' + errorMessage;\n                                }\n                                errorMessage = 'Failed to get ziti session ID from controller using OIDC token: ' + errorMessage;\n                                const growlerData = new GrowlerModel(\n                                    'error',\n                                    'Error',\n                                    `Login Error`,\n                                    'Unable to initialize OAuth login. ' + errorMessage,\n                                );\n                                this.growlerService.show(growlerData);\n                                if (!isEmpty(redirectRoute)) {\n                                    this.router.navigate([redirectRoute], {\n                                        queryParams: {\n                                            oidcAuthResult: 'failed',\n                                            oidcAuthErrorMessageDetail: errorMessage,\n                                            oidcAuthErrorMessageSource: 'Ziti Controller Error',\n                                            oidcAuthTokenClaims: claimsStr\n                                        }\n                                    });\n                                } else {\n                                    this.router.navigate(['/login']);\n                                }\n                            });\n                        } else {\n                            const growlerData = new GrowlerModel(\n                                'error',\n                                'Error',\n                                `Login Error`,\n                                'Unable to initialize OAuth login',\n                            );\n                            this.growlerService.show(growlerData);\n                            this.router.navigate(['/login'], {\n                                queryParams: {\n                                    oidcAuthResult: 'failed',\n                                    oidcAuthErrorMessageDetail: 'Unable to initialize OAuth login. Empty response of OAuth service.',\n                                    oidcAuthErrorMessageSource: 'OAuth Provider Error',\n                                }\n                            });\n                        }\n                    }).catch((error) => {\n                        const errorMessage = `${error.params ? error.params.error + ': ' + error.params.error_description : ''}`;\n                        const growlerData = new GrowlerModel(\n                            'error',\n                            'Error',\n                            `Login Error`,\n                            'Unable to initialize OAuth login. ' + errorMessage,\n                        );\n                        this.growlerService.show(growlerData);\n                        if (!isEmpty(redirectRoute)) {\n                            this.router.navigate([redirectRoute], {\n                                queryParams: {\n                                    oidcAuthResult: 'failed',\n                                    oidcAuthErrorMessageDetail: errorMessage,\n                                    oidcAuthErrorMessageSource: 'OAuth Provider Error',\n                                }\n                            });\n                        }\n                    });\n                }).catch((error) => {\n                    const errorMessage = `${error.params ? error.params.error + ': ' + error.params.error_description : ''}`;\n                    const growlerData = new GrowlerModel(\n                        'error',\n                        'Error',\n                        `Login Error`,\n                        'Unable to initialize OAuth login. ' + errorMessage,\n                    );\n                    this.growlerService.show(growlerData);\n                    if (!isEmpty(redirectRoute)) {\n                        this.router.navigate([redirectRoute], {\n                            queryParams: {\n                                oidcAuthResult: 'failed',\n                                oidcAuthErrorMessageDetail: errorMessage,\n                                oidcAuthErrorMessageSource: 'OAuth Provider Error',\n                            }\n                        });\n                    }\n                });\n            }\n        } catch (e) {\n            this.router.navigate(['/login']);\n        }\n    }\n}\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\n\nexport class ProgressMeterStep {\n  index = 0;\n  label: string = '';\n  state: '' | 'TO_DO' | 'IN_PROGRESS' | 'COMPLETE' | 'ERROR' | 'WARNING' = '';\n};\n\n@Component({\n    selector: 'lib-progress-meter',\n    templateUrl: './progress-meter.component.html',\n    styleUrls: ['./progress-meter.component.scss'],\n    standalone: false\n})\nexport class ProgressMeterComponent {\n\n  errors: any = {};\n\n  @Input() title = '';\n  @Input() steps: ProgressMeterStep[] = [];\n  @Input() currentStepIndex = 0;\n  @Output() currentStepChange = new EventEmitter<any>;\n\n  constructor() {}\n\n  getProgressBarStyle(index) {\n    const step = this.steps[index];\n    const nextStep = this.steps[index + 1];\n    if (step?.state === 'COMPLETE' && nextStep?.state === 'COMPLETE') {\n      return true;\n    }\n    return false;\n  }\n\n}\n","<div class=\"progress-meter-wrapper\">\n  <div class=\"progress-meter-container\">\n    @for (step of steps; track step; let index = $index) {\n      <div\n        [ngClass]=\"{ 'last-step': index === steps.length - 1 }\"\n        class=\"progress-meter-step-container\"\n        >\n        <div class=\"progress-step-item\" [ngClass]=\"{'in-progress': currentStepIndex === step.index}\">\n          <div class=\"progress-step-ball\" [ngClass]=\"{'progress-step-complete': step.state === 'COMPLETE', 'step-in-progress': step.state === 'IN_PROGRESS'}\">\n          </div>\n          @if (step.state === 'IN_PROGRESS') {\n            <div class=\"spinner\"></div>\n          }\n          <div class=\"progress-step-label\" [ngClass]=\"{'step-in-progress': step.state === 'IN_PROGRESS'}\">{{ step.label }}</div>\n        </div>\n        @if (index !== steps.length - 1) {\n          <div>\n            <div class=\"progress-step-bar\"\n             [ngClass]=\"{\n              'progress-step-complete': getProgressBarStyle(index),\n              'step-in-progress': currentStepIndex === index + 1\n            }\"\n              >\n            </div>\n          </div>\n        }\n      </div>\n    }\n  </div>\n</div>\n","import {Component, EventEmitter, Inject, Input, Output, ViewChild} from '@angular/core';\nimport {delay, defer, isEmpty} from \"lodash\";\nimport {cloneDeep} from 'lodash-es';\n\nexport class ProgressWizardStep {\n  index = 0;\n  label: string = '';\n};\n\n@Component({\n    selector: 'lib-progress-wizard',\n    templateUrl: './progress-wizard.component.html',\n    styleUrls: ['./progress-wizard.component.scss'],\n    standalone: false\n})\nexport class ProgressWizardComponent {\n\n  errors: any = {};\n\n  @Input() title = '';\n  @Input() steps: ProgressWizardStep[] = [];\n  @Input() backButtonLabel = 'Back';\n  @Input() nextButtonLabel = 'Next';\n  @Input() nextButtonDisabled = false;\n  @Input() titleImageSrc = '';\n  @Input() showCloseButton = true;\n  @Input() currentStepIndex = 0;\n  @Output() currentStepIndexChange = new EventEmitter<any>;\n  @Output() close = new EventEmitter<any>;\n  @Output() done = new EventEmitter<any>;\n  @Output() stepChanged = new EventEmitter;\n\n  constructor() {}\n\n  cancel() {\n    this.close.emit();\n  }\n\n  confirm() {\n    this.close.emit();\n  }\n\n  nextStep() {\n    if (this.currentStepIndex >= (this.steps.length - 1)) {\n      this.done.emit();\n      return;\n    }\n    this.currentStepIndex++;\n    this.currentStepIndexChange.emit(this.currentStepIndex);\n    this.stepChanged.emit(this.steps[this.currentStepIndex]);\n  }\n\n  goToStep(stepNum) {\n    this.currentStepIndex = stepNum.index;\n    this.currentStepIndexChange.emit(this.currentStepIndex);\n    this.stepChanged.emit(this.steps[this.currentStepIndex]);\n  }\n\n  prevStep() {\n    this.currentStepIndex--;\n    this.currentStepIndexChange.emit(this.currentStepIndex);\n    this.stepChanged.emit(this.steps[this.currentStepIndex]);\n  }\n\n  get progressTrackHeight() {\n    const heightfactor = 8.333;\n    const trackNumber = ((this.steps ? this.steps.length : 1) - 1);\n    const trackHeight = heightfactor * trackNumber;\n    return trackHeight + 'rem';\n  }\n}\n","<div class=\"progress-wizard-wrapper\">\n  <div class=\"progress-wizard-container\">\n    @if (showCloseButton) {\n      <div (click)=\"cancel()\" class=\"close cancel\"></div>\n    }\n    <div class=\"side-progress-bar\">\n      <div class=\"progress-steps\">\n        <div class=\"progress-track\" style=\"height: {{progressTrackHeight}}\"></div>\n        @for (step of steps; track step) {\n          <div class=\"progress-step\" [ngClass]=\"{'step-active': step.index === currentStepIndex}\" (click)=\"goToStep(step)\">\n            <div class=\"progress-step-number\">{{step.index + 1}}</div>\n            <div class=\"progress-step-number-background\"></div>\n            <div class=\"progress-step-label\">{{step.label}}</div>\n          </div>\n        }\n      </div>\n    </div>\n    <div>\n      <div class=\"center-content-container\">\n        <div class=\"center-content\">\n          <div class=\"header-title-container\" style=\"display: flex; flex-direction: row; gap: var(--gapSmall);align-items: center;\">\n            <div class=\"header-title-image\" style=\"background-image: url({{titleImageSrc}});\"></div>\n            <div class=\"header-title-container\">\n              <div class=\"header-title\">{{title}}</div>\n            </div>\n          </div>\n          <form name=\"form\" class=\"step-content-form\">\n            <div class=\"step-content-wrapper\">\n              <ng-content></ng-content>\n            </div>\n            <div class=\"buttons-container\">\n              @if (currentStepIndex === 0) {\n                <div>\n                </div>\n              }\n              @if (currentStepIndex > 0) {\n                <button name=\"action\" type=\"submit\" class=\"btn-primary\" (click)=\"prevStep()\">\n                  {{backButtonLabel}}\n                </button>\n              }\n              <button name=\"action\" type=\"submit\" class=\"btn-primary\" (click)=\"nextStep()\" [disabled]=\"nextButtonDisabled\">\n                {{nextButtonLabel}}\n              </button>\n            </div>\n          </form>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n    selector: 'lib-settings',\n    templateUrl: './settings.component.html',\n    styleUrls: ['./settings.component.scss'],\n    standalone: false\n})\nexport class SettingsComponent implements OnInit {\n\n  pageTitle = 'Settings';\n  isDark = false;\n  hideTags = false;\n  transitions = true;\n  isFilterAfterSave = false;\n  primaryColor: any;\n  secondaryColor: any;\n\n  constructor() {}\n\n  ngOnInit(): void {\n    this.isDark = localStorage.getItem('mode') === 'dark';\n    this.hideTags = localStorage.getItem('hideTags') === 'yes';\n    this.isFilterAfterSave = localStorage.getItem('filterAfterSave') === 'on';\n    const transitions = localStorage.getItem('Transitions');\n    this.transitions = transitions !== 'off';\n    this.updateTransitions();\n  }\n\n  swap() {\n    const mode = this.isDark ? 'dark' : 'light';\n    localStorage.setItem('mode', mode);\n    window.location.reload();\n  }\n\n  hide() {\n    const mode = this.hideTags ? 'yes' : 'no';\n    localStorage.setItem('hideTags', mode);\n  }\n\n  filterAfter() {\n    const mode = this.isFilterAfterSave ? 'on' : 'off';\n    localStorage.setItem('filterAfterSave', mode);\n  }\n\n  transitionsChange() {\n    const mode = this.transitions ? 'on' : 'off';\n    localStorage.setItem('Transitions', mode);\n    this.updateTransitions();\n  }\n\n  updateTransitions() {\n    if (!this.transitions) {\n      document.body.style.setProperty('--transition', '0s');\n    } else {\n      document.body.style.setProperty('--transition', '0.5s');\n    }\n  }\n\n  onPrimaryColorChange(color: any) {\n    localStorage.setItem('primaryColor', color);\n    document.getElementsByTagName('html')[0].style.setProperty('--primary', color);\n  }\n\n  onSecondaryColorChange(color: any) {\n    localStorage.setItem('secondaryColor', color);\n    document.getElementsByTagName('html')[0].style.setProperty('--secondary', color);\n  }\n}\n","<div class=\"projectable-form-wrapper\">\n    <div class=\"header\">\n        <div class=\"title\">Manage <span>{{pageTitle}}</span></div>\n        <div class=\"line\"></div>\n        <div class=\"tabs\">\n          <div class=\"tab selected\">Manage <span>{{pageTitle}}</span></div>\n          <div class=\"tab\" routerLink=\"/profile\">Manage Profile</div>\n        </div>\n        <div class=\"constrained\">\n            <div class=\"grid split\">\n                <div>\n                    <label>Filter after Save</label>\n                    <div class=\"toggle\" [class.on]=\"isFilterAfterSave\" (click)=\"isFilterAfterSave = !isFilterAfterSave; filterAfter()\">\n                        <div class=\"switch\"></div>\n                        <div class=\"label\"></div>\n                    </div>\n                </div>\n                <div>\n                    <label>Dark mode</label>\n                    <div class=\"toggle\" [class.on]=\"isDark\" (click)=\"isDark = !isDark; swap()\">\n                        <div class=\"switch\"></div>\n                        <div class=\"label\"></div>\n                    </div>\n                </div>\n                <div>\n                    <label>Hide Tags</label>\n                    <div class=\"toggle\" [class.on]=\"hideTags\" (click)=\"hideTags = !hideTags; hide()\">\n                        <div class=\"switch\"></div>\n                        <div class=\"label\"></div>\n                    </div>\n                </div>\n                <div>\n                    <label>Transitions</label>\n                    <div class=\"toggle\" [class.on]=\"transitions\" (click)=\"transitions = !transitions; transitionsChange()\">\n                        <div class=\"switch\"></div>\n                        <div class=\"label\"></div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n","import {Component, Inject, OnDestroy} from '@angular/core';\nimport {ZITI_DATA_SERVICE, ZitiDataService} from \"../../services/ziti-data.service\";\nimport {SETTINGS_SERVICE} from '../../services/settings.service';\nimport {SettingsServiceClass} from '../../services/settings-service.class';\nimport {GrowlerModel} from \"../../features/messaging/growler.model\";\nimport {GrowlerService} from \"../../features/messaging/growler.service\";\nimport {Subscription} from 'rxjs';\nimport {isEmpty} from 'lodash';\n\n@Component({\n    selector: 'lib-profile',\n    templateUrl: './profile.component.html',\n    styleUrls: ['./profile.component.scss'],\n    standalone: false\n})\nexport class ProfileComponent implements OnDestroy {\n  pageTitle = 'Profile';\n  currentPassword = '';\n  newPassword = '';\n  confirmPassword = '';\n  passwordChangeDisabled = false;\n  passwordChangeMessage = '';\n  private settingsSubscription?: Subscription;\n\n  constructor(\n      @Inject(ZITI_DATA_SERVICE) private zitiService: ZitiDataService,\n      @Inject(SETTINGS_SERVICE) private settingsService: SettingsServiceClass,\n      private growlerService: GrowlerService,\n  ) {\n      this.updatePasswordChangeState();\n      this.settingsSubscription = this.settingsService.settingsChange.subscribe(() => {\n          this.updatePasswordChangeState();\n      });\n  }\n\n  ngOnDestroy(): void {\n      this.settingsSubscription?.unsubscribe();\n  }\n\n  private updatePasswordChangeState(): void {\n      const authMode = this.settingsService?.settings?.session?.authMode;\n      this.passwordChangeDisabled = authMode === 'oidc';\n      this.passwordChangeMessage = this.passwordChangeDisabled\n          ? 'Your password is managed by your identity provider and cannot be changed here.'\n          : '';\n  }\n\n  resetPassword() {\n    if (this.passwordChangeDisabled) {\n      const growlerData = new GrowlerModel(\n          'error',\n          'Error',\n          'Password Change Not Allowed',\n          'Your password is managed by your identity provider and cannot be changed here.',\n      );\n      this.growlerService.show(growlerData);\n      return;\n    }\n    if (!this.validate()) {\n      return;\n    }\n    this.zitiService.resetPassword(this.currentPassword, this.newPassword, this.confirmPassword).then(() => {\n      const growlerData = new GrowlerModel(\n          'success',\n          'Success',\n          `Password Reset`,\n          `Successfully reset user password`,\n      );\n      this.growlerService.show(growlerData);\n      this.currentPassword = '';\n      this.newPassword = '';\n      this.confirmPassword = '';\n    }).catch((error) => {\n      const message = this.zitiService.getErrorMessage(error);\n      const growlerData = new GrowlerModel(\n          'error',\n          'Error',\n          `Password Reset Failed`,\n          `Failed to reset password: ${message}`,\n      );\n      this.growlerService.show(growlerData);\n    })\n  }\n\n  validate() {\n    if (isEmpty(this.currentPassword) || isEmpty(this.newPassword) || isEmpty(this.confirmPassword)) {\n      const growlerData = new GrowlerModel(\n          'error',\n          'Error',\n          `Password Missing`,\n          `You have missing fields in your submission. Check your input and try again.`,\n      );\n      this.growlerService.show(growlerData);\n      return false;\n    }\n    if (this.newPassword !== this.confirmPassword) {\n      const growlerData = new GrowlerModel(\n          'error',\n          'Error',\n          `Password Mismatch`,\n          `The values entered for Password and Confirm password do not match.`,\n      );\n      this.growlerService.show(growlerData);\n      return false;\n    }\n    return true;\n  }\n}\n","<div class=\"projectable-form-wrapper\">\n    <div class=\"header\">\n        <div class=\"title\">Manage <span>{{pageTitle}}</span></div>\n        <div class=\"line\"></div>\n        <div class=\"tabs\">\n          <div class=\"tab\" routerLink=\"/settings\">Manage Settings</div>\n          <div class=\"tab selected\">Manage <span>{{pageTitle}}</span></div>\n        </div>\n        <div class=\"constrained\">\n            @if (passwordChangeDisabled) {\n                <div class=\"password-change-message\">{{passwordChangeMessage}}</div>\n            } @else {\n                <div class=\"grid split\">\n                    <div>\n                        <label>Current Password</label>\n                        <input [(ngModel)]=\"currentPassword\" type=\"password\" autocomplete=\"new-password\"/>\n                    </div>\n                    <div></div>\n                    <div>\n                        <label>New Password</label>\n                        <input [(ngModel)]=\"newPassword\" type=\"password\" autocomplete=\"new-password\"/>\n                    </div>\n                    <div>\n                        <label>Confirm Password</label>\n                        <input [(ngModel)]=\"confirmPassword\" type=\"password\" autocomplete=\"new-password\"/>\n                    </div>\n                    <div></div>\n                    <div>\n                        <div class=\"button\" (click)=\"resetPassword()\">Save</div>\n                    </div>\n                </div>\n            }\n        </div>\n    </div>\n</div>\n","import {Inject, Injectable} from '@angular/core';\nimport {ZITI_DATA_SERVICE, ZitiDataService} from '../../../services/ziti-data.service';\nimport { GrowlerService } from '../../../features/messaging/growler.service';\nimport { GrowlerModel } from '../../../features/messaging/growler.model';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class GeolocationService {\n  // Track original locations for change detection\n  private originalLocations = new Map<string, string>();\n\n  constructor(\n    @Inject(ZITI_DATA_SERVICE) private zitiDataService: ZitiDataService,\n    private growlerService: GrowlerService\n  ) {}\n\n  /**\n   * Update geolocation tag locally (in-memory only, not saved to backend)\n   */\n  updateGeolocationLocal(item: any, lat: number, lng: number): void {\n    const geolocationString = `${lat},${lng}`;\n\n    // Prepare the updated tags\n    const updatedTags = {\n      ...item.tags,\n      geolocation: geolocationString\n    };\n\n    // Update the item locally (no backend save)\n    item.tags = updatedTags;\n  }\n\n  /**\n   * Save geolocation changes to backend\n   */\n  async saveGeolocation(item: any, type: string, routerTypes?: Map<string, string>): Promise<void> {\n    if (!item || !item.id) {\n      throw new Error('Invalid item - missing id');\n    }\n\n    try {\n      // Prepare the update payload with just the tags\n      const updatePayload = {\n        tags: item.tags\n      };\n\n      // Call the appropriate backend service\n      if (type === 'routers') {\n        // Determine router type (edge-router or transit-router)\n        const routerType = routerTypes?.get(item.id) || item._routerType || 'edge-router';\n\n        if (routerType === 'transit-router') {\n          await this.zitiDataService.patch('transit-routers', updatePayload, item.id);\n        } else {\n          await this.zitiDataService.patch('edge-routers', updatePayload, item.id);\n        }\n      } else if (type === 'identity') {\n        await this.zitiDataService.patch('identities', updatePayload, item.id);\n      } else {\n        throw new Error(`Unknown entity type: ${type}`);\n      }\n\n      // Update the original location to the new saved value\n      if (item.tags?.geolocation) {\n        this.originalLocations.set(item.id, item.tags.geolocation);\n      }\n\n      const successGrowler = new GrowlerModel(\n        'success',\n        'Location Saved',\n        `Location for ${item.name} has been saved successfully`\n      );\n      this.growlerService.show(successGrowler);\n\n    } catch (error) {\n      const errorMessage = this.zitiDataService.getErrorMessage(error);\n      const errorGrowler = new GrowlerModel(\n        'error',\n        'Save Failed',\n        `Failed to save location: ${errorMessage}`\n      );\n      this.growlerService.show(errorGrowler);\n      throw error;\n    }\n  }\n\n  /**\n   * Remove geolocation tag from entity\n   */\n  async removeGeolocation(item: any, type: string, routerTypes?: Map<string, string>): Promise<void> {\n    if (!item || !item.id) {\n      throw new Error('Invalid item - missing id');\n    }\n\n    // Remove geolocation tag and add temporary tag to work around API bug\n    // (API has issues when removing the last tag from a resource)\n    if (item.tags) {\n      delete item.tags.geolocation;\n      item.tags.temp = 'empty';\n    } else {\n      item.tags = { temp: 'empty' };\n    }\n\n    // Remove from original locations tracking\n    this.originalLocations.delete(item.id);\n\n    // Save the changes to persist the removal\n    await this.saveGeolocation(item, type, routerTypes);\n  }\n\n  /**\n   * Check if an entity has unsaved location changes\n   */\n  hasUnsavedChanges(item: any): boolean {\n    if (!item || !item.id) return false;\n\n    const originalLocation = this.originalLocations.get(item.id);\n    const currentLocation = item.tags?.geolocation;\n\n    // No original location means it's a new geolocation\n    if (!originalLocation && currentLocation) {\n      return true;\n    }\n\n    // Compare original vs current\n    return originalLocation !== currentLocation;\n  }\n\n  /**\n   * Track original location for an entity\n   */\n  trackOriginalLocation(item: any): void {\n    if (item && item.id && item.tags?.geolocation) {\n      if (!this.originalLocations.has(item.id)) {\n        this.originalLocations.set(item.id, item.tags.geolocation);\n      }\n    }\n  }\n\n  /**\n   * Parse geolocation tag into lat/lng coordinates\n   */\n  parseGeolocation(geolocationTag: string): { lat: number; lng: number } | null {\n    if (!geolocationTag) return null;\n\n    const [latStr, lngStr] = geolocationTag.split(',');\n    const lat = parseFloat(latStr);\n    const lng = parseFloat(lngStr);\n\n    if (isNaN(lat) || isNaN(lng)) {\n      return null;\n    }\n\n    return { lat, lng };\n  }\n\n  /**\n   * Clear all tracked original locations\n   */\n  clearTrackedLocations(): void {\n    this.originalLocations.clear();\n  }\n}\n","import { Injectable } from '@angular/core';\n\nexport interface CircuitPathNode {\n  id: string;\n  name: string;\n  type: 'identity' | 'routers';\n  lat: number;\n  lng: number;\n}\n\nexport interface CircuitPath {\n  nodes: CircuitPathNode[];\n  coordinates: [number, number][];\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class CircuitCalculationService {\n  constructor() {}\n\n  /**\n   * Find the host identity ID for a circuit using various fallback strategies\n   */\n  findHostIdentityId(\n    circuit: any,\n    terminators: any[]\n  ): string | null {\n    // Handle empty strings explicitly - API returns empty strings instead of null/undefined\n    const hostIdFromTags = (circuit.tags?.hostId && circuit.tags.hostId.trim()) || null;\n    const terminatorIdFromCircuit = circuit.terminator?.id || circuit.terminatorId;\n    const serviceId = circuit.service?.id;\n\n    // First try to get hostId from circuit tags\n    let hostIdentityId = hostIdFromTags;\n\n    // If not in tags, try to find the specific terminator for this circuit\n    if (!hostIdentityId && terminatorIdFromCircuit) {\n      const terminator = terminators.find(t => t.id === terminatorIdFromCircuit);\n      if (terminator) {\n        // Handle empty strings - check for non-empty values explicitly\n        // Try: hostId, identity (string ID), identity.id (expanded object), identityId\n        hostIdentityId = (terminator.hostId && terminator.hostId.trim()) ||\n                         (terminator.identity && typeof terminator.identity === 'string' && terminator.identity.trim()) ||\n                         terminator.identity?.id ||\n                         terminator.identityId ||\n                         null;\n      }\n    }\n\n    // If still not found, try to find any terminator for this service (fallback)\n    if (!hostIdentityId && serviceId) {\n      const terminator = terminators.find(t =>\n        t.serviceId === serviceId ||\n        t.service === serviceId ||\n        t.service?.id === serviceId\n      );\n      if (terminator) {\n        // Handle empty strings - check for non-empty values explicitly\n        // Try: hostId, identity (string ID), identity.id (expanded object), identityId\n        hostIdentityId = (terminator.hostId && terminator.hostId.trim()) ||\n                         (terminator.identity && typeof terminator.identity === 'string' && terminator.identity.trim()) ||\n                         terminator.identity?.id ||\n                         terminator.identityId ||\n                         null;\n      }\n    }\n\n    return hostIdentityId || null;\n  }\n\n  /**\n   * Build a circuit path data structure (client identity → routers → hosting identity)\n   * Returns null if the path cannot be built (missing locations, etc.)\n   */\n  buildCircuitPath(\n    circuit: any,\n    identities: any[],\n    identityLocations: Map<string, { lat: number; lng: number; name: string }>,\n    routerLocations: Map<string, { lat: number; lng: number; name: string }>,\n    terminators: any[]\n  ): CircuitPath | null {\n    // Handle both old format (path array) and new format (path.nodes array)\n    const pathNodes = circuit.path?.nodes || circuit.path;\n\n    if (!pathNodes || pathNodes.length < 1) {\n      return null;\n    }\n\n    const nodes: CircuitPathNode[] = [];\n    const coordinates: [number, number][] = [];\n\n    // 1. Add client identity as starting point\n    const clientId = circuit.tags?.clientId ||\n                     circuit.clientId ||\n                     circuit.client?.id ||\n                     circuit.sourceId ||\n                     circuit.initiator?.id;\n\n    if (clientId) {\n      const clientIdentity = identities.find(id => id.id === clientId);\n      if (clientIdentity) {\n        const clientLoc = identityLocations.get(clientIdentity.id);\n        if (clientLoc) {\n          nodes.push({\n            id: clientIdentity.id,\n            name: clientIdentity.name || 'Client',\n            type: 'identity',\n            lat: clientLoc.lat,\n            lng: clientLoc.lng\n          });\n          coordinates.push([clientLoc.lat, clientLoc.lng]);\n        }\n      }\n    }\n\n    // 2. Add all routers in the circuit path\n    for (const node of pathNodes) {\n      const routerId = node.id || node.routerId || node;\n      const routerName = node.name || routerId;\n      const loc = routerLocations.get(routerId);\n\n      if (loc) {\n        nodes.push({\n          id: routerId,\n          name: routerName,\n          type: 'routers',\n          lat: loc.lat,\n          lng: loc.lng\n        });\n        coordinates.push([loc.lat, loc.lng]);\n      }\n    }\n\n    // 3. Add hosting identity as endpoint\n    const hostIdentityId = this.findHostIdentityId(circuit, terminators);\n\n    if (hostIdentityId) {\n      const hostIdentity = identities.find(id => id.id === hostIdentityId);\n      if (hostIdentity) {\n        const hostLoc = identityLocations.get(hostIdentity.id);\n        if (hostLoc) {\n          nodes.push({\n            id: hostIdentity.id,\n            name: hostIdentity.name || 'Host',\n            type: 'identity',\n            lat: hostLoc.lat,\n            lng: hostLoc.lng\n          });\n          coordinates.push([hostLoc.lat, hostLoc.lng]);\n        }\n      }\n    }\n\n    // Only return path if we have at least 2 nodes\n    if (nodes.length < 2) {\n      return null;\n    }\n\n    return { nodes, coordinates };\n  }\n\n  /**\n   * Check if all routers in a circuit path are in the visible set\n   */\n  areAllRoutersVisible(\n    circuit: any,\n    visibleRouterIds: Set<string>\n  ): boolean {\n    const pathNodes = circuit.path?.nodes || circuit.path;\n\n    if (!pathNodes || pathNodes.length < 1) {\n      return false;\n    }\n\n    return pathNodes.every((node: any) => {\n      const routerId = node.id || node.routerId || node;\n      return visibleRouterIds.has(routerId);\n    });\n  }\n\n  /**\n   * Check if at least one router in a circuit path is in the visible set\n   */\n  hasAnyVisibleRouter(\n    circuit: any,\n    visibleRouterIds: Set<string>\n  ): boolean {\n    const pathNodes = circuit.path?.nodes || circuit.path;\n\n    if (!pathNodes || pathNodes.length < 1) {\n      return false;\n    }\n\n    return pathNodes.some((node: any) => {\n      const routerId = node.id || node.routerId || node;\n      return visibleRouterIds.has(routerId);\n    });\n  }\n\n  /**\n   * Filter a circuit path to only include visible entities\n   * (all identities + only visible routers)\n   */\n  filterCircuitPathToVisible(\n    circuitPath: CircuitPath,\n    visibleRouterIds: Set<string>\n  ): CircuitPath {\n    const filteredNodes: CircuitPathNode[] = [];\n    const filteredCoordinates: [number, number][] = [];\n\n    circuitPath.nodes.forEach(node => {\n      // Include all identities or visible routers\n      if (node.type === 'identity' || visibleRouterIds.has(node.id)) {\n        filteredNodes.push(node);\n        filteredCoordinates.push([node.lat, node.lng]);\n      }\n    });\n\n    return {\n      nodes: filteredNodes,\n      coordinates: filteredCoordinates\n    };\n  }\n\n  /**\n   * Check if a circuit's service is in the visible set\n   */\n  isCircuitServiceVisible(\n    circuit: any,\n    visibleServiceIds: Set<string>,\n    hasServiceFilters: boolean\n  ): boolean {\n    const circuitServiceId = circuit.service?.id;\n\n    // If service filters are applied, check if circuit's service is visible\n    if (hasServiceFilters) {\n      if (!circuitServiceId || !visibleServiceIds.has(circuitServiceId)) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  /**\n   * Calculate the count of unique services that have active circuits\n   */\n  calculateServicesWithActiveCircuits(circuits: any[]): number {\n    const uniqueServiceIds = new Set<string>();\n    circuits.forEach(circuit => {\n      const serviceId = circuit.service?.id || circuit.serviceId;\n      if (serviceId) {\n        uniqueServiceIds.add(serviceId);\n      }\n    });\n    return uniqueServiceIds.size;\n  }\n}\n","import { Injectable } from '@angular/core';\n\nexport interface CircuitHop {\n  from: string;\n  fromType: string;\n  fromId: string;\n  fromHasLocation: boolean;\n  to: string;\n  toType: string;\n  toId: string;\n  toHasLocation: boolean;\n  isVisible: boolean;\n  latencyMs?: number; // Average latency for router-to-router hops (in ms), from link data\n}\n\nexport interface CircuitPathData {\n  pathNodes: any[];\n  pathCoordinates: [number, number][];\n  routerNames: string[];\n  entityIds: string[];\n  entityTypes: string[];\n  circuitHops: CircuitHop[]; // All logical hops with 'isVisible' flag\n  circuitRouters: any[];\n  clientId: string | null;\n  clientName: string;\n  hostId: string | null;\n  hostName: string;\n  hasCompleteGeolocation: boolean; // Whether all entities have geolocation data\n  missingLocations: string[]; // List of entity names missing geolocation\n  visibleSegmentToHopIndex: Map<number, number>; // Maps visual segment index to logical hop index\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class CircuitPathBuilderService {\n  /**\n   * Builds complete circuit path data structure with coordinates, hops, and router details\n   * @param circuit - The circuit object\n   * @param routerLocations - Map of router IDs to location data\n   * @param identityLocations - Map of identity IDs to location data\n   * @param routers - Array of all router objects\n   * @param identities - Array of all identity objects\n   * @param links - Array of all link objects (for latency data on router-to-router hops)\n   * @returns Complete circuit path data or null if path cannot be built\n   */\n  buildCircuitPathData(\n    circuit: any,\n    routerLocations: Map<string, any>,\n    identityLocations: Map<string, any>,\n    routers: any[],\n    identities: any[],\n    links: any[] = []\n  ): CircuitPathData | null {\n    // Extract path nodes (handle both string IDs and objects with id property)\n    const rawPathNodes = circuit.path?.nodes || circuit.path || [];\n    const pathNodes = rawPathNodes.map((node: any) => node.id || node);\n    const pathCoordinates: [number, number][] = [];\n    const routerNames: string[] = [];\n    const entityIds: string[] = [];\n    const entityTypes: string[] = [];\n    const missingLocations: string[] = [];\n\n    // Extract client and host information\n    const clientId = circuit.tags?.clientId || circuit.clientId || circuit.client?.id || circuit.sourceId || circuit.initiator?.id;\n    const hostId = circuit.tags?.hostId || circuit.host?.id;\n\n    // Find client and host names\n    const clientIdentity = identities.find(id => id.id === clientId);\n    const clientName = clientIdentity?.name || 'Unknown Client';\n\n    const hostIdentity = identities.find(id => id.id === hostId);\n    const hostName = hostIdentity?.name || 'Unknown Host';\n\n    // Get client location (continue even if not found)\n    const clientLocation = identityLocations.get(clientId);\n    if (!clientLocation) {\n      missingLocations.push(clientName);\n    } else {\n      // Add client identity as first node\n      pathCoordinates.push([clientLocation.lat, clientLocation.lng]);\n      entityIds.push(clientId);\n      entityTypes.push('identity');\n    }\n\n    // Add router nodes to path\n    for (const routerId of pathNodes) {\n      const router = routers.find(r => r.id === routerId);\n      const routerName = router?.name || routerId;\n      const routerLocation = routerLocations.get(routerId);\n      if (routerLocation) {\n        pathCoordinates.push([routerLocation.lat, routerLocation.lng]);\n        routerNames.push(routerLocation.name);\n        entityIds.push(routerId);\n        entityTypes.push('routers');\n      } else {\n        missingLocations.push(routerName);\n      }\n    }\n\n    // Get host location (continue even if not found)\n    const hostLocation = identityLocations.get(hostId);\n    if (!hostLocation) {\n      missingLocations.push(hostName);\n    } else {\n      // Add host identity as last node\n      pathCoordinates.push([hostLocation.lat, hostLocation.lng]);\n      entityIds.push(hostId);\n      entityTypes.push('identity');\n    }\n\n    // Build circuit hops for display (from/to pairs for each segment)\n    // Include all entities (even those without geolocation) for complete circuit info\n    const circuitHops: CircuitHop[] = [];\n    const allNodeNames: string[] = [];\n    const allNodeIds: string[] = [];\n    const allNodeTypes: string[] = [];\n    const allNodeHasLocation: boolean[] = [];\n\n    // Add client (always, even without geolocation)\n    allNodeNames.push(clientName);\n    allNodeIds.push(clientId || '');\n    allNodeTypes.push('identity');\n    allNodeHasLocation.push(!!clientLocation);\n\n    // Add routers from path\n    for (const routerId of pathNodes) {\n      const router = routers.find(r => r.id === routerId);\n      const routerName = router?.name || routerId;\n      const routerLocation = routerLocations.get(routerId);\n\n      allNodeNames.push(routerLocation?.name || routerName);\n      allNodeIds.push(routerId);\n      allNodeTypes.push('routers');\n      allNodeHasLocation.push(!!routerLocation);\n    }\n\n    // Add host (always, even without geolocation)\n    allNodeNames.push(hostName);\n    allNodeIds.push(hostId || '');\n    allNodeTypes.push('identity');\n    allNodeHasLocation.push(!!hostLocation);\n\n    // Build hops from complete node lists and track which are visible on the map\n    // A hop is visible if both its endpoints have geolocation data\n    const visibleSegmentToHopIndex = new Map<number, number>();\n    let visibleSegmentIndex = 0;\n\n    // Build a lookup map from link ID to link object for O(1) access\n    const linksById = new Map<string, any>();\n    for (const link of links) {\n      if (link.id) linksById.set(link.id, link);\n    }\n\n    // The circuit's path.links array is ordered to match router-to-router hops:\n    // path.links[0] connects path.nodes[0] to path.nodes[1], etc.\n    // In allNodes: [clientIdentity, router0, router1, ..., hostIdentity]\n    // Router-to-router hop at position i corresponds to circuitPathLinks[i - 1]\n    // (subtracting 1 because client identity occupies index 0)\n    const circuitPathLinks: any[] = circuit.path?.links || [];\n\n\n    for (let i = 0; i < allNodeNames.length - 1; i++) {\n      const fromHasLocation = allNodeHasLocation[i];\n      const toHasLocation = allNodeHasLocation[i + 1];\n      const isVisible = fromHasLocation && toHasLocation;\n\n      // Compute latency for router-to-router hops from link data\n      let latencyMs: number | undefined;\n      if (allNodeTypes[i] === 'routers' && allNodeTypes[i + 1] === 'routers' && links.length > 0) {\n        let matchingLink: any;\n\n        // Strategy 1: match via the circuit's ordered path.links array (most precise)\n        // Handles both object format { id: '...' } and plain string IDs\n        if (circuitPathLinks.length > 0) {\n          const linkIndex = i - 1; // offset by 1 since client identity is at index 0\n          const circuitLink = circuitPathLinks[linkIndex];\n          const circuitLinkId = (typeof circuitLink === 'string') ? circuitLink : circuitLink?.id;\n          matchingLink = circuitLinkId ? linksById.get(circuitLinkId) : undefined;\n        }\n\n        // Strategy 2: fallback — match by source/dest router ID pairs\n        // Supports both nested object format (sourceRouter.id) and flat format (sourceRouterId)\n        if (!matchingLink) {\n          const fromId = allNodeIds[i];\n          const toId = allNodeIds[i + 1];\n          matchingLink = links.find(link => {\n            const srcId = link.sourceRouter?.id || link.sourceRouterId || link.src?.id;\n            const dstId = link.destRouter?.id || link.destRouterId || link.dst?.id;\n            return (srcId === fromId && dstId === toId) || (dstId === fromId && srcId === toId);\n          });\n        }\n\n        if (matchingLink) {\n          const srcLatency = matchingLink.sourceLatency || matchingLink.latency || 0;\n          const dstLatency = matchingLink.destLatency || matchingLink.latency || 0;\n          if (srcLatency > 0 || dstLatency > 0) {\n            latencyMs = (srcLatency + dstLatency) / 2 / 1_000_000;\n          }\n        }\n      }\n\n      circuitHops.push({\n        from: allNodeNames[i],\n        to: allNodeNames[i + 1],\n        fromId: allNodeIds[i],\n        toId: allNodeIds[i + 1],\n        fromType: allNodeTypes[i],\n        toType: allNodeTypes[i + 1],\n        isVisible: isVisible,\n        fromHasLocation: fromHasLocation,\n        toHasLocation: toHasLocation,\n        latencyMs\n      });\n\n      // Map visual segment index to logical hop index for visible segments\n      if (isVisible) {\n        visibleSegmentToHopIndex.set(visibleSegmentIndex, i);\n        visibleSegmentIndex++;\n      }\n    }\n\n    // Build detailed router list for circuit path display\n    const circuitRouters: any[] = [];\n    for (const routerId of pathNodes) {\n      const router = routers.find(r => r.id === routerId);\n      const routerLocation = routerLocations.get(routerId);\n\n      if (router) {\n        circuitRouters.push({\n          id: router.id,\n          name: routerLocation?.name || router.name || routerId,\n          type: 'routers',\n          connected: router.connected ?? router.isOnline ?? false,\n          _notFound: false\n        });\n      } else {\n        // Router not found in our data\n        circuitRouters.push({\n          id: routerId,\n          name: routerLocation?.name || routerId,\n          type: 'routers',\n          connected: false,\n          _notFound: true\n        });\n      }\n    }\n\n    return {\n      pathNodes,\n      pathCoordinates,\n      routerNames,\n      entityIds,\n      entityTypes,\n      circuitHops,\n      circuitRouters,\n      clientId,\n      clientName,\n      hostId,\n      hostName,\n      hasCompleteGeolocation: missingLocations.length === 0,\n      missingLocations,\n      visibleSegmentToHopIndex\n    };\n  }\n\n  /**\n   * Builds a simplified circuit path for rendering (coordinates only)\n   * @param circuit - The circuit object\n   * @param routerLocations - Map of router IDs to location data\n   * @param identityLocations - Map of identity IDs to location data\n   * @returns Array of coordinates or null if path cannot be built\n   */\n  buildSimpleCircuitPath(\n    circuit: any,\n    routerLocations: Map<string, any>,\n    identityLocations: Map<string, any>\n  ): [number, number][] | null {\n    const pathNodes = circuit.path?.nodes || circuit.path || [];\n    const pathCoordinates: [number, number][] = [];\n\n    // Extract client and host IDs\n    const clientId = circuit.tags?.clientId || circuit.clientId || circuit.client?.id || circuit.sourceId || circuit.initiator?.id;\n    const hostId = circuit.tags?.hostId || circuit.host?.id;\n\n    // Get client location\n    const clientLocation = identityLocations.get(clientId);\n    if (!clientLocation) {\n      return null;\n    }\n    pathCoordinates.push([clientLocation.lat, clientLocation.lng]);\n\n    // Add router locations\n    for (const routerId of pathNodes) {\n      const routerLocation = routerLocations.get(routerId);\n      if (routerLocation) {\n        pathCoordinates.push([routerLocation.lat, routerLocation.lng]);\n      }\n    }\n\n    // Get host location\n    const hostLocation = identityLocations.get(hostId);\n    if (!hostLocation) {\n      return null;\n    }\n    pathCoordinates.push([hostLocation.lat, hostLocation.lng]);\n\n    return pathCoordinates.length >= 2 ? pathCoordinates : null;\n  }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class CircuitFilterService {\n  /**\n   * Gets filtered identity IDs based on selected service and identity filters\n   * @param identities - All identities\n   * @param circuits - All circuits\n   * @param terminators - All terminators\n   * @param selectedServiceFilters - Selected service filters\n   * @param selectedIdentityFilters - Selected identity filters\n   * @returns Set of identity IDs that match the filters\n   */\n  getFilteredIdentityIds(\n    identities: any[],\n    circuits: any[],\n    terminators: any[],\n    selectedServiceFilters: any[],\n    selectedIdentityFilters: any[]\n  ): Set<string> {\n    const identityIds = new Set<string>();\n\n    // If no filters are active, return all identities\n    if (selectedIdentityFilters.length === 0 && selectedServiceFilters.length === 0) {\n      identities.forEach(identity => identityIds.add(identity.id));\n      return identityIds;\n    }\n\n    const selectedServiceIds = new Set(selectedServiceFilters.map(s => s.id));\n    const selectedIdentityIds = new Set(selectedIdentityFilters.map(i => i.id));\n\n    // If both filters are active, start with selected identities\n    if (selectedIdentityFilters.length > 0) {\n      selectedIdentityFilters.forEach(identity => {\n        identityIds.add(identity.id);\n      });\n    }\n\n    // If service filter is active, add identities that have active or potential access to those services\n    if (selectedServiceFilters.length > 0) {\n      // Add identities from active circuits for selected services\n      circuits.forEach(circuit => {\n        const circuitServiceId = circuit.service?.id;\n        const circuitClientId = circuit.clientId || circuit.tags?.clientId;\n\n        // Include if service matches (and identity matches if identity filter is active)\n        const matchesService = selectedServiceIds.has(circuitServiceId);\n        const matchesIdentity = selectedIdentityIds.size === 0 || selectedIdentityIds.has(circuitClientId);\n\n        if (matchesService && matchesIdentity && circuitClientId) {\n          identityIds.add(circuitClientId);\n        }\n      });\n\n      // Add hosting identities from terminators for selected services\n      terminators.forEach(terminator => {\n        const terminatorServiceId = terminator.serviceId || terminator.service?.id;\n        if (selectedServiceIds.has(terminatorServiceId)) {\n          const hostingIdentityId = terminator.identity?.id || terminator.identityId;\n          if (hostingIdentityId) {\n            identityIds.add(hostingIdentityId);\n          }\n        }\n      });\n\n      // Add identities that could potentially access these services\n      // (only if no specific identity filter is active)\n      if (selectedIdentityFilters.length === 0) {\n        identities.forEach(identity => {\n          const hasAccess = terminators.some(terminator => {\n            const terminatorServiceId = terminator.serviceId || terminator.service?.id;\n            return selectedServiceIds.has(terminatorServiceId);\n          });\n          if (hasAccess) {\n            identityIds.add(identity.id);\n          }\n        });\n      }\n    }\n\n    return identityIds;\n  }\n\n  /**\n   * Gets filtered router IDs based on selected service and identity filters\n   * @param identities - All identities\n   * @param circuits - All circuits\n   * @param terminators - All terminators\n   * @param routerLocations - Map of router locations\n   * @param selectedServiceFilters - Selected service filters\n   * @param selectedIdentityFilters - Selected identity filters\n   * @returns Set of router IDs that match the filters\n   */\n  getFilteredRouterIds(\n    identities: any[],\n    circuits: any[],\n    terminators: any[],\n    routerLocations: Map<string, any>,\n    selectedServiceFilters: any[],\n    selectedIdentityFilters: any[]\n  ): Set<string> {\n    const routerIds = new Set<string>();\n\n    // If no filters are active, show all routers\n    if (selectedServiceFilters.length === 0 && selectedIdentityFilters.length === 0) {\n      Array.from(routerLocations.keys()).forEach(id => routerIds.add(id));\n      return routerIds;\n    }\n\n    const selectedServiceIds = new Set(selectedServiceFilters.map(s => s.id));\n    const selectedIdentityIds = new Set(selectedIdentityFilters.map(i => i.id));\n\n    // Get filtered identities first\n    const filteredIdentityIds = this.getFilteredIdentityIds(\n      identities,\n      circuits,\n      terminators,\n      selectedServiceFilters,\n      selectedIdentityFilters\n    );\n\n    // Add all routers from active circuits that match the filters\n    circuits.forEach(circuit => {\n      const circuitServiceId = circuit.service?.id;\n      const circuitClientId = circuit.clientId || circuit.tags?.clientId;\n\n      // Check if circuit matches filters\n      const matchesService = selectedServiceIds.size === 0 || selectedServiceIds.has(circuitServiceId);\n      const matchesIdentity = selectedIdentityIds.size === 0 || selectedIdentityIds.has(circuitClientId);\n\n      // Handle both old format (path array) and new format (path.nodes array)\n      const pathNodes = circuit.path?.nodes || circuit.path;\n\n      // Include all routers in the circuit path if the circuit matches our filters\n      if (matchesService && matchesIdentity && pathNodes) {\n        pathNodes.forEach((node: any) => {\n          const routerId = node.id || node.routerId || node;\n          if (routerId) {\n            routerIds.add(routerId);\n          }\n        });\n      }\n    });\n\n    // Add routers that have terminators for selected services\n    if (selectedServiceIds.size > 0) {\n      terminators.forEach(terminator => {\n        const terminatorServiceId = terminator.serviceId || terminator.service?.id;\n        if (selectedServiceIds.has(terminatorServiceId)) {\n          routerIds.add(terminator.routerId);\n        }\n      });\n    }\n\n    // Add edge routers for filtered identities (routers the identities connect to)\n    identities.forEach(identity => {\n      if (filteredIdentityIds.has(identity.id)) {\n        // Add edge routers from the identity's serviceEdgeRouters\n        if (identity.serviceEdgeRouters) {\n          identity.serviceEdgeRouters.forEach((routerId: string) => {\n            routerIds.add(routerId);\n          });\n        }\n        // Also check if identity has edgeRouterConnections\n        if (identity.edgeRouterConnections) {\n          identity.edgeRouterConnections.forEach((connection: any) => {\n            const routerId = connection.id || connection.routerId;\n            if (routerId) {\n              routerIds.add(routerId);\n            }\n          });\n        }\n      }\n    });\n\n    return routerIds;\n  }\n}\n","import { Injectable, EventEmitter } from '@angular/core';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { ConfirmComponent } from '../../../features/confirm/confirm.component';\nimport { GrowlerService } from '../../../features/messaging/growler.service';\nimport { GrowlerModel } from '../../../features/messaging/growler.model';\nimport { GeolocationService } from './geolocation.service';\nimport L from 'leaflet';\n\n/**\n * Service responsible for managing map markers (identities and routers)\n * Handles marker creation, updates, selection, and user interactions\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class MapMarkerService {\n  // Marker collections\n  identityMarkers: any[] = [];\n  routerMarkers: any[] = [];\n\n  // Marker-to-ID mappings\n  markerToIdentityId = new Map<any, string>();\n  markerToRouterId = new Map<any, string>();\n\n  // Track currently draggable marker\n  currentDraggableMarker: any = null;\n\n  // Track selected marker\n  selectedMarker: any = null;\n\n  // Track markers that are part of active circuits (for scaling)\n  circuitMarkerIds = new Set<string>();\n\n  // Events for communication with component\n  markerClicked = new EventEmitter<{ item: any; type: string; location: { lat: number; lng: number } }>();\n  geolocationRemoved = new EventEmitter<{ item: any; type: string; marker: any }>();\n  geolocationUpdated = new EventEmitter<{ item: any; lat: number; lng: number; type: string }>();\n\n  // Context menu cleanup function\n  private contextMenuCleanup: (() => void) | null = null;\n  private dialogRef: MatDialogRef<any> | null = null;\n\n  constructor(\n    private geolocationService: GeolocationService,\n    private growlerService: GrowlerService,\n    private dialogForm: MatDialog\n  ) {}\n\n  /**\n   * Creates a Leaflet marker icon with dynamic styling\n   * @param type - 'identity' or 'routers'\n   * @param isSelected - Whether the marker is selected\n   * @param scale - Scale factor for the icon (default 0.85)\n   * @returns Leaflet icon object\n   */\n  createMarkerIcon(type: string, isSelected: boolean, scale: number = 0.85): any {\n    // Use document.baseURI so URLs include the SPA's <base href> context root\n    // (e.g. /zac/), not just the origin -- the bundle is path-agnostic.\n    const baseUrl = document.baseURI.replace(/\\/$/, \"\");\n    let iconUrl: string;\n\n    if (isSelected) {\n      iconUrl = type === 'identity'\n        ? `${baseUrl}/assets/svgs/identity-marker-selected.svg`\n        : `${baseUrl}/assets/svgs/router-marker-selected.svg`;\n    } else {\n      iconUrl = type === 'identity'\n        ? `${baseUrl}/assets/svgs/identity-marker.svg`\n        : `${baseUrl}/assets/svgs/router-marker.svg`;\n    }\n\n    // Calculate scaled dimensions (circular icons: square aspect, centered anchor)\n    const iconSize: [number, number] = [40 * scale, 40 * scale];\n    const iconAnchor: [number, number] = [20 * scale, 20 * scale];\n    const popupAnchor: [number, number] = [0, -24 * scale];\n    const tooltipAnchor: [number, number] = [16 * scale, -16 * scale];\n    const shadowSize: [number, number] = [40 * scale, 40 * scale];\n\n    return L.icon({\n      iconUrl,\n      iconRetinaUrl: iconUrl,\n      shadowUrl: `${baseUrl}/assets/scripts/components/leaflet/images/marker-shadow.png`,\n      iconSize,\n      iconAnchor,\n      popupAnchor,\n      tooltipAnchor,\n      shadowSize\n    });\n  }\n\n  /**\n   * Adds markers to the map for a collection of entities\n   * @param data - Array of entities (identities or routers)\n   * @param type - 'identity' or 'routers'\n   * @param clusterGroup - Leaflet cluster group to add markers to\n   * @param map - Leaflet map instance (fallback if no cluster group)\n   * @param routerLocations - Map to store router locations\n   * @param identityLocations - Map to store identity locations\n   * @returns Array of created markers\n   */\n  addMarkers(\n    data: any[],\n    type: string,\n    clusterGroup: any,\n    map: any,\n    routerLocations: Map<string, any>,\n    identityLocations: Map<string, any>\n  ): any[] {\n    // Create icon at 85% scale for default state\n    const icon = this.createMarkerIcon(type, false, 0.85);\n\n    const markers = [];\n\n    for (const item of data) {\n      // Parse geolocation using service\n      const coordinates = this.geolocationService.parseGeolocation(item.tags?.geolocation);\n\n      if (!coordinates) {\n        // No valid geolocation - skip marker creation\n        continue;\n      }\n\n      const { lat, lng } = coordinates;\n\n      // Store router and identity locations for circuit drawing\n      if (type === 'routers') {\n        routerLocations.set(item.id, { lat, lng, name: item.name });\n      } else if (type === 'identity') {\n        identityLocations.set(item.id, { lat, lng, name: item.name });\n      }\n\n      const marker = L.marker([lat, lng], {\n        icon,\n        draggable: false  // Start as not draggable\n      });\n\n      // Store item and type on the marker for later retrieval\n      (marker as any)._itemData = item;\n      (marker as any)._itemType = type;\n\n      // Store original location for change tracking (before any modifications)\n      this.geolocationService.trackOriginalLocation(item);\n\n      // Add click handler to open side panel\n      marker.on('click', (e: any) => {\n        // Don't disable dragging when clicking the marker itself\n        e.originalEvent.stopPropagation();\n\n        // Get the current location from the marker's position (in case it was dragged)\n        const currentLatLng = marker.getLatLng();\n\n        this.markerClicked.emit({\n          item: item,\n          type: type,\n          location: { lat: currentLatLng.lat, lng: currentLatLng.lng }\n        });\n      });\n\n      // Add context menu on right-click - bind directly to marker\n      marker.on('contextmenu', (event: any) => {\n        event.originalEvent.preventDefault();\n        event.originalEvent.stopPropagation();\n        this.showMarkerContextMenu(event, marker, item, type, routerLocations, identityLocations);\n        return false;\n      });\n\n      // Add drag end handler to update geolocation\n      marker.on('dragend', (event: any) => {\n        const newLatLng = event.target.getLatLng();\n        this.geolocationUpdated.emit({\n          item,\n          lat: newLatLng.lat,\n          lng: newLatLng.lng,\n          type\n        });\n\n        // Re-apply the draggable styling in case it was removed during updates\n        setTimeout(() => {\n          const markerElement = marker.getElement();\n          if (markerElement && this.currentDraggableMarker === marker) {\n            const cssClass = type === 'identity' ? 'marker-draggable-active-identity' : 'marker-draggable-active-router';\n            markerElement.classList.add(cssClass);\n          }\n        }, 100);\n\n        // Emit click event to open side panel with updated location\n        this.markerClicked.emit({\n          item: item,\n          type: type,\n          location: { lat: newLatLng.lat, lng: newLatLng.lng }\n        });\n      });\n\n      // Store marker-to-ID mapping\n      if (type === 'identity') {\n        this.markerToIdentityId.set(marker, item.id);\n      } else if (type === 'routers') {\n        this.markerToRouterId.set(marker, item.id);\n      }\n\n      // Add marker to appropriate cluster group if available, otherwise add to map\n      if (clusterGroup) {\n        clusterGroup.addLayer(marker);\n      } else {\n        marker.addTo(map);\n      }\n\n      markers.push(marker);\n    }\n\n    // Store markers in appropriate array\n    if (type === 'identity') {\n      this.identityMarkers = [...this.identityMarkers, ...markers];\n    } else {\n      this.routerMarkers = [...this.routerMarkers, ...markers];\n    }\n\n    return markers;\n  }\n\n  /**\n   * Finds a marker by item ID and type\n   * @param itemId - Entity ID\n   * @param itemType - 'identity' or 'routers'\n   * @param identityClusterGroup - Identity cluster group\n   * @param routerClusterGroup - Router cluster group\n   * @returns Marker object or null\n   */\n  findMarkerByItemId(itemId: string, itemType: string, identityClusterGroup: any, routerClusterGroup: any): any {\n    // Check identity cluster group\n    if (itemType === 'identity' && identityClusterGroup) {\n      const markers = identityClusterGroup.getLayers();\n      for (const marker of markers) {\n        if ((marker as any)._itemData?.id === itemId) {\n          return marker;\n        }\n      }\n    }\n\n    // Check router cluster group\n    if (itemType === 'routers' && routerClusterGroup) {\n      const markers = routerClusterGroup.getLayers();\n      for (const marker of markers) {\n        if ((marker as any)._itemData?.id === itemId) {\n          return marker;\n        }\n      }\n    }\n\n    return null;\n  }\n\n  /**\n   * Updates marker icon based on selection state and circuit membership\n   * @param marker - Marker to update\n   * @param isSelected - Whether the marker is selected\n   */\n  updateMarkerIcon(marker: any, isSelected: boolean): void {\n    if (!marker) return;\n\n    const itemType = (marker as any)._itemType;\n    const itemId = (marker as any)._itemData?.id;\n\n    // Use 100% scale (1.0) for selected markers or markers in active circuits\n    // Use 85% scale (0.85) for other markers\n    const isPartOfCircuit = itemId && this.circuitMarkerIds.has(itemId);\n    const scale = (isSelected || isPartOfCircuit) ? 1.0 : 0.85;\n    const newIcon = this.createMarkerIcon(itemType, isSelected, scale);\n\n    marker.setIcon(newIcon);\n  }\n\n  /**\n   * Applies opacity to all markers except the selected one\n   * @param selectedMarker - The marker to keep at full opacity\n   * @param opacity - Opacity value for non-selected markers (default 0.7)\n   * @param identityClusterGroup - Identity cluster group\n   * @param routerClusterGroup - Router cluster group\n   */\n  applyMarkerOpacity(selectedMarker: any, opacity: number = 0.7, identityClusterGroup: any, routerClusterGroup: any): void {\n    // Apply opacity to identity markers\n    if (identityClusterGroup) {\n      const identityMarkers = identityClusterGroup.getLayers();\n      identityMarkers.forEach((marker: any) => {\n        if (marker !== selectedMarker) {\n          const element = marker.getElement();\n          if (element) {\n            element.style.opacity = opacity.toString();\n          }\n        }\n      });\n    }\n\n    // Apply opacity to router markers\n    if (routerClusterGroup) {\n      const routerMarkers = routerClusterGroup.getLayers();\n      routerMarkers.forEach((marker: any) => {\n        if (marker !== selectedMarker) {\n          const element = marker.getElement();\n          if (element) {\n            element.style.opacity = opacity.toString();\n          }\n        }\n      });\n    }\n  }\n\n  /**\n   * Resets opacity for all markers to full visibility\n   * @param identityClusterGroup - Identity cluster group\n   * @param routerClusterGroup - Router cluster group\n   */\n  resetMarkerOpacity(identityClusterGroup: any, routerClusterGroup: any): void {\n    // Reset identity markers\n    if (identityClusterGroup) {\n      const identityMarkers = identityClusterGroup.getLayers();\n      identityMarkers.forEach((marker: any) => {\n        const element = marker.getElement();\n        if (element) {\n          element.style.opacity = '1';\n        }\n      });\n    }\n\n    // Reset router markers\n    if (routerClusterGroup) {\n      const routerMarkers = routerClusterGroup.getLayers();\n      routerMarkers.forEach((marker: any) => {\n        const element = marker.getElement();\n        if (element) {\n          element.style.opacity = '1';\n        }\n      });\n    }\n  }\n\n  /**\n   * Scales markers that are part of active circuits\n   * @param scaleUp - Whether to scale up (true) or down (false)\n   * @param identityClusterGroup - Identity cluster group\n   * @param routerClusterGroup - Router cluster group\n   */\n  scaleCircuitMarkers(scaleUp: boolean, identityClusterGroup: any, routerClusterGroup: any): void {\n    this.circuitMarkerIds.forEach(entityId => {\n      // Find marker in identity cluster group\n      if (identityClusterGroup) {\n        const identityMarkers = identityClusterGroup.getLayers();\n        for (const marker of identityMarkers) {\n          if ((marker as any)._itemData?.id === entityId) {\n            this.updateMarkerIcon(marker, false);\n            break;\n          }\n        }\n      }\n\n      // Find marker in router cluster group\n      if (routerClusterGroup) {\n        const routerMarkers = routerClusterGroup.getLayers();\n        for (const marker of routerMarkers) {\n          if ((marker as any)._itemData?.id === entityId) {\n            this.updateMarkerIcon(marker, false);\n            break;\n          }\n        }\n      }\n    });\n  }\n\n  /**\n   * Clears selected marker state and resets opacity\n   * @param identityClusterGroup - Identity cluster group\n   * @param routerClusterGroup - Router cluster group\n   */\n  clearSelectedMarker(identityClusterGroup: any, routerClusterGroup: any): void {\n    if (this.selectedMarker) {\n      this.updateMarkerIcon(this.selectedMarker, false);\n      this.resetMarkerOpacity(identityClusterGroup, routerClusterGroup);\n      this.selectedMarker = null;\n    }\n  }\n\n  /**\n   * Sets a marker as selected and applies visual effects\n   * @param marker - Marker to select\n   * @param identityClusterGroup - Identity cluster group\n   * @param routerClusterGroup - Router cluster group\n   */\n  setSelectedMarker(marker: any, identityClusterGroup: any, routerClusterGroup: any): void {\n    this.selectedMarker = marker;\n    this.updateMarkerIcon(marker, true);\n    this.applyMarkerOpacity(marker, 0.7, identityClusterGroup, routerClusterGroup);\n  }\n\n  /**\n   * Removes a marker from the map and collections\n   * @param marker - Marker to remove\n   * @param type - 'identity' or 'routers'\n   * @param identityClusterGroup - Identity cluster group\n   * @param routerClusterGroup - Router cluster group\n   * @param routerLocations - Router locations map\n   * @param identityLocations - Identity locations map\n   * @param itemId - Entity ID\n   */\n  removeMarker(\n    marker: any,\n    type: string,\n    identityClusterGroup: any,\n    routerClusterGroup: any,\n    routerLocations: Map<string, any>,\n    identityLocations: Map<string, any>,\n    itemId: string\n  ): void {\n    // Remove the marker from the map\n    if (type === 'identity') {\n      identityClusterGroup.removeLayer(marker);\n      this.identityMarkers = this.identityMarkers.filter((m: any) => m !== marker);\n      identityLocations.delete(itemId);\n    } else if (type === 'routers') {\n      routerClusterGroup.removeLayer(marker);\n      this.routerMarkers = this.routerMarkers.filter((m: any) => m !== marker);\n      routerLocations.delete(itemId);\n    }\n\n    // If this was the draggable marker, clear it\n    if (this.currentDraggableMarker === marker) {\n      this.currentDraggableMarker = null;\n    }\n  }\n\n  /**\n   * Shows context menu for a marker with drag/drop and remove options\n   * @param event - Leaflet event object\n   * @param marker - Marker to show menu for\n   * @param item - Entity data\n   * @param type - 'identity' or 'routers'\n   * @param routerLocations - Router locations map\n   * @param identityLocations - Identity locations map\n   */\n  private showMarkerContextMenu(\n    event: any,\n    marker: any,\n    item: any,\n    type: string,\n    routerLocations: Map<string, any>,\n    identityLocations: Map<string, any>\n  ): void {\n    // Clean up previous context menu and its listeners\n    if (this.contextMenuCleanup) {\n      this.contextMenuCleanup();\n      this.contextMenuCleanup = null;\n    }\n\n    const existingMenu = document.getElementById('marker-context-menu');\n    if (existingMenu) {\n      existingMenu.remove();\n    }\n\n    // Create context menu\n    const menu = document.createElement('div');\n    menu.id = 'marker-context-menu';\n    menu.style.position = 'fixed';\n    menu.style.left = `${event.originalEvent.clientX}px`;\n    menu.style.top = `${event.originalEvent.clientY}px`;\n    menu.style.backgroundColor = 'white';\n    menu.style.border = '1px solid #ccc';\n    menu.style.borderRadius = '4px';\n    menu.style.boxShadow = '0 2px 8px rgba(0,0,0,0.15)';\n    menu.style.zIndex = '99999';\n    menu.style.minWidth = '150px';\n    menu.style.padding = '0.25rem 0';\n\n    // Create \"Enable Drag/Drop\" menu item\n    const menuItem = document.createElement('div');\n    menuItem.textContent = 'Enable Drag/Drop';\n    menuItem.style.padding = '0.5rem 1rem';\n    menuItem.style.cursor = 'pointer';\n    menuItem.style.color = '#333';\n    menuItem.style.transition = 'background-color 0.2s ease';\n\n    // Add hover effect\n    menuItem.addEventListener('mouseenter', () => {\n      menuItem.style.backgroundColor = '#f0f0f0';\n    });\n    menuItem.addEventListener('mouseleave', () => {\n      menuItem.style.backgroundColor = 'transparent';\n    });\n\n    // Add click handler for drag/drop\n    menuItem.addEventListener('click', (e) => {\n      e.stopPropagation();\n\n      // Disable any previously draggable marker\n      if (this.currentDraggableMarker && this.currentDraggableMarker !== marker) {\n        this.currentDraggableMarker.dragging.disable();\n        // Remove visual styling from previous marker\n        const prevElement = this.currentDraggableMarker.getElement();\n        if (prevElement) {\n          prevElement.classList.remove('marker-draggable-active-identity');\n          prevElement.classList.remove('marker-draggable-active-router');\n        }\n      }\n\n      // Enable dragging on this marker\n      marker.dragging.enable();\n      this.currentDraggableMarker = marker;\n\n      // Add visual styling to indicate drag mode (type-specific)\n      const markerElement = marker.getElement();\n      if (markerElement) {\n        const cssClass = type === 'identity' ? 'marker-draggable-active-identity' : 'marker-draggable-active-router';\n        markerElement.classList.add(cssClass);\n      }\n\n      // Clean up and remove menu\n      if (this.contextMenuCleanup) {\n        this.contextMenuCleanup();\n        this.contextMenuCleanup = null;\n      }\n      menu.remove();\n    });\n\n    menu.appendChild(menuItem);\n\n    // Create \"Remove Geolocation\" menu item\n    const removeMenuItem = document.createElement('div');\n    removeMenuItem.textContent = 'Remove Geolocation';\n    removeMenuItem.style.padding = '0.5rem 1rem';\n    removeMenuItem.style.cursor = 'pointer';\n    removeMenuItem.style.color = '#d32f2f';\n    removeMenuItem.style.transition = 'background-color 0.2s ease';\n    removeMenuItem.style.borderTop = '1px solid #e0e0e0';\n\n    // Add hover effect\n    removeMenuItem.addEventListener('mouseenter', () => {\n      removeMenuItem.style.backgroundColor = '#ffebee';\n    });\n    removeMenuItem.addEventListener('mouseleave', () => {\n      removeMenuItem.style.backgroundColor = 'transparent';\n    });\n\n    // Add click handler for remove\n    removeMenuItem.addEventListener('click', (e) => {\n      e.stopPropagation();\n\n      // Clean up and close the context menu first\n      if (this.contextMenuCleanup) {\n        this.contextMenuCleanup();\n        this.contextMenuCleanup = null;\n      }\n      menu.remove();\n\n      // Show confirm dialog\n      const confirmData = {\n        appendId: 'RemoveGeolocation',\n        title: 'Remove Geolocation',\n        message: `Are you sure you want to remove the geolocation tag from <strong>${item.name}</strong>?<br><br>This will remove the marker from the map and the entity will appear in the unlocated entities list.`,\n        confirmLabel: 'Yes, Remove',\n        cancelLabel: 'Cancel',\n        showCancelLink: true,\n        imageUrl: 'assets/svgs/Growl_Warning.svg',\n      };\n\n      this.dialogRef = this.dialogForm.open(ConfirmComponent, {\n        data: confirmData,\n        autoFocus: false,\n      });\n\n      this.dialogRef.afterClosed().subscribe({\n        next: (result: any) => {\n          if (!result?.confirmed) {\n            return;\n          }\n\n          // Emit event to component to handle marker removal and location updates\n          this.geolocationRemoved.emit({ item, type, marker });\n        }\n      });\n    });\n\n    menu.appendChild(removeMenuItem);\n\n    // Add menu to document\n    document.body.appendChild(menu);\n\n    // Create cleanup function to remove menu and listeners\n    const handleClickOutside = (e: MouseEvent) => {\n      if (!menu.contains(e.target as Node)) {\n        menu.remove();\n        document.removeEventListener('click', handleClickOutside);\n        this.contextMenuCleanup = null;\n      }\n    };\n\n    // Add listener with slight delay to prevent immediate triggering\n    setTimeout(() => {\n      document.addEventListener('click', handleClickOutside);\n    }, 10);\n\n    this.contextMenuCleanup = () => {\n      menu.remove();\n      document.removeEventListener('click', handleClickOutside);\n    };\n  }\n\n  /**\n   * Disables dragging on the current draggable marker\n   */\n  disableCurrentDraggableMarker(): void {\n    if (this.currentDraggableMarker) {\n      this.currentDraggableMarker.dragging.disable();\n\n      // Remove visual styling\n      const markerElement = this.currentDraggableMarker.getElement();\n      if (markerElement) {\n        markerElement.classList.remove('marker-draggable-active-identity');\n        markerElement.classList.remove('marker-draggable-active-router');\n      }\n\n      this.currentDraggableMarker = null;\n    }\n  }\n\n  /**\n   * Clears all markers and resets state\n   */\n  clearAllMarkers(): void {\n    this.identityMarkers = [];\n    this.routerMarkers = [];\n    this.markerToIdentityId.clear();\n    this.markerToRouterId.clear();\n    this.currentDraggableMarker = null;\n    this.selectedMarker = null;\n    this.circuitMarkerIds.clear();\n  }\n}\n","import { Injectable, EventEmitter } from '@angular/core';\nimport { CircuitCalculationService } from './circuit-calculation.service';\nimport { CircuitPathBuilderService } from './circuit-path-builder.service';\nimport L from 'leaflet';\n\n/**\n * Service responsible for rendering visual elements on the map\n * Handles circuit lines, router links, and their styling\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class MapRenderingService {\n  // Line collections\n  circuitLines: any[] = [];\n  activeCircuitLines: any[] = [];\n\n  // Events for communication with component\n  linkClicked = new EventEmitter<any>();\n  circuitSegmentClicked = new EventEmitter<any>();\n\n  constructor(\n    private circuitCalculationService: CircuitCalculationService,\n    private circuitPathBuilderService: CircuitPathBuilderService\n  ) {}\n\n  /**\n   * Draws router links on the map\n   * @param map - Leaflet map instance\n   * @param links - Array of router links\n   * @param routerLocations - Map of router locations\n   * @param edgeRouters - Array of edge routers (for visibility filtering)\n   * @param linksVisible - Whether links should be visible\n   */\n  drawLinks(\n    map: any,\n    links: any[],\n    routerLocations: Map<string, any>,\n    edgeRouters: any[],\n    linksVisible: boolean\n  ): void {\n    // Clear existing circuit lines\n    this.circuitLines.forEach(line => {\n      map.removeLayer(line);\n    });\n    this.circuitLines = [];\n\n    // Get set of currently visible router IDs\n    const visibleRouterIds = new Set<string>();\n    edgeRouters.forEach(router => {\n      visibleRouterIds.add(router.id);\n    });\n\n    links.forEach((link, index) => {\n      // Each link has sourceRouter and destRouter\n      const sourceRouter = link.sourceRouter;\n      const destRouter = link.destRouter;\n\n      if (!sourceRouter || !destRouter) {\n        return;\n      }\n\n      // Only show link if both routers are visible\n      if (!visibleRouterIds.has(sourceRouter.id) || !visibleRouterIds.has(destRouter.id)) {\n        return;\n      }\n\n      const loc1 = routerLocations.get(sourceRouter.id);\n      const loc2 = routerLocations.get(destRouter.id);\n\n      if (loc1 && loc2) {\n        // Determine line color based on link state and latency\n        let lineColor = '#4A90E2'; // default blue\n        let lineOpacity = 0.6;\n\n        if (link.down) {\n          lineColor = '#E74C3C'; // red for down links\n          lineOpacity = 0.8;\n        } else if (link.state === 'Connected') {\n          // Check latency thresholds (latency values are in nanoseconds)\n          // Use the higher of source/dest latency\n          const latencyNs = Math.max(link.sourceLatency || 0, link.destLatency || 0);\n          const latencyMs = latencyNs / 1000000; // Convert nanoseconds to milliseconds\n\n          // Define latency thresholds based on industry standards for network infrastructure:\n          // - Under 50ms: Excellent/normal latency for network links\n          // - 50-100ms: Acceptable but elevated, becomes noticeable in real-time applications\n          // - Over 100ms: Poor/problematic, significantly impacts user experience\n          const GOOD_LATENCY = 50;  // Green: under 50ms (excellent/normal)\n          const ACCEPTABLE_LATENCY = 100;  // Yellow: 50-100ms (elevated/noticeable)\n          // Red: over 100ms (poor/problematic)\n\n          if (latencyMs < GOOD_LATENCY) {\n            lineColor = '#2ECC71'; // green for excellent latency\n            lineOpacity = 0.7;\n          } else if (latencyMs < ACCEPTABLE_LATENCY) {\n            lineColor = '#F39C12'; // yellow for elevated latency\n            lineOpacity = 0.75;\n          } else {\n            lineColor = '#E74C3C'; // red for problematic latency\n            lineOpacity = 0.8;\n          }\n        }\n\n        const line = L.polyline(\n          [[loc1.lat, loc1.lng], [loc2.lat, loc2.lng]],\n          {\n            color: lineColor,\n            weight: 3,\n            opacity: lineOpacity,\n            smoothFactor: 1\n          }\n        );\n\n        // Add click handler to open side panel\n        line.on('click', () => {\n          this.linkClicked.emit({\n            link: link,\n            sourceRouter: sourceRouter,\n            destRouter: destRouter,\n            locations: { source: loc1, dest: loc2 }\n          });\n        });\n\n        line.addTo(map);\n        this.circuitLines.push(line);\n      }\n    });\n\n    this.updateLinksVisibility(map, linksVisible);\n  }\n\n  /**\n   * Draws router links filtered by specific router IDs\n   * @param map - Leaflet map instance\n   * @param links - Array of all router links\n   * @param filteredRouterIds - Set of router IDs to filter by\n   * @param routerLocations - Map of router locations\n   * @param linksVisible - Whether links should be visible\n   */\n  drawFilteredLinks(\n    map: any,\n    links: any[],\n    filteredRouterIds: Set<string>,\n    routerLocations: Map<string, any>,\n    linksVisible: boolean\n  ): void {\n    links.forEach((link) => {\n      const sourceRouter = link.sourceRouter;\n      const destRouter = link.destRouter;\n\n      if (!sourceRouter || !destRouter) {\n        return;\n      }\n\n      // Only show links between filtered routers\n      if (!filteredRouterIds.has(sourceRouter.id) || !filteredRouterIds.has(destRouter.id)) {\n        return;\n      }\n\n      const loc1 = routerLocations.get(sourceRouter.id);\n      const loc2 = routerLocations.get(destRouter.id);\n\n      if (loc1 && loc2) {\n        // Determine line color based on link state and latency\n        let lineColor = '#4A90E2'; // default blue\n        let lineOpacity = 0.6;\n\n        if (link.down) {\n          lineColor = '#E74C3C'; // red for down links\n          lineOpacity = 0.8;\n        } else if (link.state === 'Connected') {\n          // Check latency thresholds (latency values are in nanoseconds)\n          // Use the higher of source/dest latency\n          const latencyNs = Math.max(link.sourceLatency || 0, link.destLatency || 0);\n          const latencyMs = latencyNs / 1000000; // Convert nanoseconds to milliseconds\n\n          // Define latency thresholds based on industry standards for network infrastructure:\n          // - Under 50ms: Excellent/normal latency for network links\n          // - 50-100ms: Acceptable but elevated, becomes noticeable in real-time applications\n          // - Over 100ms: Poor/problematic, significantly impacts user experience\n          const GOOD_LATENCY = 50;  // Green: under 50ms (excellent/normal)\n          const ACCEPTABLE_LATENCY = 100;  // Yellow: 50-100ms (elevated/noticeable)\n          // Red: over 100ms (poor/problematic)\n\n          if (latencyMs < GOOD_LATENCY) {\n            lineColor = '#2ECC71'; // green for excellent latency\n            lineOpacity = 0.7;\n          } else if (latencyMs < ACCEPTABLE_LATENCY) {\n            lineColor = '#F39C12'; // yellow for elevated latency\n            lineOpacity = 0.75;\n          } else {\n            lineColor = '#E74C3C'; // red for problematic latency\n            lineOpacity = 0.8;\n          }\n        }\n\n        const line = L.polyline(\n          [[loc1.lat, loc1.lng], [loc2.lat, loc2.lng]],\n          {\n            color: lineColor,\n            weight: 3,\n            opacity: lineOpacity,\n            smoothFactor: 1\n          }\n        );\n\n        // Add click handler to open side panel\n        line.on('click', () => {\n          this.linkClicked.emit({\n            link: link,\n            sourceRouter: sourceRouter,\n            destRouter: destRouter,\n            locations: { source: loc1, dest: loc2 }\n          });\n        });\n\n        if (linksVisible) {\n          line.addTo(map);\n        }\n\n        this.circuitLines.push(line);\n      }\n    });\n  }\n\n  /**\n   * Draws active circuits on the map with complex styling and interactions\n   * @param map - Leaflet map instance\n   * @param circuits - Array of circuits to draw\n   * @param identities - Array of identities\n   * @param identityLocations - Map of identity locations\n   * @param routerLocations - Map of router locations\n   * @param terminators - Array of terminators\n   * @param edgeRouters - Array of edge routers\n   * @param services - Array of services\n   * @param selectedServiceAttributes - Array of selected service attribute filters\n   * @param selectedServiceNamedAttributes - Array of selected service named attribute filters\n   * @param selectedCircuitSegment - Currently selected circuit segment\n   * @param activeCircuitsVisible - Whether active circuits should be visible\n   * @param isCircuitSelectionActive - Whether a specific circuit is selected\n   * @param scaleCircuitMarkersCallback - Callback to scale circuit markers\n   * @returns Set of circuit marker IDs\n   */\n  drawActiveCircuits(\n    map: any,\n    circuits: any[],\n    identities: any[],\n    identityLocations: Map<string, any>,\n    routerLocations: Map<string, any>,\n    terminators: any[],\n    edgeRouters: any[],\n    services: any[],\n    selectedServiceAttributes: any[],\n    selectedServiceNamedAttributes: any[],\n    selectedCircuitSegment: any,\n    activeCircuitsVisible: boolean,\n    isCircuitSelectionActive: boolean,\n    scaleCircuitMarkersCallback: (scaleUp: boolean) => void\n  ): Set<string> {\n    // Clear existing active circuit lines\n    this.activeCircuitLines.forEach(line => {\n      map.removeLayer(line);\n    });\n    this.activeCircuitLines = [];\n\n    // Scale down previous circuit markers before clearing the set\n    scaleCircuitMarkersCallback(false);\n\n    // Clear and rebuild circuit marker IDs\n    const newCircuitMarkerIds = new Set<string>();\n\n    // Get set of currently visible router IDs\n    const visibleRouterIds = new Set<string>();\n    edgeRouters.forEach(router => {\n      visibleRouterIds.add(router.id);\n    });\n\n    // Get set of currently visible service IDs\n    const visibleServiceIds = new Set<string>();\n    services.forEach(service => {\n      visibleServiceIds.add(service.id);\n    });\n\n    circuits.forEach((circuit) => {\n      // Check if service filter is applied and if this circuit's service matches\n      const hasServiceFilters = selectedServiceAttributes.length > 0 || selectedServiceNamedAttributes.length > 0;\n      if (!this.circuitCalculationService.isCircuitServiceVisible(circuit, visibleServiceIds, hasServiceFilters)) {\n        return;\n      }\n\n      // Check if at least one router in this circuit path is visible\n      if (!this.circuitCalculationService.hasAnyVisibleRouter(circuit, visibleRouterIds)) {\n        return;\n      }\n\n      // Build the circuit path data with visibility tracking\n      const routers = edgeRouters; // Use edgeRouters as the routers parameter\n      const circuitPathData = this.circuitPathBuilderService.buildCircuitPathData(\n        circuit,\n        routerLocations,\n        identityLocations,\n        routers,\n        identities\n      );\n\n      if (!circuitPathData) {\n        return;\n      }\n\n      // Only proceed if we have at least 2 visible coordinates\n      if (circuitPathData.pathCoordinates.length < 2) {\n        return;\n      }\n\n      const pathCoordinates = circuitPathData.pathCoordinates;\n      const routerNames = circuitPathData.routerNames;\n      const entityIds = circuitPathData.entityIds;\n      const entityTypes = circuitPathData.entityTypes;\n      const visibleSegmentToHopIndex = circuitPathData.visibleSegmentToHopIndex;\n\n      // Track circuit marker IDs for entities with coordinates\n      entityIds.forEach(id => newCircuitMarkerIds.add(id));\n\n      // Draw individual line segments between each hop in the circuit\n      if (pathCoordinates.length >= 2) {\n        for (let i = 0; i < pathCoordinates.length - 1; i++) {\n          const start = pathCoordinates[i];\n          const end = pathCoordinates[i + 1];\n\n          // Get the active circuit color from CSS variables\n          const activeCircuitColor = getComputedStyle(document.documentElement).getPropertyValue('--activeCircuitColor').trim() || '#833b82';\n\n          // Map visual segment index to logical hop index for selection checking\n          const logicalHopIndex = visibleSegmentToHopIndex.get(i) ?? i;\n\n          // Check if this specific segment is selected (compare against logical hop index)\n          const isThisSegmentSelected = selectedCircuitSegment &&\n                                        selectedCircuitSegment.circuitId === circuit.id &&\n                                        selectedCircuitSegment.segmentIndex === logicalHopIndex;\n\n          // Check if this circuit has a selected segment (but this particular segment is not it)\n          const isCircuitWithSelectedSegment = selectedCircuitSegment &&\n                                               selectedCircuitSegment.circuitId === circuit.id;\n          const isNonSelectedSegmentOfSelectedCircuit = isCircuitWithSelectedSegment && !isThisSegmentSelected;\n\n          // Determine styling based on selection state\n          let lineColor: string;\n          let lineWeight: number;\n          let lineOpacity: number;\n          let lineDashArray: string;\n\n          if (isThisSegmentSelected) {\n            // This is the selected segment - use active circuit color and enhanced styling\n            lineColor = activeCircuitColor;\n            lineWeight = 4;\n            lineOpacity = 1.0;\n            lineDashArray = '15, 5';\n          } else if (isNonSelectedSegmentOfSelectedCircuit) {\n            // This is part of the selected circuit but not the selected segment - grey and semi-transparent\n            lineColor = '#999999';\n            lineWeight = 2.5;\n            lineOpacity = 0.55;\n            lineDashArray = '10, 5';\n          } else {\n            // Normal segment - use standard active circuit color\n            lineColor = activeCircuitColor;\n            lineWeight = 3;\n            lineOpacity = 0.9;\n            lineDashArray = '10, 5';\n          }\n\n          // Create an invisible wider line for easier clicking (hitbox)\n          const hitboxLine = L.polyline([start, end], {\n            color: 'transparent',\n            weight: 12,\n            opacity: 0,\n            smoothFactor: 1,\n            pane: 'overlayPane',\n            interactive: true,\n            className: 'circuit-hitbox'\n          });\n\n          const lineOptions: any = {\n            color: lineColor,\n            weight: lineWeight,\n            opacity: lineOpacity,\n            smoothFactor: 1,\n            pane: 'overlayPane', // Higher z-index to render above router links\n            dashArray: lineDashArray,\n            className: isThisSegmentSelected ? 'active-circuit-line selected-circuit-line' : 'active-circuit-line',\n            interactive: false // Disable interaction on visible line, let hitbox handle it\n          };\n\n          const line = L.polyline([start, end], lineOptions);\n\n          // Add click handler to the hitbox line\n          hitboxLine.on('click', () => {\n            // Map visual segment index to logical hop index\n            const logicalHopIndex = visibleSegmentToHopIndex.get(i) ?? i;\n            const hop = circuitPathData.circuitHops[logicalHopIndex];\n\n            this.circuitSegmentClicked.emit({\n              circuit: circuit,\n              segment: {\n                index: logicalHopIndex,  // Use logical hop index for correct selection\n                total: circuitPathData.circuitHops.length,\n                from: hop?.from || routerNames[i],\n                to: hop?.to || routerNames[i + 1],\n                fromId: hop?.fromId || entityIds[i],\n                toId: hop?.toId || entityIds[i + 1],\n                fromType: hop?.fromType || entityTypes[i],\n                toType: hop?.toType || entityTypes[i + 1],\n                isVisible: hop?.isVisible ?? true,\n                fromHasLocation: hop?.fromHasLocation ?? true,\n                toHasLocation: hop?.toHasLocation ?? true\n              },\n              pathNodes: circuitPathData.pathNodes,\n              pathCoordinates: pathCoordinates,\n              routerNames: routerNames,\n              entityIds: entityIds,\n              entityTypes: entityTypes,\n              circuitHops: circuitPathData.circuitHops,\n              circuitRouters: circuitPathData.circuitRouters,\n              visibleSegmentToHopIndex: visibleSegmentToHopIndex\n            });\n          });\n\n          // Add lines to map if circuits are visible OR if a specific circuit is selected (override mode)\n          if (activeCircuitsVisible || isCircuitSelectionActive) {\n            hitboxLine.addTo(map); // Add hitbox first (behind)\n            line.addTo(map);        // Add visible line on top\n          }\n\n          // Track both lines for cleanup\n          this.activeCircuitLines.push(hitboxLine);\n          this.activeCircuitLines.push(line);\n        }\n      }\n    });\n\n    return newCircuitMarkerIds;\n  }\n\n  /**\n   * Updates visibility of router links\n   * @param map - Leaflet map instance\n   * @param linksVisible - Whether links should be visible\n   */\n  updateLinksVisibility(map: any, linksVisible: boolean): void {\n    this.circuitLines.forEach(line => {\n      if (linksVisible) {\n        line.addTo(map);\n      } else {\n        map.removeLayer(line);\n      }\n    });\n  }\n\n  /**\n   * Updates visibility of active circuits\n   * @param map - Leaflet map instance\n   * @param activeCircuitsVisible - Whether active circuits should be visible\n   */\n  updateActiveCircuitsVisibility(map: any, activeCircuitsVisible: boolean): void {\n    this.activeCircuitLines.forEach(line => {\n      if (activeCircuitsVisible) {\n        line.addTo(map);\n      } else {\n        map.removeLayer(line);\n      }\n    });\n  }\n\n  /**\n   * Clears all circuit and link lines from the map\n   * @param map - Leaflet map instance\n   */\n  clearAllLines(map: any): void {\n    this.circuitLines.forEach(line => map.removeLayer(line));\n    this.circuitLines = [];\n    this.activeCircuitLines.forEach(line => map.removeLayer(line));\n    this.activeCircuitLines = [];\n  }\n\n  /**\n   * Clears only active circuit lines from the map\n   * @param map - Leaflet map instance\n   */\n  clearActiveCircuitLines(map: any): void {\n    this.activeCircuitLines.forEach(line => map.removeLayer(line));\n    this.activeCircuitLines = [];\n  }\n\n  /**\n   * Clears only router link lines from the map\n   * @param map - Leaflet map instance\n   */\n  clearCircuitLines(map: any): void {\n    this.circuitLines.forEach(line => map.removeLayer(line));\n    this.circuitLines = [];\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n/**\n * Centralized state management service for the geolocate map component\n * Manages visibility toggles, filter state, side panel state, and entity locations\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class MapStateService {\n  // ========== Visibility Toggles ==========\n  private _clusteringEnabled$ = new BehaviorSubject<boolean>(true);\n  private _linksVisible$ = new BehaviorSubject<boolean>(false);\n  private _activeCircuitsVisible$ = new BehaviorSubject<boolean>(false);\n  private _routersVisible$ = new BehaviorSubject<boolean>(true);\n  private _identitiesVisible$ = new BehaviorSubject<boolean>(true);\n\n  // ========== Location Maps ==========\n  private _routerLocations = new Map<string, {lat: number, lng: number, name: string}>();\n  private _identityLocations = new Map<string, {lat: number, lng: number, name: string}>();\n\n  // ========== Router Type Tracking ==========\n  private _routerTypes = new Map<string, string>();\n\n  // ========== Side Panel State ==========\n  private _sidePanelOpen$ = new BehaviorSubject<boolean>(false);\n  private _sidePanelType$ = new BehaviorSubject<'marker' | 'link' | 'circuit' | 'unlocated' | 'entityList' | 'servicesWithCircuits' | null>(null);\n  private _sidePanelData$ = new BehaviorSubject<any>(null);\n  private _sidePanelCircuits$ = new BehaviorSubject<any[]>([]);\n  private _sidePanelWidth$ = new BehaviorSubject<number>(35); // in rem\n\n  // ========== Selected Circuit State ==========\n  private _selectedCircuit$ = new BehaviorSubject<any>(null);\n  private _selectedCircuitRouters$ = new BehaviorSubject<any[]>([]);\n  private _selectedCircuitSegment$ = new BehaviorSubject<any>(null);\n  private _selectedUnlocatedCircuit$ = new BehaviorSubject<any>(null);\n  private _selectedUnlocatedCircuitRouters$ = new BehaviorSubject<any[]>([]);\n\n  // ========== Filter State ==========\n  private _selectedServiceAttributes$ = new BehaviorSubject<any[]>([]);\n  private _selectedServiceNamedAttributes$ = new BehaviorSubject<any[]>([]);\n  private _selectedIdentityAttributes$ = new BehaviorSubject<any[]>([]);\n  private _selectedIdentityNamedAttributes$ = new BehaviorSubject<any[]>([]);\n  private _selectedRouterAttributes$ = new BehaviorSubject<any[]>([]);\n  private _selectedConnectionStatus$ = new BehaviorSubject<string>('all');\n  private _filtersApplied$ = new BehaviorSubject<boolean>(false);\n\n  // ========== Filter Dropdown State ==========\n  private _showServiceDropdown$ = new BehaviorSubject<boolean>(false);\n  private _showIdentityDropdown$ = new BehaviorSubject<boolean>(false);\n  private _showConnectionStatusFilterSelector$ = new BehaviorSubject<boolean>(false);\n\n  // ========== Public Observables ==========\n  clusteringEnabled$ = this._clusteringEnabled$.asObservable();\n  linksVisible$ = this._linksVisible$.asObservable();\n  activeCircuitsVisible$ = this._activeCircuitsVisible$.asObservable();\n  routersVisible$ = this._routersVisible$.asObservable();\n  identitiesVisible$ = this._identitiesVisible$.asObservable();\n\n  sidePanelOpen$ = this._sidePanelOpen$.asObservable();\n  sidePanelType$ = this._sidePanelType$.asObservable();\n  sidePanelData$ = this._sidePanelData$.asObservable();\n  sidePanelCircuits$ = this._sidePanelCircuits$.asObservable();\n  sidePanelWidth$ = this._sidePanelWidth$.asObservable();\n\n  selectedCircuit$ = this._selectedCircuit$.asObservable();\n  selectedCircuitRouters$ = this._selectedCircuitRouters$.asObservable();\n  selectedCircuitSegment$ = this._selectedCircuitSegment$.asObservable();\n  selectedUnlocatedCircuit$ = this._selectedUnlocatedCircuit$.asObservable();\n  selectedUnlocatedCircuitRouters$ = this._selectedUnlocatedCircuitRouters$.asObservable();\n\n  selectedServiceAttributes$ = this._selectedServiceAttributes$.asObservable();\n  selectedServiceNamedAttributes$ = this._selectedServiceNamedAttributes$.asObservable();\n  selectedIdentityAttributes$ = this._selectedIdentityAttributes$.asObservable();\n  selectedIdentityNamedAttributes$ = this._selectedIdentityNamedAttributes$.asObservable();\n  selectedRouterAttributes$ = this._selectedRouterAttributes$.asObservable();\n  selectedConnectionStatus$ = this._selectedConnectionStatus$.asObservable();\n  filtersApplied$ = this._filtersApplied$.asObservable();\n\n  showServiceDropdown$ = this._showServiceDropdown$.asObservable();\n  showIdentityDropdown$ = this._showIdentityDropdown$.asObservable();\n  showConnectionStatusFilterSelector$ = this._showConnectionStatusFilterSelector$.asObservable();\n\n  constructor() {}\n\n  // ========== Visibility Toggle Methods ==========\n  get clusteringEnabled(): boolean {\n    return this._clusteringEnabled$.value;\n  }\n\n  set clusteringEnabled(value: boolean) {\n    this._clusteringEnabled$.next(value);\n  }\n\n  toggleClustering(): void {\n    this.clusteringEnabled = !this.clusteringEnabled;\n  }\n\n  get linksVisible(): boolean {\n    return this._linksVisible$.value;\n  }\n\n  set linksVisible(value: boolean) {\n    this._linksVisible$.next(value);\n  }\n\n  toggleLinks(): void {\n    this.linksVisible = !this.linksVisible;\n  }\n\n  get activeCircuitsVisible(): boolean {\n    return this._activeCircuitsVisible$.value;\n  }\n\n  set activeCircuitsVisible(value: boolean) {\n    this._activeCircuitsVisible$.next(value);\n  }\n\n  toggleActiveCircuits(): void {\n    this.activeCircuitsVisible = !this.activeCircuitsVisible;\n  }\n\n  get routersVisible(): boolean {\n    return this._routersVisible$.value;\n  }\n\n  set routersVisible(value: boolean) {\n    this._routersVisible$.next(value);\n  }\n\n  toggleRouters(): void {\n    this.routersVisible = !this.routersVisible;\n  }\n\n  get identitiesVisible(): boolean {\n    return this._identitiesVisible$.value;\n  }\n\n  set identitiesVisible(value: boolean) {\n    this._identitiesVisible$.next(value);\n  }\n\n  toggleIdentities(): void {\n    this.identitiesVisible = !this.identitiesVisible;\n  }\n\n  // ========== Location Map Methods ==========\n  get routerLocations(): Map<string, {lat: number, lng: number, name: string}> {\n    return this._routerLocations;\n  }\n\n  setRouterLocation(id: string, location: {lat: number, lng: number, name: string}): void {\n    this._routerLocations.set(id, location);\n  }\n\n  removeRouterLocation(id: string): void {\n    this._routerLocations.delete(id);\n  }\n\n  clearRouterLocations(): void {\n    this._routerLocations.clear();\n  }\n\n  get identityLocations(): Map<string, {lat: number, lng: number, name: string}> {\n    return this._identityLocations;\n  }\n\n  setIdentityLocation(id: string, location: {lat: number, lng: number, name: string}): void {\n    this._identityLocations.set(id, location);\n  }\n\n  removeIdentityLocation(id: string): void {\n    this._identityLocations.delete(id);\n  }\n\n  clearIdentityLocations(): void {\n    this._identityLocations.clear();\n  }\n\n  // ========== Router Type Methods ==========\n  get routerTypes(): Map<string, string> {\n    return this._routerTypes;\n  }\n\n  setRouterTypes(routerTypes: Map<string, string>): void {\n    this._routerTypes = routerTypes;\n  }\n\n  getRouterType(id: string): string | undefined {\n    return this._routerTypes.get(id);\n  }\n\n  // ========== Side Panel Methods ==========\n  get sidePanelOpen(): boolean {\n    return this._sidePanelOpen$.value;\n  }\n\n  set sidePanelOpen(value: boolean) {\n    this._sidePanelOpen$.next(value);\n  }\n\n  get sidePanelType(): 'marker' | 'link' | 'circuit' | 'unlocated' | 'entityList' | 'servicesWithCircuits' | null {\n    return this._sidePanelType$.value;\n  }\n\n  set sidePanelType(value: 'marker' | 'link' | 'circuit' | 'unlocated' | 'entityList' | 'servicesWithCircuits' | null) {\n    this._sidePanelType$.next(value);\n  }\n\n  get sidePanelData(): any {\n    return this._sidePanelData$.value;\n  }\n\n  set sidePanelData(value: any) {\n    this._sidePanelData$.next(value);\n  }\n\n  get sidePanelCircuits(): any[] {\n    return this._sidePanelCircuits$.value;\n  }\n\n  set sidePanelCircuits(value: any[]) {\n    this._sidePanelCircuits$.next(value);\n  }\n\n  get sidePanelWidth(): number {\n    return this._sidePanelWidth$.value;\n  }\n\n  set sidePanelWidth(value: number) {\n    this._sidePanelWidth$.next(value);\n  }\n\n  openSidePanel(type: 'marker' | 'link' | 'circuit' | 'unlocated' | 'entityList' | 'servicesWithCircuits', data: any): void {\n    this.sidePanelType = type;\n    this.sidePanelData = data;\n    this.sidePanelOpen = true;\n  }\n\n  closeSidePanel(): void {\n    this.sidePanelOpen = false;\n    this.sidePanelType = null;\n    this.sidePanelData = null;\n  }\n\n  // ========== Selected Circuit Methods ==========\n  get selectedCircuit(): any {\n    return this._selectedCircuit$.value;\n  }\n\n  set selectedCircuit(value: any) {\n    this._selectedCircuit$.next(value);\n  }\n\n  get selectedCircuitRouters(): any[] {\n    return this._selectedCircuitRouters$.value;\n  }\n\n  set selectedCircuitRouters(value: any[]) {\n    this._selectedCircuitRouters$.next(value);\n  }\n\n  get selectedCircuitSegment(): any {\n    return this._selectedCircuitSegment$.value;\n  }\n\n  set selectedCircuitSegment(value: any) {\n    this._selectedCircuitSegment$.next(value);\n  }\n\n  get selectedUnlocatedCircuit(): any {\n    return this._selectedUnlocatedCircuit$.value;\n  }\n\n  set selectedUnlocatedCircuit(value: any) {\n    this._selectedUnlocatedCircuit$.next(value);\n  }\n\n  get selectedUnlocatedCircuitRouters(): any[] {\n    return this._selectedUnlocatedCircuitRouters$.value;\n  }\n\n  set selectedUnlocatedCircuitRouters(value: any[]) {\n    this._selectedUnlocatedCircuitRouters$.next(value);\n  }\n\n  clearSelectedCircuit(): void {\n    this.selectedCircuit = null;\n    this.selectedCircuitRouters = [];\n    this.selectedCircuitSegment = null;\n  }\n\n  clearSelectedUnlocatedCircuit(): void {\n    this.selectedUnlocatedCircuit = null;\n    this.selectedUnlocatedCircuitRouters = [];\n  }\n\n  isCircuitSelectionActive(): boolean {\n    return !!(this.selectedCircuit || this.selectedUnlocatedCircuit);\n  }\n\n  // ========== Filter Methods ==========\n  get selectedServiceAttributes(): any[] {\n    return this._selectedServiceAttributes$.value;\n  }\n\n  set selectedServiceAttributes(value: any[]) {\n    this._selectedServiceAttributes$.next(value);\n  }\n\n  get selectedServiceNamedAttributes(): any[] {\n    return this._selectedServiceNamedAttributes$.value;\n  }\n\n  set selectedServiceNamedAttributes(value: any[]) {\n    this._selectedServiceNamedAttributes$.next(value);\n  }\n\n  get selectedIdentityAttributes(): any[] {\n    return this._selectedIdentityAttributes$.value;\n  }\n\n  set selectedIdentityAttributes(value: any[]) {\n    this._selectedIdentityAttributes$.next(value);\n  }\n\n  get selectedIdentityNamedAttributes(): any[] {\n    return this._selectedIdentityNamedAttributes$.value;\n  }\n\n  set selectedIdentityNamedAttributes(value: any[]) {\n    this._selectedIdentityNamedAttributes$.next(value);\n  }\n\n  get selectedRouterAttributes(): any[] {\n    return this._selectedRouterAttributes$.value;\n  }\n\n  set selectedRouterAttributes(value: any[]) {\n    this._selectedRouterAttributes$.next(value);\n  }\n\n  get selectedConnectionStatus(): string {\n    return this._selectedConnectionStatus$.value;\n  }\n\n  set selectedConnectionStatus(value: string) {\n    this._selectedConnectionStatus$.next(value);\n  }\n\n  get filtersApplied(): boolean {\n    return this._filtersApplied$.value;\n  }\n\n  set filtersApplied(value: boolean) {\n    this._filtersApplied$.next(value);\n  }\n\n  clearAllFilters(): void {\n    this.selectedServiceAttributes = [];\n    this.selectedServiceNamedAttributes = [];\n    this.selectedIdentityAttributes = [];\n    this.selectedIdentityNamedAttributes = [];\n    this.selectedRouterAttributes = [];\n    this.selectedConnectionStatus = 'all';\n    this.filtersApplied = false;\n  }\n\n  hasActiveFilters(): boolean {\n    return this.selectedServiceAttributes.length > 0 ||\n           this.selectedServiceNamedAttributes.length > 0 ||\n           this.selectedIdentityAttributes.length > 0 ||\n           this.selectedIdentityNamedAttributes.length > 0 ||\n           this.selectedRouterAttributes.length > 0 ||\n           this.selectedConnectionStatus !== 'all';\n  }\n\n  // ========== Filter Dropdown Methods ==========\n  get showServiceDropdown(): boolean {\n    return this._showServiceDropdown$.value;\n  }\n\n  set showServiceDropdown(value: boolean) {\n    this._showServiceDropdown$.next(value);\n  }\n\n  get showIdentityDropdown(): boolean {\n    return this._showIdentityDropdown$.value;\n  }\n\n  set showIdentityDropdown(value: boolean) {\n    this._showIdentityDropdown$.next(value);\n  }\n\n  get showConnectionStatusFilterSelector(): boolean {\n    return this._showConnectionStatusFilterSelector$.value;\n  }\n\n  set showConnectionStatusFilterSelector(value: boolean) {\n    this._showConnectionStatusFilterSelector$.next(value);\n  }\n\n  closeAllDropdowns(): void {\n    this.showServiceDropdown = false;\n    this.showIdentityDropdown = false;\n    this.showConnectionStatusFilterSelector = false;\n  }\n\n  // ========== Utility Methods ==========\n  /**\n   * Resets all state to initial values\n   */\n  resetState(): void {\n    this.clusteringEnabled = true;\n    this.linksVisible = false;\n    this.activeCircuitsVisible = false;\n    this.routersVisible = true;\n    this.identitiesVisible = true;\n\n    this.clearRouterLocations();\n    this.clearIdentityLocations();\n    this._routerTypes.clear();\n\n    this.closeSidePanel();\n    this.sidePanelCircuits = [];\n    this.sidePanelWidth = 35;\n\n    this.clearSelectedCircuit();\n    this.clearSelectedUnlocatedCircuit();\n\n    this.clearAllFilters();\n    this.closeAllDropdowns();\n  }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n  selector: 'lib-map-legend',\n  templateUrl: './map-legend.component.html',\n  styleUrls: ['./map-legend.component.scss'],\n  standalone: false\n})\nexport class MapLegendComponent {\n  @Input() routersVisible: boolean = true;\n  @Input() identitiesVisible: boolean = true;\n  @Input() linksVisible: boolean = false;\n  @Input() activeCircuitsVisible: boolean = false;\n  @Input() clusteringEnabled: boolean = true;\n  @Input() isCircuitSelectionActive: boolean = false;\n\n  @Output() routersToggled = new EventEmitter<void>();\n  @Output() identitiesToggled = new EventEmitter<void>();\n  @Output() linksToggled = new EventEmitter<void>();\n  @Output() activeCircuitsToggled = new EventEmitter<void>();\n  @Output() clusteringToggled = new EventEmitter<void>();\n}\n","<div class=\"map-legend\">\n  <div class=\"legend-title\">Legend</div>\n  <div class=\"legend-item router-item\">\n    <div class=\"legend-icon icon-routers\"></div>\n    <label>Routers</label>\n    <div\n      class=\"tSelect\"\n      [class.selected]=\"routersVisible\"\n      (click)=\"routersToggled.emit()\"\n    ></div>\n  </div>\n  <div class=\"legend-item entity-item identity-item\">\n    <div class=\"legend-icon icon-identity\"></div>\n    <label class=\"legend-label\">Identities</label>\n    <div\n      class=\"tSelect\"\n      [class.selected]=\"identitiesVisible\"\n      (click)=\"identitiesToggled.emit()\"\n    ></div>\n  </div>\n  <div class=\"legend-item\" *ngIf=\"false\">\n    <div\n      class=\"tSelect\"\n      [class.selected]=\"clusteringEnabled\"\n      (click)=\"clusteringToggled.emit()\"\n    ></div>\n    <label>Enable Clustering</label>\n  </div>\n  <div class=\"legend-item\">\n    <div class=\"legend-line-sample link-sample\"></div>\n    <label>Router Links</label>\n    <div\n      class=\"tSelect\"\n      [class.selected]=\"linksVisible\"\n      (click)=\"linksToggled.emit()\"\n    ></div>\n  </div>\n  <div class=\"legend-item\">\n    <div class=\"legend-line-sample circuit-sample\"></div>\n    <label>Active Services</label>\n    <div\n      class=\"tSelect\"\n      [class.selected]=\"activeCircuitsVisible\"\n      [class.indeterminate]=\"isCircuitSelectionActive\"\n      (click)=\"activeCircuitsToggled.emit()\"\n    ></div>\n  </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n  selector: 'lib-entity-count-legend',\n  templateUrl: './entity-count-legend.component.html',\n  styleUrls: ['./entity-count-legend.component.scss'],\n  standalone: false\n})\nexport class EntityCountLegendComponent {\n  @Input() geolocatedIdentities: number = 0;\n  @Input() unlocatedIdentities: number = 0;\n  @Input() geolocatedRouters: number = 0;\n  @Input() unlocatedRouters: number = 0;\n  @Input() totalServices: number = 0;\n  @Input() servicesWithActiveCircuits: number = 0;\n  @Input() totalActiveCircuits: number = 0;\n\n  @Output() showLocatedIdentitiesClicked = new EventEmitter<void>();\n  @Output() showUnlocatedIdentitiesClicked = new EventEmitter<void>();\n  @Output() showLocatedRoutersClicked = new EventEmitter<void>();\n  @Output() showUnlocatedRoutersClicked = new EventEmitter<void>();\n  @Output() showAllServicesClicked = new EventEmitter<void>();\n  @Output() showServicesWithActiveCircuitsClicked = new EventEmitter<void>();\n\n  get totalIdentities(): number {\n    return this.geolocatedIdentities + this.unlocatedIdentities;\n  }\n\n  get totalRouters(): number {\n    return this.geolocatedRouters + this.unlocatedRouters;\n  }\n}\n","<div class=\"entity-count-legend\">\n  <div class=\"entity-chip identity-chip\" (click)=\"showLocatedIdentitiesClicked.emit()\">\n    <div class=\"entity-icon entity-identity\"></div>\n    <div class=\"entity-count\">{{totalIdentities}}</div>\n    <div class=\"entity-label\">Identities</div>\n  </div>\n  <div class=\"chip-separator\"></div>\n  <div class=\"entity-chip router-chip\" (click)=\"showLocatedRoutersClicked.emit()\">\n    <div class=\"entity-icon entity-router\"></div>\n    <div class=\"entity-count\">{{totalRouters}}</div>\n    <div class=\"entity-label\">Routers</div>\n  </div>\n  <div class=\"chip-separator\"></div>\n  <div class=\"entity-chip service-chip\" (click)=\"showAllServicesClicked.emit()\">\n    <div class=\"entity-icon icon-services\"></div>\n    <div class=\"entity-count\">{{totalServices}}</div>\n    <div class=\"entity-label\">Services</div>\n  </div>\n</div>\n","import { Component, EventEmitter, Input, Output, ViewChild, OnChanges, SimpleChanges, ChangeDetectorRef } from '@angular/core';\n\n@Component({\n  selector: 'lib-geolocate-filter-bar',\n  templateUrl: './filter-bar.component.html',\n  styleUrls: ['./filter-bar.component.scss'],\n  standalone: false\n})\nexport class GeolocateFilterBarComponent implements OnChanges {\n  @Input() selectedRouterAttributes: any[] = [];\n  @Input() selectedIdentityAttributes: any[] = [];\n  @Input() selectedIdentityNamedAttributes: any[] = [];\n  @Input() selectedServiceAttributes: any[] = [];\n  @Input() selectedServiceNamedAttributes: any[] = [];\n  @Input() selectedConnectionStatus: string = 'all';\n  @Input() routerRoleAttributes: any[] = [];\n  @Input() identityRoleAttributes: any[] = [];\n  @Input() identityNamedAttributes: any[] = [];\n  @Input() serviceRoleAttributes: any[] = [];\n  @Input() serviceNamedAttributes: any[] = [];\n  @Input() filtersApplied: boolean = false;\n  @Input() showRouterFilterSelector: boolean = false;\n  @Input() showIdentityFilterSelector: boolean = false;\n  @Input() showServiceFilterSelector: boolean = false;\n  @Input() showConnectionStatusFilterSelector: boolean = false;\n\n  @Output() routerFilterClicked = new EventEmitter<Event>();\n  @Output() identityFilterClicked = new EventEmitter<Event>();\n  @Output() serviceFilterClicked = new EventEmitter<Event>();\n  @Output() connectionStatusFilterClicked = new EventEmitter<Event>();\n  @Output() routerFilterClosed = new EventEmitter<Event>();\n  @Output() identityFilterClosed = new EventEmitter<Event>();\n  @Output() serviceFilterClosed = new EventEmitter<Event>();\n  @Output() connectionStatusFilterClosed = new EventEmitter<Event>();\n  @Output() routerRoleAttributesChanged = new EventEmitter<any>();\n  @Output() identityNamedAttributesChanged = new EventEmitter<any>();\n  @Output() identityRoleAttributesChanged = new EventEmitter<any>();\n  @Output() serviceNamedAttributesChanged = new EventEmitter<any>();\n  @Output() serviceRoleAttributesChanged = new EventEmitter<any>();\n  @Output() connectionStatusChanged = new EventEmitter<any>();\n  @Output() identityFilterChanged = new EventEmitter<any>();\n  @Output() serviceFilterChanged = new EventEmitter<any>();\n  @Output() clearFiltersClicked = new EventEmitter<Event>();\n  @Output() selectedRouterAttributesChange = new EventEmitter<any[]>();\n  @Output() selectedIdentityAttributesChange = new EventEmitter<any[]>();\n  @Output() selectedIdentityNamedAttributesChange = new EventEmitter<any[]>();\n  @Output() selectedServiceAttributesChange = new EventEmitter<any[]>();\n  @Output() selectedServiceNamedAttributesChange = new EventEmitter<any[]>();\n  @Output() selectedConnectionStatusChange = new EventEmitter<string>();\n\n  @ViewChild('routerFilterSelector') routerFilterSelector: any;\n  @ViewChild('identityFilterSelector') identityFilterSelector: any;\n  @ViewChild('serviceFilterSelector') serviceFilterSelector: any;\n  @ViewChild('connectionStatusFilterSelector') connectionStatusFilterSelector: any;\n\n  constructor(private cdr: ChangeDetectorRef) {}\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['filtersApplied']) {\n      // Force change detection to update the *ngIf directive\n      this.cdr.detectChanges();\n    }\n  }\n}\n","<div class=\"dashboard-filters-container\">\n  <div class=\"left-side-filters\">\n    <div class=\"map-filters\">\n      <div class=\"dashboard-multi-filter\" (click)=\"routerFilterClicked.emit($event)\" [ngClass]=\"{'filter-open': showRouterFilterSelector, 'filter-applied': selectedRouterAttributes.length > 0}\">\n        <span class=\"dashboard-multi-title\">{{selectedRouterAttributes.length > 0 ? '(' + selectedRouterAttributes.length + ') ' : ''}}Routers</span>\n        <div class=\"expand-collapse-icon icon-RightPage\"></div>\n        <div class=\"filter-dropdown\"  *ngIf=\"showRouterFilterSelector\" (clickOutside)=\"routerFilterClosed.emit($event)\">\n          <lib-tag-selector\n            [(selectedRoleAttributes)]=\"selectedRouterAttributes\"\n            (selectedRoleAttributesChange)=\"routerRoleAttributesChanged.emit($event); selectedRouterAttributesChange.emit($event)\"\n            [availableRoleAttributes]=\"routerRoleAttributes\"\n            [placeholder]=\"'Add attributes to group Routers'\"\n            #routerFilterSelector\n          ></lib-tag-selector>\n        </div>\n      </div>\n      <div class=\"dashboard-multi-filter\" (click)=\"identityFilterClicked.emit($event)\" [ngClass]=\"{'filter-open': showIdentityFilterSelector, 'filter-applied': selectedIdentityAttributes.length > 0 || selectedIdentityNamedAttributes.length > 0}\">\n        <span class=\"dashboard-multi-title\">{{(selectedIdentityAttributes.length + selectedIdentityNamedAttributes.length) > 0 ? '(' + (selectedIdentityAttributes.length + selectedIdentityNamedAttributes.length) + ') ' : ''}}Identities</span>\n        <div class=\"expand-collapse-icon icon-RightPage\"></div>\n        <div class=\"filter-dropdown\"  *ngIf=\"showIdentityFilterSelector\" (clickOutside)=\"identityFilterClosed.emit($event)\">\n          <lib-tag-selector\n            [(selectedNamedAttributes)]=\"selectedIdentityNamedAttributes\"\n            [(selectedRoleAttributes)]=\"selectedIdentityAttributes\"\n            (selectedNamedAttributesChange)=\"identityNamedAttributesChanged.emit($event); selectedIdentityNamedAttributesChange.emit($event)\"\n            (selectedRoleAttributesChange)=\"identityRoleAttributesChanged.emit($event); selectedIdentityAttributesChange.emit($event)\"\n            [availableNamedAttributes]=\"identityNamedAttributes\"\n            [availableRoleAttributes]=\"identityRoleAttributes\"\n            [placeholder]=\"'Select identity attributes'\"\n            (filterChange)=\"identityFilterChanged.emit($event)\"\n            #identityFilterSelector\n          ></lib-tag-selector>\n        </div>\n      </div>\n      <div class=\"dashboard-multi-filter\" (click)=\"serviceFilterClicked.emit($event)\" [ngClass]=\"{'filter-open': showServiceFilterSelector, 'filter-applied': selectedServiceAttributes.length > 0 || selectedServiceNamedAttributes.length > 0}\">\n        <span class=\"dashboard-multi-title\">{{(selectedServiceAttributes.length + selectedServiceNamedAttributes.length) > 0 ? '(' + (selectedServiceAttributes.length + selectedServiceNamedAttributes.length) + ') ' : ''}}Services</span>\n        <div class=\"expand-collapse-icon icon-RightPage\"></div>\n        <div class=\"filter-dropdown\"  *ngIf=\"showServiceFilterSelector\" (clickOutside)=\"serviceFilterClosed.emit($event)\">\n          <lib-tag-selector\n            [(selectedNamedAttributes)]=\"selectedServiceNamedAttributes\"\n            [(selectedRoleAttributes)]=\"selectedServiceAttributes\"\n            (selectedNamedAttributesChange)=\"serviceNamedAttributesChanged.emit($event); selectedServiceNamedAttributesChange.emit($event)\"\n            (selectedRoleAttributesChange)=\"serviceRoleAttributesChanged.emit($event); selectedServiceAttributesChange.emit($event)\"\n            [availableNamedAttributes]=\"serviceNamedAttributes\"\n            [availableRoleAttributes]=\"serviceRoleAttributes\"\n            [placeholder]=\"'Select service attributes'\"\n            (filterChange)=\"serviceFilterChanged.emit($event)\"\n            #serviceFilterSelector\n          ></lib-tag-selector>\n        </div>\n      </div>\n      <div class=\"dashboard-multi-filter\" (click)=\"connectionStatusFilterClicked.emit($event)\" [ngClass]=\"{'filter-open': showConnectionStatusFilterSelector, 'filter-applied': selectedConnectionStatus !== 'all'}\">\n        <span class=\"dashboard-multi-title\">Connection Status</span>\n        <div class=\"expand-collapse-icon icon-RightPage\"></div>\n        <div class=\"filter-dropdown connection-status-dropdown\" *ngIf=\"showConnectionStatusFilterSelector\" (clickOutside)=\"connectionStatusFilterClosed.emit($event)\">\n          <select [(ngModel)]=\"selectedConnectionStatus\" (change)=\"selectedConnectionStatusChange.emit(selectedConnectionStatus); connectionStatusChanged.emit(selectedConnectionStatus)\" class=\"connection-status-select form-field-dropdown\" #connectionStatusFilterSelector>\n            <option value=\"all\">All</option>\n            <option value=\"online\">Online</option>\n            <option value=\"offline\">Offline</option>\n          </select>\n        </div>\n      </div>\n      <div class=\"dashboard-filter-actions\">\n        <div *ngIf=\"filtersApplied\" class=\"add-filter-container clear-rule-filters\" (click)=\"clearFiltersClicked.emit($event)\" [ngClass]=\"{'filters-added': filtersApplied}\">\n          <div class=\"icon-HamburgerAppClose\"></div>\n          <span class=\"add-icon-label\">Clear Filters</span>\n        </div>\n      </div>\n    </div>\n  </div>\n  <div class=\"right-side-stats\">\n    <ng-content></ng-content>\n  </div>\n</div>\n","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\nimport { CircuitCalculationService } from '../../services/circuit-calculation.service';\n\ninterface ServiceGroup {\n  serviceName: string;\n  serviceId: string;\n  circuits: any[];\n  expanded: boolean;\n  sortBy?: 'created';\n  sortDirection?: 'asc' | 'desc';\n}\n\n@Component({\n  selector: 'lib-marker-panel',\n  templateUrl: './marker-panel.component.html',\n  styleUrls: ['./marker-panel.component.scss'],\n  standalone: false\n})\nexport class MarkerPanelComponent implements OnChanges {\n  @Input() markerData: any = null;\n  @Input() circuits: any[] = [];\n  @Input() selectedCircuit: any = null;\n  @Input() selectedCircuitRouters: any[] = [];\n  @Input() selectedRouterInPath: string | null = null;\n  @Input() allIdentities: any[] = [];\n  @Input() allRouters: any[] = [];\n  @Input() allTerminators: any[] = [];\n\n  @Output() circuitSelected = new EventEmitter<any>();\n  @Output() routerInPathSelected = new EventEmitter<{routerId: string, routerType: string}>();\n  @Output() saveLocationChanges = new EventEmitter<{item: any, type: string}>();\n  @Output() navigateToDetails = new EventEmitter<{type: string, id: string}>();\n  @Output() circuitPreviewOpened = new EventEmitter<any>();\n  @Output() roleAttributeNavigated = new EventEmitter<string>();\n  @Output() panelClosed = new EventEmitter<void>();\n\n  // Service grouping\n  serviceGroups: ServiceGroup[] = [];\n\n  constructor(private circuitCalculationService: CircuitCalculationService) {}\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['circuits']) {\n      this.updateServiceGroups();\n    }\n  }\n\n  /**\n   * Get entity online status\n   */\n  getEntityOnlineStatus(entity: any): boolean {\n    if (!entity) return false;\n    // For routers, check 'connected' property\n    if (entity.connected !== undefined) {\n      return entity.connected === true;\n    }\n    // For identities, check 'isOnline' property\n    if (entity.isOnline !== undefined) {\n      return entity.isOnline === true;\n    }\n    return false;\n  }\n\n  /**\n   * Check if entity has unsaved location changes\n   */\n  hasUnsavedLocationChanges(item: any): boolean {\n    if (!item || !item._unsavedLocation) return false;\n    return true;\n  }\n\n  /**\n   * Select a circuit\n   */\n  onCircuitSelect(circuit: any, event?: MouseEvent): void {\n    if (event) {\n      event.stopPropagation();\n    }\n    this.circuitSelected.emit(circuit);\n  }\n\n  /**\n   * Open circuit preview (detail view)\n   */\n  onCircuitPreviewOpen(circuit: any, event: MouseEvent): void {\n    event.stopPropagation();\n    this.circuitPreviewOpened.emit(circuit);\n  }\n\n  /**\n   * Select a router in the circuit path\n   */\n  onRouterInPathSelect(routerId: string, routerType: string): void {\n    this.routerInPathSelected.emit({ routerId, routerType });\n  }\n\n  /**\n   * Save location changes for the entity\n   */\n  onSaveLocationChanges(): void {\n    this.saveLocationChanges.emit({\n      item: this.markerData?.item,\n      type: this.markerData?.type\n    });\n  }\n\n  /**\n   * Navigate to entity details page\n   */\n  onNavigateToDetails(): void {\n    this.navigateToDetails.emit({\n      type: this.markerData?.type,\n      id: this.markerData?.item?.id\n    });\n  }\n\n  /**\n   * Close the marker panel\n   */\n  onCancel(): void {\n    this.panelClosed.emit();\n  }\n\n  /**\n   * Navigate to role attribute\n   */\n  onRoleAttributeClick(role: string): void {\n    this.roleAttributeNavigated.emit(role);\n  }\n\n  /**\n   * Update service groups - group circuits by service and apply filtering\n   */\n  updateServiceGroups(): void {\n    let processed = [...this.circuits];\n\n    // Pre-compute client/host info for all circuits to avoid repeated computation in templates\n    processed.forEach(circuit => {\n      if (!circuit._clientInfo) {\n        circuit._clientInfo = this.computeClientInfo(circuit);\n      }\n      if (!circuit._hostInfo) {\n        circuit._hostInfo = this.computeHostInfo(circuit);\n      }\n    });\n\n    // Group circuits by service\n    const serviceMap = new Map<string, ServiceGroup>();\n\n    processed.forEach(circuit => {\n      const serviceId = circuit.service?.id || 'unknown';\n      const serviceName = circuit.service?.name || 'Unknown Service';\n\n      if (!serviceMap.has(serviceId)) {\n        serviceMap.set(serviceId, {\n          serviceName,\n          serviceId,\n          circuits: [],\n          expanded: false\n        });\n      }\n\n      serviceMap.get(serviceId)!.circuits.push(circuit);\n    });\n\n    // Convert to array and sort by service name\n    this.serviceGroups = Array.from(serviceMap.values()).sort((a, b) =>\n      a.serviceName.localeCompare(b.serviceName)\n    );\n  }\n\n  /**\n   * Toggle service group expansion\n   */\n  toggleGroup(group: ServiceGroup, event?: Event): void {\n    if (event) {\n      event.stopPropagation();\n    }\n    group.expanded = !group.expanded;\n  }\n\n  /**\n   * Toggle sort for a service group\n   */\n  toggleSort(group: ServiceGroup): void {\n    if (group.sortBy === 'created') {\n      group.sortDirection = group.sortDirection === 'asc' ? 'desc' : 'asc';\n    } else {\n      group.sortBy = 'created';\n      group.sortDirection = 'desc';\n    }\n  }\n\n  /**\n   * Get entity name and type from ID\n   */\n  getEntityInfo(entityId: string): { name: string; type: 'identity' | 'router' } {\n    // Try to find in identities first\n    const identity = this.allIdentities.find(i => i.id === entityId);\n    if (identity) {\n      // Check if this identity is a router type\n      const type = identity.typeId === 'Router' ? 'router' : 'identity';\n      return { name: identity.name || entityId, type };\n    }\n\n    // Try to find in routers\n    const router = this.allRouters.find(r => r.id === entityId);\n    if (router) {\n      return { name: router.name || entityId, type: 'router' };\n    }\n\n    // Unknown entity\n    return { name: entityId, type: 'identity' };\n  }\n\n  /**\n   * Compute client entity info from circuit (called once during data processing)\n   */\n  private computeClientInfo(circuit: any): { name: string; type: 'identity' | 'router' } {\n    // Try to get client ID from various circuit fields\n    // Note: Fabric API circuits typically don't include client identity information\n    const clientId = (circuit.tags?.clientId && circuit.tags.clientId.trim()) ||\n                     circuit.clientId ||\n                     circuit.client?.id ||\n                     circuit.sourceId ||\n                     circuit.initiator?.id ||\n                     null;\n\n    if (!clientId) {\n      // Client identity is not available from Fabric API circuit data\n      // This is expected behavior - the Fabric API doesn't track client identities\n      return { name: 'N/A', type: 'identity' };\n    }\n\n    return this.getEntityInfo(clientId);\n  }\n\n  /**\n   * Compute host entity info from circuit (called once during data processing)\n   */\n  private computeHostInfo(circuit: any): { name: string; type: 'identity' | 'router' } {\n    // Use CircuitCalculationService to find host identity from terminators\n    let hostId = this.circuitCalculationService.findHostIdentityId(circuit, this.allTerminators);\n\n    // Fallback to checking circuit fields directly\n    if (!hostId) {\n      hostId = (circuit.tags?.hostId && circuit.tags.hostId.trim()) ||\n               circuit.hostId ||\n               circuit.host?.id ||\n               null;\n    }\n\n    if (!hostId) {\n      // No host identity found - check if this is a router-hosted terminator\n      const terminatorIdFromCircuit = circuit.terminator?.id || circuit.terminatorId;\n      const matchingTerminator = this.allTerminators.find(t => t.id === terminatorIdFromCircuit);\n\n      if (matchingTerminator) {\n        // Check if terminator has a router - router-hosted services have empty identity field\n        const routerId = matchingTerminator.routerId || matchingTerminator.router?.id;\n        if (routerId) {\n          // This is a router-hosted terminator - return the router as the host\n          const router = this.allRouters.find(r => r.id === routerId);\n          if (router) {\n            return { name: router.name || routerId, type: 'router' };\n          }\n          return { name: routerId, type: 'router' };\n        }\n      }\n\n      return { name: 'Unknown', type: 'identity' };\n    }\n\n    return this.getEntityInfo(hostId);\n  }\n\n  /**\n   * Get cached client entity info from circuit (used in templates)\n   */\n  getClientInfo(circuit: any): { name: string; type: 'identity' | 'router' } {\n    return circuit._clientInfo || this.computeClientInfo(circuit);\n  }\n\n  /**\n   * Get cached host entity info from circuit (used in templates)\n   */\n  getHostInfo(circuit: any): { name: string; type: 'identity' | 'router' } {\n    return circuit._hostInfo || this.computeHostInfo(circuit);\n  }\n\n  /**\n   * Get sorted circuits for a group - dual sort with created date as primary when active\n   */\n  getSortedCircuits(group: ServiceGroup): any[] {\n    return [...group.circuits].sort((a, b) => {\n      // If created sort is active, use it as primary sort\n      if (group.sortBy === 'created') {\n        const dateA = new Date(a.createdAt || 0).getTime();\n        const dateB = new Date(b.createdAt || 0).getTime();\n        const dateCompare = group.sortDirection === 'asc' ? dateA - dateB : dateB - dateA;\n\n        if (dateCompare !== 0) {\n          return dateCompare;\n        }\n\n        // If dates are the same, sort by client name as secondary\n        const clientA = this.getClientInfo(a).name.toLowerCase();\n        const clientB = this.getClientInfo(b).name.toLowerCase();\n        return clientA.localeCompare(clientB);\n      }\n\n      // Default: sort by client name first, then by created date\n      const clientA = this.getClientInfo(a).name.toLowerCase();\n      const clientB = this.getClientInfo(b).name.toLowerCase();\n      const clientCompare = clientA.localeCompare(clientB);\n\n      if (clientCompare !== 0) {\n        return clientCompare;\n      }\n\n      // If client names are the same, sort by created date (descending)\n      const dateA = new Date(a.createdAt || 0).getTime();\n      const dateB = new Date(b.createdAt || 0).getTime();\n      return dateB - dateA;\n    });\n  }\n}\n","<div class=\"entity-details-panel\" *ngIf=\"markerData\"\n     [class.marker-identity]=\"markerData?.type === 'identity'\"\n     [class.marker-router]=\"markerData?.type === 'routers'\"\n     [class.marker-service]=\"markerData?.type === 'services'\">\n  <div class=\"details-section\">\n    <table class=\"details-table\">\n    <tr>\n      <td class=\"popup-label\">Type:</td>\n      <td class=\"popup-value\">\n        {{ markerData?.type === 'identity' ? 'Identity' : markerData?.type === 'services' ? 'Service' : 'Router' }}\n      </td>\n    </tr>\n    <tr *ngIf=\"markerData?.type !== 'services' && (markerData?.item?.isOnline !== undefined || markerData?.item?.connected !== undefined)\">\n      <td class=\"popup-label\">Status:</td>\n      <td class=\"popup-value\">\n        <span [class]=\"getEntityOnlineStatus(markerData?.item) ? 'status-online' : 'status-offline'\">\n          {{ getEntityOnlineStatus(markerData?.item) ? 'Online' : 'Offline' }}\n        </span>\n      </td>\n    </tr>\n    <tr *ngIf=\"markerData?.type === 'identity' && markerData?.item?.edgeRouterConnectionStatus\">\n      <td class=\"popup-label\">Status:</td>\n      <td class=\"popup-value\">\n        <span [class]=\"markerData?.item?.edgeRouterConnectionStatus === 'online' ? 'status-online' : 'status-offline'\">\n          {{ markerData?.item?.edgeRouterConnectionStatus === 'online' ? 'Connected' : 'Disconnected' }}\n        </span>\n      </td>\n    </tr>\n    <tr>\n      <td class=\"popup-label\">Name:</td>\n      <td class=\"popup-value\">{{ markerData?.item?.name || 'N/A' }}</td>\n    </tr>\n    <tr *ngIf=\"markerData?.item?.id\">\n      <td class=\"popup-label\">ID:</td>\n      <td class=\"popup-value popup-id\">{{ markerData?.item?.id }}</td>\n    </tr>\n    <tr *ngIf=\"markerData?.location && markerData?.type !== 'services'\">\n      <td class=\"popup-label\">Location:</td>\n      <td class=\"popup-value popup-location\" [class.location-modified]=\"hasUnsavedLocationChanges(markerData?.item)\">\n        {{ markerData?.location?.lat?.toFixed(4) }}, {{ markerData?.location?.lng?.toFixed(4) }}\n        <span *ngIf=\"hasUnsavedLocationChanges(markerData?.item)\" class=\"modified-indicator\">*</span>\n      </td>\n    </tr>\n    <tr>\n      <td class=\"popup-label\">Role Attributes:</td>\n      <td class=\"popup-value popup-roles\">\n        <span *ngIf=\"markerData?.item?.roleAttributes && markerData?.item?.roleAttributes?.length > 0\">\n          <span *ngFor=\"let role of markerData?.item?.roleAttributes\" class=\"popup-hashtag\" (click)=\"onRoleAttributeClick(role)\">\n            #{{ role }}\n          </span>\n        </span>\n        <span *ngIf=\"!markerData?.item?.roleAttributes || markerData?.item?.roleAttributes?.length === 0\" class=\"no-attributes\">\n          No attributes assigned\n        </span>\n      </td>\n    </tr>\n    </table>\n  </div>\n\n  <!-- Active Services Section -->\n  <div class=\"circuits-section\" *ngIf=\"circuits.length > 0\">\n    <div class=\"circuits-container\">\n      <div class=\"circuits-header\">\n        <span class=\"circuits-header-icon icon-services\"></span>\n        <span class=\"circuits-header-text\">Active Services ({{ serviceGroups.length }})</span>\n      </div>\n      <div class=\"circuits-list\">\n        <table class=\"circuits-table tree-table\">\n          <colgroup>\n            <col style=\"width: 30px;\">  <!-- Indent -->\n            <col>                        <!-- Client - flexible -->\n            <col>                        <!-- Host - flexible -->\n            <col style=\"width: 120px;\">  <!-- Created -->\n            <col style=\"width: 26px;\">   <!-- Action -->\n          </colgroup>\n          <thead>\n            <tr>\n              <th colspan=\"5\" class=\"service-column\">Service Name</th>\n            </tr>\n          </thead>\n          <tbody>\n            <ng-container *ngFor=\"let group of serviceGroups\">\n              <!-- Service Group Row -->\n              <tr class=\"group-row clickable-row\" (click)=\"toggleGroup(group, $event)\">\n                <td class=\"expand-cell\">\n                  <span class=\"expand-icon icon-RightPage\" [class.expanded]=\"group.expanded\"></span>\n                </td>\n                <td colspan=\"4\" class=\"service-name\">\n                  <span class=\"icon-Services group-icon\"></span>\n                  <span class=\"service-text\">{{ group.serviceName }}</span>\n                  <span class=\"circuit-count\">({{ group.circuits.length }})</span>\n                </td>\n              </tr>\n\n              <!-- Circuit Rows (shown when expanded) -->\n              <ng-container *ngIf=\"group.expanded\">\n                <!-- Subheader Row -->\n                <tr class=\"subheader-row\">\n                  <th class=\"subheader-indent\"></th>\n                  <th class=\"subheader-cell\">Client</th>\n                  <th class=\"subheader-cell\">Host</th>\n                  <th class=\"subheader-cell sortable-header\" (click)=\"toggleSort(group)\">\n                    Created\n                    <span class=\"sort-indicator\" *ngIf=\"group.sortBy === 'created'\">\n                      {{ group.sortDirection === 'asc' ? '▲' : '▼' }}\n                    </span>\n                  </th>\n                  <th class=\"subheader-cell\"></th>\n                </tr>\n\n                <!-- Circuit Data Rows -->\n                <tr *ngFor=\"let circuit of getSortedCircuits(group)\"\n                    (click)=\"onCircuitSelect(circuit, $event)\"\n                    [class.selected-row]=\"selectedCircuit?.id === circuit.id\"\n                    class=\"circuit-row clickable-row\">\n                  <td class=\"circuit-indent\"></td>\n                  <td class=\"circuit-entity\">\n                    <span [class]=\"getClientInfo(circuit).type === 'identity' ? 'icon-identity entity-icon' : 'icon-routers entity-icon'\"></span>\n                    <span class=\"entity-name\">{{ getClientInfo(circuit).name }}</span>\n                  </td>\n                  <td class=\"circuit-entity\">\n                    <span [class]=\"getHostInfo(circuit).type === 'identity' ? 'icon-identity entity-icon' : 'icon-routers entity-icon'\"></span>\n                    <span class=\"entity-name\">{{ getHostInfo(circuit).name }}</span>\n                  </td>\n                  <td class=\"circuit-created\">\n                    {{ circuit.createdAt | date:'short' }}\n                  </td>\n                  <td class=\"action-column\">\n                    <span class=\"circuit-nav-icon icon-Share-RBAC\" (click)=\"onCircuitPreviewOpen(circuit, $event)\" title=\"View Circuit Details\"></span>\n                  </td>\n                </tr>\n              </ng-container>\n            </ng-container>\n          </tbody>\n        </table>\n      </div>\n    </div>\n  </div>\n\n  <!-- Router Path Details Section -->\n  <div class=\"router-path-section\" *ngIf=\"selectedCircuit && selectedCircuitRouters.length > 0\">\n    <div class=\"router-path-container\">\n      <div class=\"router-path-header\">\n        <span class=\"router-path-icon icon-routers\"></span>\n        <span class=\"router-path-text\">Circuit Path ({{ selectedCircuitRouters.length }} routers)</span>\n      </div>\n      <div class=\"router-path-list\">\n        <table class=\"router-path-table\">\n          <thead>\n            <tr>\n              <th>#</th>\n              <th>Router Name</th>\n              <th>Status</th>\n            </tr>\n          </thead>\n          <tbody>\n            <tr *ngFor=\"let router of selectedCircuitRouters; let i = index\"\n                (click)=\"onRouterInPathSelect(router.id, 'routers')\"\n                [class.selected-row]=\"selectedRouterInPath === router.id\"\n                class=\"clickable-circuit-row\">\n              <td class=\"path-index\">{{ i + 1 }}</td>\n              <td class=\"router-name\">{{ router.name || router.id }}</td>\n              <td class=\"router-status\">\n                <span *ngIf=\"!router._notFound && router.connected !== undefined\"\n                      [class]=\"router.connected ? 'status-online' : 'status-offline'\">\n                  {{ router.connected ? 'Online' : 'Offline' }}\n                </span>\n                <span *ngIf=\"router._notFound\" class=\"status-unknown\">Unknown</span>\n              </td>\n            </tr>\n          </tbody>\n        </table>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"action-section\">\n    <button *ngIf=\"hasUnsavedLocationChanges(markerData?.item)\"\n            class=\"save-location-btn\"\n            (click)=\"onSaveLocationChanges()\">\n      Save Changes\n    </button>\n    <button class=\"cancel-btn\" (click)=\"onCancel()\">\n      Cancel\n    </button>\n    <button class=\"popup-details-btn\" (click)=\"onNavigateToDetails()\">\n      Go To Edit Page\n      <span class=\"icon-RightPage\"></span>\n    </button>\n  </div>\n</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\n\n@Component({\n  selector: 'lib-link-panel',\n  templateUrl: './link-panel.component.html',\n  styleUrls: ['./link-panel.component.scss'],\n  standalone: false\n})\nexport class LinkPanelComponent {\n  @Input() linkData: any = null;\n  @Output() routerClicked = new EventEmitter<any>();\n\n  /**\n   * Parse connection type\n   */\n  parseConnectionType(type: string): string {\n    if (!type) return 'Unknown';\n    // Format connection type for display\n    return type.replace(/_/g, ' ').replace(/\\b\\w/g, l => l.toUpperCase());\n  }\n\n  /**\n   * Parse connection endpoint (e.g., \"tls:10.0.0.1:443\")\n   */\n  parseEndpoint(endpoint: string): { protocol: string, address: string, port: string } {\n    if (!endpoint) {\n      return { protocol: 'N/A', address: 'N/A', port: 'N/A' };\n    }\n\n    const parts = endpoint.split(':');\n    if (parts.length === 3) {\n      return {\n        protocol: parts[0],\n        address: parts[1],\n        port: parts[2]\n      };\n    } else if (parts.length === 2) {\n      return {\n        protocol: parts[0],\n        address: parts[1],\n        port: 'N/A'\n      };\n    }\n\n    return { protocol: endpoint, address: 'N/A', port: 'N/A' };\n  }\n\n  /**\n   * Handle router click\n   */\n  onRouterClick(router: any): void {\n    this.routerClicked.emit(router);\n  }\n}\n","<div class=\"link-details-panel\" *ngIf=\"linkData\">\n  <div class=\"details-section\">\n    <table class=\"details-table\">\n    <tr>\n      <td class=\"popup-label\">From:</td>\n      <td class=\"popup-value\">\n        <a class=\"clickable-name\" (click)=\"onRouterClick(linkData?.sourceRouter)\">\n          {{ linkData?.sourceRouter?.name }}\n        </a>\n      </td>\n    </tr>\n    <tr>\n      <td class=\"popup-label\">To:</td>\n      <td class=\"popup-value\">\n        <a class=\"clickable-name\" (click)=\"onRouterClick(linkData?.destRouter)\">\n          {{ linkData?.destRouter?.name }}\n        </a>\n      </td>\n    </tr>\n    <tr>\n      <td class=\"popup-label\">State:</td>\n      <td class=\"popup-value\">{{ linkData?.link?.state || 'Unknown' }}</td>\n    </tr>\n    <tr>\n      <td class=\"popup-label\">Protocol:</td>\n      <td class=\"popup-value\">{{ linkData?.link?.protocol || 'Unknown' }}</td>\n    </tr>\n    <tr>\n      <td class=\"popup-label\">Cost:</td>\n      <td class=\"popup-value\">{{ linkData?.link?.cost || 'N/A' }}</td>\n    </tr>\n    <tr *ngIf=\"linkData?.link?.sourceLatency || linkData?.link?.destLatency\">\n      <td class=\"popup-label\">Latency:</td>\n      <td class=\"popup-value\">\n        {{ linkData?.link?.sourceLatency ? (linkData?.link?.sourceLatency / 1000000).toFixed(2) + ' ms' : 'N/A' }} /\n        {{ linkData?.link?.destLatency ? (linkData?.link?.destLatency / 1000000).toFixed(2) + ' ms' : 'N/A' }}\n      </td>\n    </tr>\n    </table>\n  </div>\n\n  <!-- Connections Sub-Table -->\n  <div class=\"connections-section\" *ngIf=\"linkData?.link?.connections && linkData?.link?.connections?.length > 0\">\n    <div class=\"connections-header\">\n      <span class=\"connections-title\">Connections ({{ linkData?.link?.connections?.length }})</span>\n    </div>\n    <div class=\"connections-table-container\">\n      <table class=\"connections-table\">\n        <thead>\n          <tr>\n            <th>Type</th>\n            <th>Src Protocol</th>\n            <th>Src Address</th>\n            <th>Src Port</th>\n            <th>Dest Protocol</th>\n            <th>Dest Address</th>\n            <th>Dest Port</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr *ngFor=\"let connection of linkData?.link?.connections\">\n            <td class=\"connection-type\">{{ parseConnectionType(connection.type) }}</td>\n            <td class=\"connection-protocol\">{{ parseEndpoint(connection.source).protocol }}</td>\n            <td class=\"connection-address\">{{ parseEndpoint(connection.source).address }}</td>\n            <td class=\"connection-port\">{{ parseEndpoint(connection.source).port }}</td>\n            <td class=\"connection-protocol\">{{ parseEndpoint(connection.dest).protocol }}</td>\n            <td class=\"connection-address\">{{ parseEndpoint(connection.dest).address }}</td>\n            <td class=\"connection-port\">{{ parseEndpoint(connection.dest).port }}</td>\n          </tr>\n        </tbody>\n      </table>\n    </div>\n  </div>\n</div>\n","import { Component, EventEmitter, Input, Output, OnChanges, SimpleChanges } from '@angular/core';\nimport { CircuitHop } from '../../services/circuit-path-builder.service';\n\n@Component({\n  selector: 'lib-circuit-hops-table',\n  templateUrl: './circuit-hops-table.component.html',\n  styleUrls: ['./circuit-hops-table.component.scss'],\n  standalone: false\n})\nexport class CircuitHopsTableComponent implements OnChanges {\n  @Input() circuitHops: CircuitHop[] = [];\n  @Input() selectedSegmentIndex: number | null = null;\n\n  @Output() hopSelected = new EventEmitter<{hop: CircuitHop, index: number}>();\n\n  ngOnChanges(changes: SimpleChanges): void {\n    // Component updates when circuitHops input changes\n  }\n}\n","<div class=\"circuit-hops-section\" *ngIf=\"circuitHops && circuitHops.length > 0\">\n  <div class=\"circuit-hops-container\">\n    <div class=\"router-path-header\">\n      <span class=\"router-path-text\">Circuit Hops ({{ circuitHops?.length }})</span>\n    </div>\n    <div class=\"router-path-list\">\n      <table class=\"router-path-table\">\n        <thead>\n          <tr>\n            <th>#</th>\n            <th>From</th>\n            <th></th>\n            <th>To</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr *ngFor=\"let hop of circuitHops; let i = index\"\n              (click)=\"hopSelected.emit({hop, index: i})\"\n              [class.selected-row]=\"selectedSegmentIndex === i\"\n              [class.hop-not-visible]=\"!hop.isVisible\"\n              [matTooltip]=\"!hop.isVisible ? 'This hop is not visible on the map due to missing geolocation data' : ''\"\n              [matTooltipDisabled]=\"hop.isVisible\"\n              class=\"clickable-circuit-row\">\n            <td class=\"hop-number\">\n              {{ i + 1 }}\n              <span *ngIf=\"!hop.isVisible\"\n                    class=\"visibility-badge\"\n                    matTooltip=\"Not visible on map\"\n                    matTooltipPosition=\"right\">\n                <span class=\"icon-eye-slash\"></span>\n              </span>\n            </td>\n            <td class=\"hop-from\">\n              <span *ngIf=\"hop.fromHasLocation\"\n                    [class]=\"hop.fromType === 'identity' ? 'icon-identity' : 'icon-routers'\"\n                    class=\"hop-entity-icon\"></span>\n              <span *ngIf=\"!hop.fromHasLocation\"\n                    class=\"hop-entity-icon unlocated-icon\"\n                    matTooltip=\"No geolocation data\"\n                    matTooltipPosition=\"right\">\n                <img src=\"assets/svgs/unknown-marker.svg\" alt=\"No location\" class=\"unlocated-marker-img\">\n              </span>\n              <span class=\"hop-entity-name\" [class.missing-location]=\"!hop.fromHasLocation\">\n                {{ hop.from }}\n              </span>\n            </td>\n            <td class=\"hop-arrow\">→</td>\n            <td class=\"hop-to\">\n              <span *ngIf=\"hop.toHasLocation\"\n                    [class]=\"hop.toType === 'identity' ? 'icon-identity' : 'icon-routers'\"\n                    class=\"hop-entity-icon\"></span>\n              <span *ngIf=\"!hop.toHasLocation\"\n                    class=\"hop-entity-icon unlocated-icon\"\n                    matTooltip=\"No geolocation data\"\n                    matTooltipPosition=\"right\">\n                <img src=\"assets/svgs/unknown-marker.svg\" alt=\"No location\" class=\"unlocated-marker-img\">\n              </span>\n              <span class=\"hop-entity-name\" [class.missing-location]=\"!hop.toHasLocation\">\n                {{ hop.to }}\n              </span>\n            </td>\n          </tr>\n        </tbody>\n      </table>\n    </div>\n  </div>\n</div>\n","import { Component, EventEmitter, Input, Output, OnChanges, SimpleChanges, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';\n\nexport interface CircuitRouter {\n  id: string;\n  name: string;\n  type: string;\n  [key: string]: any;\n}\n\n@Component({\n  selector: 'lib-router-path-table',\n  templateUrl: './router-path-table.component.html',\n  styleUrls: ['./router-path-table.component.scss'],\n  standalone: false,\n  changeDetection: ChangeDetectionStrategy.Default\n})\nexport class RouterPathTableComponent implements OnChanges {\n  @Input() circuitRouters: CircuitRouter[] = [];\n  @Input() selectedRouterId: string | null = null;\n\n  @Output() routerSelected = new EventEmitter<{routerId: string, routerType: string}>();\n  @Output() entityPanelOpened = new EventEmitter<{entityId: string, entityType: string}>();\n\n  displayRouters: CircuitRouter[] = [];\n\n  constructor(private cdr: ChangeDetectorRef) {}\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['circuitRouters']) {\n      // Create a shallow copy to trigger change detection\n      this.displayRouters = this.circuitRouters ? [...this.circuitRouters] : [];\n\n      this.cdr.markForCheck();\n    }\n  }\n\n  /**\n   * Handle opening entity panel\n   */\n  onOpenEntityPanel(router: CircuitRouter, event: Event): void {\n    event.stopPropagation();\n    this.entityPanelOpened.emit({ entityId: router.id, entityType: router.type });\n  }\n}\n","<div class=\"circuit-routers-section\" *ngIf=\"displayRouters && displayRouters.length > 0\">\n  <div class=\"circuit-routers-container\">\n    <div class=\"router-path-header\">\n      <span class=\"router-path-icon icon-routers\"></span>\n      <span class=\"router-path-text\">Routers in Path ({{ displayRouters?.length }})</span>\n    </div>\n    <div class=\"router-path-list\">\n      <table class=\"router-path-table\">\n        <thead>\n          <tr>\n            <th>#</th>\n            <th>Name</th>\n            <th>Type</th>\n            <th class=\"action-column\"></th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr *ngFor=\"let router of displayRouters; let i = index\"\n              (click)=\"routerSelected.emit({routerId: router.id, routerType: router.type})\"\n              [class.selected-row]=\"selectedRouterId === router.id\"\n              class=\"clickable-circuit-row\">\n            <td class=\"router-order\">{{ i + 1 }}</td>\n            <td class=\"router-name\">{{ router.name || router.id || 'Unknown' }}</td>\n            <td class=\"router-type\">{{ router.type }}</td>\n            <td class=\"action-column\">\n              <span class=\"router-nav-icon icon-Share-RBAC\" (click)=\"onOpenEntityPanel(router, $event)\" title=\"Go To Edit Page\"></span>\n            </td>\n          </tr>\n        </tbody>\n      </table>\n    </div>\n  </div>\n</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\n\n@Component({\n  selector: 'lib-circuit-panel',\n  templateUrl: './circuit-panel.component.html',\n  styleUrls: ['./circuit-panel.component.scss'],\n  standalone: false\n})\nexport class CircuitPanelComponent {\n  @Input() circuitData: any = null;\n  @Input() selectedSegmentIndex: number | null = null;\n  @Input() selectedRouterId: string | null = null;\n  @Input() previewEntity: any = null;\n  @Input() previewEntityType: string = '';\n\n  @Output() hopSelected = new EventEmitter<{hop: any, index: number}>();\n  @Output() routerSelected = new EventEmitter<{routerId: string, routerType: string}>();\n  @Output() entityClicked = new EventEmitter<{entityId: string, entityType: string}>();\n  @Output() serviceClicked = new EventEmitter<any>();\n  @Output() previewClosed = new EventEmitter<void>();\n  @Output() navigateToDetails = new EventEmitter<{type: string, id: string}>();\n  @Output() entityPanelOpened = new EventEmitter<{entityId: string, entityType: string}>();\n\n  /**\n   * Handle hop selection from circuit hops table\n   */\n  onHopSelected(event: {hop: any, index: number}): void {\n    this.hopSelected.emit(event);\n  }\n\n  /**\n   * Handle router selection from router path table\n   */\n  onRouterSelected(event: {routerId: string, routerType: string}): void {\n    this.routerSelected.emit(event);\n  }\n\n  /**\n   * Handle entity click (identity/router in circuit endpoints)\n   */\n  onEntityClick(entityId: string, entityType: string): void {\n    this.entityClicked.emit({ entityId, entityType });\n  }\n\n  /**\n   * Handle service click\n   */\n  onServiceClick(service: any): void {\n    this.serviceClicked.emit(service);\n  }\n\n  /**\n   * Close the entity preview\n   */\n  closePreview(): void {\n    this.previewClosed.emit();\n  }\n\n  /**\n   * Handle navigate to details from router path table\n   */\n  onNavigateToDetails(event: {type: string, id: string}): void {\n    this.navigateToDetails.emit(event);\n  }\n\n  /**\n   * Handle entity panel opening from router path table or preview\n   */\n  onEntityPanelOpened(event: {entityId: string, entityType: string}): void {\n    this.entityPanelOpened.emit(event);\n  }\n}\n","<div class=\"circuit-details-panel\" *ngIf=\"circuitData\">\n  <div class=\"details-section\">\n    <table class=\"details-table\">\n    <tr>\n      <td class=\"popup-label\">Service:</td>\n      <td class=\"popup-value\">\n        <a class=\"clickable-name\" (click)=\"onServiceClick(circuitData?.circuit?.service)\">\n          {{ circuitData?.circuit?.service?.name || 'Unknown' }}\n        </a>\n      </td>\n    </tr>\n    <tr>\n      <td class=\"popup-label\">Client:</td>\n      <td class=\"popup-value\">{{ circuitData?.circuit?.tags?.hostId || circuitData?.circuit?.clientId || 'Unknown' }}</td>\n    </tr>\n    <tr>\n      <td class=\"popup-label\">From:</td>\n      <td class=\"popup-value\">\n        <a class=\"clickable-name\" (click)=\"onEntityClick(circuitData?.segment?.fromId, circuitData?.segment?.fromType)\">\n          {{ circuitData?.segment?.from }}\n        </a>\n      </td>\n    </tr>\n    <tr>\n      <td class=\"popup-label\">To:</td>\n      <td class=\"popup-value\">\n        <a class=\"clickable-name\" (click)=\"onEntityClick(circuitData?.segment?.toId, circuitData?.segment?.toType)\">\n          {{ circuitData?.segment?.to }}\n        </a>\n      </td>\n    </tr>\n    <tr>\n      <td class=\"popup-label\">Total Path:</td>\n      <td class=\"popup-value\">{{ circuitData?.pathNodes?.length }} routers</td>\n    </tr>\n    <tr *ngIf=\"circuitData?.circuit?.createdAt\">\n      <td class=\"popup-label\">Created:</td>\n      <td class=\"popup-value\">{{ circuitData?.circuit?.createdAt | date:'short' }}</td>\n    </tr>\n    </table>\n  </div>\n\n  <!-- Circuit Hops Section -->\n  <lib-circuit-hops-table\n    [circuitHops]=\"circuitData?.circuitHops\"\n    [selectedSegmentIndex]=\"selectedSegmentIndex\"\n    (hopSelected)=\"onHopSelected($event)\"\n  ></lib-circuit-hops-table>\n\n  <!-- Circuit Routers Section -->\n  <lib-router-path-table\n    [circuitRouters]=\"circuitData?.circuitRouters\"\n    [selectedRouterId]=\"selectedRouterId\"\n    (routerSelected)=\"onRouterSelected($event)\"\n    (entityPanelOpened)=\"onEntityPanelOpened($event)\"\n  ></lib-router-path-table>\n\n  <!-- Entity Preview Section -->\n  <div class=\"entity-preview-section\" *ngIf=\"previewEntity\">\n    <div class=\"preview-header\" [class.preview-header-identity]=\"previewEntityType === 'identity'\" [class.preview-header-router]=\"previewEntityType === 'routers'\">\n      <div class=\"preview-title\">\n        <span class=\"preview-icon\" [class.icon-identity]=\"previewEntityType === 'identity'\" [class.icon-routers]=\"previewEntityType === 'routers'\"></span>\n        <span class=\"preview-text\">{{ previewEntity.name }}</span>\n      </div>\n      <span class=\"icon-HamburgerAppClose preview-close\" (click)=\"closePreview()\"></span>\n    </div>\n    <div class=\"preview-content\">\n      <table class=\"preview-table\">\n        <tr>\n          <td class=\"preview-label\">Type:</td>\n          <td class=\"preview-value\">{{ previewEntityType === 'identity' ? 'Identity' : 'Router' }}</td>\n        </tr>\n        <tr *ngIf=\"previewEntityType === 'routers'\">\n          <td class=\"preview-label\">Status:</td>\n          <td class=\"preview-value\">\n            <span [class]=\"previewEntity.connected ? 'status-online' : 'status-offline'\">\n              {{ previewEntity.connected ? 'Online' : 'Offline' }}\n            </span>\n          </td>\n        </tr>\n        <tr *ngIf=\"previewEntityType === 'identity'\">\n          <td class=\"preview-label\">Status:</td>\n          <td class=\"preview-value\">\n            <span [class]=\"previewEntity.edgeRouterConnectionStatus === 'online' ? 'status-online' : 'status-offline'\">\n              {{ previewEntity.edgeRouterConnectionStatus === 'online' ? 'Connected' : 'Disconnected' }}\n            </span>\n          </td>\n        </tr>\n        <tr>\n          <td class=\"preview-label\">Name:</td>\n          <td class=\"preview-value\">{{ previewEntity.name || 'N/A' }}</td>\n        </tr>\n        <tr *ngIf=\"previewEntity.id\">\n          <td class=\"preview-label\">ID:</td>\n          <td class=\"preview-value preview-id\">{{ previewEntity.id }}</td>\n        </tr>\n        <tr *ngIf=\"previewEntity._location\">\n          <td class=\"preview-label\">Location:</td>\n          <td class=\"preview-value preview-location\">\n            {{ previewEntity._location?.lat?.toFixed(4) }}, {{ previewEntity._location?.lng?.toFixed(4) }}\n          </td>\n        </tr>\n        <tr>\n          <td class=\"preview-label\">Role Attributes:</td>\n          <td class=\"preview-value preview-roles\">\n            <span *ngIf=\"previewEntity.roleAttributes && previewEntity.roleAttributes.length > 0\">\n              <span *ngFor=\"let role of previewEntity.roleAttributes\" class=\"preview-hashtag\">\n                #{{ role }}\n              </span>\n            </span>\n            <span *ngIf=\"!previewEntity.roleAttributes || previewEntity.roleAttributes.length === 0\" class=\"no-attributes\">\n              No attributes assigned\n            </span>\n          </td>\n        </tr>\n      </table>\n\n      <div class=\"preview-actions\">\n        <button class=\"preview-btn\" (click)=\"onEntityPanelOpened({entityId: previewEntity.id, entityType: previewEntityType})\">\n          Go To Edit Page\n          <span class=\"icon-RightPage\"></span>\n        </button>\n      </div>\n    </div>\n  </div>\n</div>\n","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\n\ninterface ServiceGroup {\n  serviceName: string;\n  serviceId: string;\n  circuits: any[];\n  expanded: boolean;\n  sortBy?: 'created';\n  sortDirection?: 'asc' | 'desc';\n}\n\n@Component({\n  selector: 'lib-entity-list-panel',\n  templateUrl: './entity-list-panel.component.html',\n  styleUrls: ['./entity-list-panel.component.scss'],\n  standalone: false\n})\nexport class EntityListPanelComponent implements OnChanges {\n  @Input() entityType: string = '';\n  @Input() entities: any[] = [];\n  @Input() currentPage: number = 1;\n  @Input() pageSize: number = 20;\n  @Input() totalEntities: number = 0;\n  @Input() searchTerm: string = '';\n  @Input() previewEntity: any = null;\n  @Input() previewCircuits: any[] = [];\n  @Input() selectedCircuit: any = null;\n  @Input() selectedCircuitRouters: any[] = [];\n  @Input() selectedRouterInPath: string | null = null;\n  @Input() Math: any = Math;\n  @Input() allIdentities: any[] = [];\n  @Input() allRouters: any[] = [];\n  @Input() locationFilter: 'all' | 'located' | 'unlocated' = 'located';\n\n  @Output() searchChanged = new EventEmitter<string>();\n  @Output() pageChanged = new EventEmitter<number>();\n  @Output() locationFilterChanged = new EventEmitter<'all' | 'located' | 'unlocated'>();\n  @Output() entityClicked = new EventEmitter<any>();\n  @Output() previewClosed = new EventEmitter<void>();\n  @Output() circuitSelected = new EventEmitter<any>();\n  @Output() routerInPathSelected = new EventEmitter<{routerId: string, routerType: string}>();\n  @Output() saveLocationChanges = new EventEmitter<{item: any, type: string}>();\n  @Output() navigateToDetails = new EventEmitter<{type: string, id: string}>();\n  @Output() circuitPreviewOpened = new EventEmitter<any>();\n  @Output() roleAttributeNavigated = new EventEmitter<string>();\n  @Output() sortChanged = new EventEmitter<{column: string, direction: 'asc' | 'desc'}>();\n  @Output() entityDragStarted = new EventEmitter<{event: DragEvent, entity: any, type: string}>();\n\n  sortColumn: string = '';\n  sortDirection: 'asc' | 'desc' = 'desc';\n\n  // Service grouping\n  serviceGroups: ServiceGroup[] = [];\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['previewCircuits']) {\n      this.updateServiceGroups();\n    }\n  }\n\n  /**\n   * Get total pages\n   */\n  get totalPages(): number {\n    return Math.ceil(this.totalEntities / this.pageSize);\n  }\n\n  /**\n   * Toggle sort for a column\n   */\n  toggleSort(column: string): void {\n    if (this.sortColumn === column) {\n      // Toggle direction if same column\n      this.sortDirection = this.sortDirection === 'asc' ? 'desc' : 'asc';\n    } else {\n      // New column, default to descending for circuit count, ascending for others\n      this.sortColumn = column;\n      this.sortDirection = column === 'activeCircuitCount' ? 'desc' : 'asc';\n    }\n    this.sortChanged.emit({ column: this.sortColumn, direction: this.sortDirection });\n  }\n\n  /**\n   * Get page numbers for pagination display\n   */\n  get pageNumbers(): number[] {\n    const total = this.totalPages;\n    const current = this.currentPage;\n    const delta = 2;\n    const range: number[] = [];\n    const rangeWithDots: number[] = [];\n\n    for (let i = Math.max(2, current - delta); i <= Math.min(total - 1, current + delta); i++) {\n      range.push(i);\n    }\n\n    if (current - delta > 2) {\n      rangeWithDots.push(1, -1);\n    } else {\n      rangeWithDots.push(1);\n    }\n\n    rangeWithDots.push(...range);\n\n    if (current + delta < total - 1) {\n      rangeWithDots.push(-1, total);\n    } else if (total > 1) {\n      rangeWithDots.push(total);\n    }\n\n    return rangeWithDots;\n  }\n\n  /**\n   * Handle search input change\n   */\n  onSearchChange(search: string): void {\n    this.searchChanged.emit(search);\n  }\n\n  /**\n   * Handle location filter change\n   */\n  onLocationFilterChange(filter: 'all' | 'located' | 'unlocated'): void {\n    this.locationFilterChanged.emit(filter);\n  }\n\n  /**\n   * Handle page change\n   */\n  onPageChange(page: number): void {\n    this.pageChanged.emit(page);\n  }\n\n  /**\n   * Handle drag start for unlocated entities\n   */\n  onDragStart(event: DragEvent, entity: any): void {\n    // Only emit drag event if showing unlocated entities\n    if (this.locationFilter === 'unlocated') {\n      // Convert entityType to the format expected by drag handlers\n      // 'identities' -> 'identity', 'routers' stays 'routers'\n      const dragType = this.entityType === 'identities' ? 'identity' : this.entityType;\n      this.entityDragStarted.emit({ event, entity, type: dragType });\n    }\n  }\n\n  /**\n   * Handle entity row click\n   */\n  onEntityClick(entity: any): void {\n    this.entityClicked.emit(entity);\n  }\n\n  /**\n   * Close preview pane\n   */\n  onPreviewClose(): void {\n    this.previewClosed.emit();\n  }\n\n  /**\n   * Get entity online status\n   */\n  getEntityOnlineStatus(entity: any): boolean {\n    if (!entity) return false;\n    if (entity.connected !== undefined) {\n      return entity.connected === true;\n    }\n    if (entity.isOnline !== undefined) {\n      return entity.isOnline === true;\n    }\n    return false;\n  }\n\n  /**\n   * Check if entity has unsaved location changes\n   */\n  hasUnsavedLocationChanges(item: any): boolean {\n    if (!item || !item._unsavedLocation) return false;\n    return true;\n  }\n\n  /**\n   * Select a circuit\n   */\n  onCircuitSelect(circuit: any, event?: MouseEvent): void {\n    if (event) {\n      event.stopPropagation();\n    }\n    this.circuitSelected.emit(circuit);\n  }\n\n  /**\n   * Open circuit preview\n   */\n  onCircuitPreviewOpen(circuit: any, event: MouseEvent): void {\n    event.stopPropagation();\n    this.circuitPreviewOpened.emit(circuit);\n  }\n\n  /**\n   * Select router in path\n   */\n  onRouterInPathSelect(routerId: string, routerType: string): void {\n    this.routerInPathSelected.emit({ routerId, routerType });\n  }\n\n  /**\n   * Save location changes\n   */\n  onSaveLocationChanges(): void {\n    this.saveLocationChanges.emit({\n      item: this.previewEntity?.item,\n      type: this.previewEntity?.type\n    });\n  }\n\n  /**\n   * Navigate to details\n   */\n  onNavigateToDetails(): void {\n    this.navigateToDetails.emit({\n      type: this.previewEntity?.type,\n      id: this.previewEntity?.item?.id\n    });\n  }\n\n  /**\n   * Navigate to role attribute\n   */\n  onRoleAttributeClick(role: string, event?: Event): void {\n    if (event) {\n      event.stopPropagation();\n    }\n    this.roleAttributeNavigated.emit(role);\n  }\n\n  /**\n   * Update service groups - group circuits by service and apply filtering\n   */\n  updateServiceGroups(): void {\n    let processed = [...this.previewCircuits];\n\n    // Pre-compute client/host info for all circuits to avoid repeated computation in templates\n    processed.forEach(circuit => {\n      if (!circuit._clientInfo) {\n        circuit._clientInfo = this.computeClientInfo(circuit);\n      }\n      if (!circuit._hostInfo) {\n        circuit._hostInfo = this.computeHostInfo(circuit);\n      }\n    });\n\n    // Group circuits by service\n    const serviceMap = new Map<string, ServiceGroup>();\n\n    processed.forEach(circuit => {\n      const serviceId = circuit.service?.id || 'unknown';\n      const serviceName = circuit.service?.name || 'Unknown Service';\n\n      if (!serviceMap.has(serviceId)) {\n        serviceMap.set(serviceId, {\n          serviceName,\n          serviceId,\n          circuits: [],\n          expanded: false\n        });\n      }\n\n      serviceMap.get(serviceId)!.circuits.push(circuit);\n    });\n\n    // Convert to array and sort by service name\n    this.serviceGroups = Array.from(serviceMap.values()).sort((a, b) =>\n      a.serviceName.localeCompare(b.serviceName)\n    );\n  }\n\n  /**\n   * Toggle service group expansion\n   */\n  toggleGroup(group: ServiceGroup, event?: Event): void {\n    if (event) {\n      event.stopPropagation();\n    }\n    group.expanded = !group.expanded;\n  }\n\n  /**\n   * Toggle sort for a service group\n   */\n  toggleCircuitSort(group: ServiceGroup): void {\n    if (group.sortBy === 'created') {\n      group.sortDirection = group.sortDirection === 'asc' ? 'desc' : 'asc';\n    } else {\n      group.sortBy = 'created';\n      group.sortDirection = 'desc';\n    }\n  }\n\n  /**\n   * Get entity name and type from ID\n   */\n  getEntityInfo(entityId: string): { name: string; type: 'identity' | 'router' } {\n    // Try to find in identities first\n    const identity = this.allIdentities.find(i => i.id === entityId);\n    if (identity) {\n      // Check if this identity is a router type\n      const type = identity.typeId === 'Router' ? 'router' : 'identity';\n      return { name: identity.name || entityId, type };\n    }\n\n    // Try to find in routers\n    const router = this.allRouters.find(r => r.id === entityId);\n    if (router) {\n      return { name: router.name || entityId, type: 'router' };\n    }\n\n    // Unknown entity\n    return { name: entityId, type: 'identity' };\n  }\n\n  /**\n   * Compute client entity info from circuit (called once during data processing)\n   */\n  private computeClientInfo(circuit: any): { name: string; type: 'identity' | 'router' } {\n    // Handle empty strings from API - use explicit checks instead of || operator\n    const clientId = (circuit.tags?.clientId && circuit.tags.clientId.trim()) ||\n                     circuit.clientId ||\n                     circuit.client?.id ||\n                     'Unknown';\n    return this.getEntityInfo(clientId);\n  }\n\n  /**\n   * Compute host entity info from circuit (called once during data processing)\n   */\n  private computeHostInfo(circuit: any): { name: string; type: 'identity' | 'router' } {\n    // Handle empty strings from API - use explicit checks instead of || operator\n    const hostId = (circuit.tags?.hostId && circuit.tags.hostId.trim()) ||\n                   circuit.hostId ||\n                   circuit.host?.id ||\n                   'Unknown';\n    return this.getEntityInfo(hostId);\n  }\n\n  /**\n   * Get cached client entity info from circuit (used in templates)\n   */\n  getClientInfo(circuit: any): { name: string; type: 'identity' | 'router' } {\n    return circuit._clientInfo || this.computeClientInfo(circuit);\n  }\n\n  /**\n   * Get cached host entity info from circuit (used in templates)\n   */\n  getHostInfo(circuit: any): { name: string; type: 'identity' | 'router' } {\n    return circuit._hostInfo || this.computeHostInfo(circuit);\n  }\n\n  /**\n   * Get sorted circuits for a group - dual sort with created date as primary when active\n   */\n  getSortedCircuits(group: ServiceGroup): any[] {\n    return [...group.circuits].sort((a, b) => {\n      // If created sort is active, use it as primary sort\n      if (group.sortBy === 'created') {\n        const dateA = new Date(a.createdAt || 0).getTime();\n        const dateB = new Date(b.createdAt || 0).getTime();\n        const dateCompare = group.sortDirection === 'asc' ? dateA - dateB : dateB - dateA;\n\n        if (dateCompare !== 0) {\n          return dateCompare;\n        }\n\n        // If dates are the same, sort by client name as secondary\n        const clientA = this.getClientInfo(a).name.toLowerCase();\n        const clientB = this.getClientInfo(b).name.toLowerCase();\n        return clientA.localeCompare(clientB);\n      }\n\n      // Default: sort by client name first, then by created date\n      const clientA = this.getClientInfo(a).name.toLowerCase();\n      const clientB = this.getClientInfo(b).name.toLowerCase();\n      const clientCompare = clientA.localeCompare(clientB);\n\n      if (clientCompare !== 0) {\n        return clientCompare;\n      }\n\n      // If client names are the same, sort by created date (descending)\n      const dateA = new Date(a.createdAt || 0).getTime();\n      const dateB = new Date(b.createdAt || 0).getTime();\n      return dateB - dateA;\n    });\n  }\n}\n","<div class=\"entity-list-wrapper\" [class.split-view]=\"previewEntity\">\n  <!-- Entity List Section (Top Half) -->\n  <div class=\"entity-list-section\">\n    <div class=\"entity-list-popup\">\n      <!-- Search Bar -->\n      <div class=\"entity-list-search\">\n        <input\n          type=\"text\"\n          class=\"search-input\"\n          [(ngModel)]=\"searchTerm\"\n          (input)=\"onSearchChange(searchTerm)\"\n          placeholder=\"Search by name...\"\n        />\n      </div>\n\n      <!-- Location Filter Toggle (only for identities and routers) -->\n      <div class=\"location-filter-toggle\" *ngIf=\"entityType === 'identities' || entityType === 'routers'\">\n        <button\n          type=\"button\"\n          class=\"filter-button\"\n          [class.active]=\"locationFilter === 'located'\"\n          (click)=\"onLocationFilterChange('located')\">\n          <span class=\"icon-Location filter-icon\"></span>\n          <span class=\"filter-text\">Located</span>\n        </button>\n        <button\n          type=\"button\"\n          class=\"filter-button\"\n          [class.active]=\"locationFilter === 'unlocated'\"\n          (click)=\"onLocationFilterChange('unlocated')\">\n          <img src=\"assets/svgs/unknown-marker.svg\" alt=\"Unlocated\" class=\"filter-icon unknown-marker\">\n          <span class=\"filter-text\">Unlocated</span>\n        </button>\n        <button\n          type=\"button\"\n          class=\"filter-button\"\n          [class.active]=\"locationFilter === 'all'\"\n          (click)=\"onLocationFilterChange('all')\">\n          <span [class]=\"entityType === 'identities' ? 'icon-identity' : 'icon-routers'\" class=\"filter-icon\"></span>\n          <span class=\"filter-text\">All</span>\n        </button>\n      </div>\n\n      <!-- Entity Table -->\n      <div class=\"entity-list-container\">\n        <table class=\"entity-list-table\">\n          <thead>\n            <tr>\n              <th *ngIf=\"locationFilter === 'unlocated'\" class=\"drag-handle-header\"></th>\n              <th (click)=\"toggleSort('name')\" class=\"sortable-header\">\n                Name\n                <span *ngIf=\"sortColumn === 'name'\" class=\"sort-indicator\">\n                  {{ sortDirection === 'asc' ? '▲' : '▼' }}\n                </span>\n              </th>\n              <th *ngIf=\"entityType === 'routers'\">Type</th>\n              <th *ngIf=\"entityType === 'identities' || entityType === 'routers'\">Roles</th>\n              <th *ngIf=\"entityType === 'services'\" (click)=\"toggleSort('activeCircuitCount')\" class=\"sortable-header\">\n                Active Circuits\n                <span *ngIf=\"sortColumn === 'activeCircuitCount'\" class=\"sort-indicator\">\n                  {{ sortDirection === 'asc' ? '▲' : '▼' }}\n                </span>\n              </th>\n            </tr>\n          </thead>\n          <tbody>\n            <tr *ngFor=\"let entity of entities\"\n                (click)=\"onEntityClick(entity)\"\n                [class.selected-row]=\"previewEntity?.item?.id === entity.id\"\n                [class.draggable-row]=\"locationFilter === 'unlocated'\"\n                [attr.draggable]=\"locationFilter === 'unlocated' ? 'true' : null\"\n                (dragstart)=\"onDragStart($event, entity)\"\n                class=\"clickable-row\">\n              <td *ngIf=\"locationFilter === 'unlocated'\" class=\"drag-handle-cell\">\n                <span class=\"drag-handle\">⋮⋮</span>\n              </td>\n              <td class=\"entity-name\">\n                <span *ngIf=\"entityType === 'identities'\" class=\"status-icon\" [class.status-online]=\"entity.edgeRouterConnectionStatus === 'online'\" [class.status-offline]=\"entity.edgeRouterConnectionStatus !== 'online'\"></span>\n                <span *ngIf=\"entityType === 'routers'\" class=\"status-icon\" [class.status-online]=\"entity.connected\" [class.status-offline]=\"!entity.connected\"></span>\n                <span class=\"entity-text\">{{ entity.name }}</span>\n              </td>\n              <td *ngIf=\"entityType === 'routers'\" class=\"entity-type\">{{ entity._routerType === 'transit-router' ? 'Transit' : 'Edge' }}</td>\n              <td *ngIf=\"entityType === 'identities'\" class=\"entity-roles\">\n                <span *ngIf=\"entity.roleAttributes && entity.roleAttributes.length > 0\" class=\"roles-container\">\n                  <span *ngFor=\"let role of entity.roleAttributes.slice(0, 3)\" class=\"role-tag\" (click)=\"onRoleAttributeClick(role, $event)\">#{{ role }}</span>\n                  <span *ngIf=\"entity.roleAttributes.length > 3\" class=\"role-more\">+{{ entity.roleAttributes.length - 3 }}</span>\n                </span>\n                <span *ngIf=\"!entity.roleAttributes || entity.roleAttributes.length === 0\" class=\"no-roles\">—</span>\n              </td>\n              <td *ngIf=\"entityType === 'routers'\" class=\"entity-roles\">\n                <span *ngIf=\"entity.roleAttributes && entity.roleAttributes.length > 0\" class=\"roles-container\">\n                  <span *ngFor=\"let role of entity.roleAttributes.slice(0, 3)\" class=\"role-tag\" (click)=\"onRoleAttributeClick(role, $event)\">#{{ role }}</span>\n                  <span *ngIf=\"entity.roleAttributes.length > 3\" class=\"role-more\">+{{ entity.roleAttributes.length - 3 }}</span>\n                </span>\n                <span *ngIf=\"!entity.roleAttributes || entity.roleAttributes.length === 0\" class=\"no-roles\">—</span>\n              </td>\n              <td *ngIf=\"entityType === 'services'\" class=\"entity-circuits\">\n                {{ entity.activeCircuitCount || 0 }}\n              </td>\n            </tr>\n          </tbody>\n        </table>\n\n        <!-- Empty State -->\n        <div class=\"empty-state\" *ngIf=\"entities.length === 0\">\n          <div class=\"empty-icon\">🔍</div>\n          <div class=\"empty-message\">No {{ entityType }} found</div>\n        </div>\n      </div>\n\n      <!-- Pagination -->\n      <div class=\"entity-list-pagination\" *ngIf=\"totalPages > 1\">\n        <button\n          class=\"pagination-btn\"\n          [disabled]=\"currentPage === 1\"\n          (click)=\"onPageChange(currentPage - 1)\">\n          &lt;\n        </button>\n\n        <ng-container *ngFor=\"let pageNum of pageNumbers\">\n          <button\n            *ngIf=\"pageNum !== -1\"\n            class=\"pagination-btn page-number\"\n            [class.active]=\"pageNum === currentPage\"\n            (click)=\"onPageChange(pageNum)\">\n            {{ pageNum }}\n          </button>\n          <span *ngIf=\"pageNum === -1\" class=\"pagination-ellipsis\">...</span>\n        </ng-container>\n\n        <button\n          class=\"pagination-btn\"\n          [disabled]=\"currentPage === totalPages\"\n          (click)=\"onPageChange(currentPage + 1)\">\n          &gt;\n        </button>\n      </div>\n\n      <!-- Results Info -->\n      <div class=\"entity-list-info\">\n        Showing {{ (currentPage - 1) * pageSize + 1 }} - {{ Math.min(currentPage * pageSize, totalEntities) }} of {{ totalEntities }} {{ entityType }}\n      </div>\n    </div>\n  </div>\n\n  <!-- Entity Preview Section (Bottom Half) -->\n  <div class=\"entity-preview-section\" *ngIf=\"previewEntity\">\n    <div class=\"preview-header\"\n         [class.preview-header-identity]=\"previewEntity?.type === 'identity'\"\n         [class.preview-header-router]=\"previewEntity?.type === 'routers'\"\n         [class.preview-header-service]=\"previewEntity?.type === 'services'\">\n      <div class=\"preview-title\">\n        <span [ngClass]=\"{\n          'icon-identity': previewEntity?.type === 'identity',\n          'icon-routers': previewEntity?.type === 'routers',\n          'icon-Services': previewEntity?.type === 'services'\n        }\" class=\"preview-icon\"></span>\n        <span class=\"preview-text\">{{ previewEntity?.item?.name }}</span>\n      </div>\n      <div class=\"preview-close icon-HamburgerAppClose\" (click)=\"onPreviewClose()\"></div>\n    </div>\n    <div class=\"preview-content\">\n      <div class=\"entity-preview-details\">\n        <div class=\"details-section\">\n          <table class=\"details-table\">\n          <tr *ngIf=\"previewEntity?.type !== 'services' && (previewEntity?.item?.isOnline !== undefined || previewEntity?.item?.connected !== undefined)\">\n            <td class=\"popup-label\">Status:</td>\n            <td class=\"popup-value\">\n              <span [class]=\"getEntityOnlineStatus(previewEntity?.item) ? 'status-online' : 'status-offline'\">\n                {{ getEntityOnlineStatus(previewEntity?.item) ? 'Online' : 'Offline' }}\n              </span>\n            </td>\n          </tr>\n          <tr *ngIf=\"previewEntity?.type === 'identity' && previewEntity?.item?.edgeRouterConnectionStatus\">\n            <td class=\"popup-label\">Status:</td>\n            <td class=\"popup-value\">\n              <span [class]=\"previewEntity?.item?.edgeRouterConnectionStatus === 'online' ? 'status-online' : 'status-offline'\">\n                {{ previewEntity?.item?.edgeRouterConnectionStatus === 'online' ? 'Connected' : 'Disconnected' }}\n              </span>\n            </td>\n          </tr>\n          <tr>\n            <td class=\"popup-label\">Name:</td>\n            <td class=\"popup-value\">{{ previewEntity?.item?.name || 'N/A' }}</td>\n          </tr>\n          <tr *ngIf=\"previewEntity?.item?.id\">\n            <td class=\"popup-label\">ID:</td>\n            <td class=\"popup-value popup-id\">{{ previewEntity?.item?.id }}</td>\n          </tr>\n          <tr *ngIf=\"previewEntity?.location\">\n            <td class=\"popup-label\">Location:</td>\n            <td class=\"popup-value popup-location\" [class.location-modified]=\"hasUnsavedLocationChanges(previewEntity?.item)\">\n              {{ previewEntity?.location?.lat?.toFixed(4) }}, {{ previewEntity?.location?.lng?.toFixed(4) }}\n              <span *ngIf=\"hasUnsavedLocationChanges(previewEntity?.item)\" class=\"modified-indicator\">*</span>\n            </td>\n          </tr>\n          <tr>\n            <td class=\"popup-label\">Role Attributes:</td>\n            <td class=\"popup-value popup-roles\">\n              <span *ngIf=\"previewEntity?.item?.roleAttributes && previewEntity?.item?.roleAttributes?.length > 0\">\n                <span *ngFor=\"let role of previewEntity?.item?.roleAttributes\" class=\"popup-hashtag\" (click)=\"onRoleAttributeClick(role)\">\n                  #{{ role }}\n                </span>\n              </span>\n              <span *ngIf=\"!previewEntity?.item?.roleAttributes || previewEntity?.item?.roleAttributes?.length === 0\" class=\"no-attributes\">\n                No attributes assigned\n              </span>\n            </td>\n          </tr>\n          </table>\n        </div>\n\n        <!-- Active Services Section -->\n        <div class=\"circuits-section\" *ngIf=\"previewCircuits.length > 0\">\n          <div class=\"circuits-container\">\n            <div class=\"circuits-header\">\n              <span class=\"circuits-header-icon icon-services\"></span>\n              <span class=\"circuits-header-text\">Active Services ({{ serviceGroups.length }})</span>\n            </div>\n            <div class=\"circuits-list\">\n              <table class=\"circuits-table tree-table\">\n                <colgroup>\n                  <col style=\"width: 30px;\">  <!-- Indent -->\n                  <col>                        <!-- Client - flexible -->\n                  <col>                        <!-- Host - flexible -->\n                  <col style=\"width: 120px;\">  <!-- Created -->\n                  <col style=\"width: 26px;\">   <!-- Action -->\n                </colgroup>\n                <thead>\n                  <tr>\n                    <th colspan=\"5\" class=\"service-column\">Service Name</th>\n                  </tr>\n                </thead>\n                <tbody>\n                  <ng-container *ngFor=\"let group of serviceGroups\">\n                    <!-- Service Group Row -->\n                    <tr class=\"group-row clickable-row\" (click)=\"toggleGroup(group, $event)\">\n                      <td class=\"expand-cell\">\n                        <span class=\"expand-icon icon-RightPage\" [class.expanded]=\"group.expanded\"></span>\n                      </td>\n                      <td colspan=\"4\" class=\"service-name\">\n                        <span class=\"icon-Services group-icon\"></span>\n                        <span class=\"service-text\">{{ group.serviceName }}</span>\n                        <span class=\"circuit-count\">({{ group.circuits.length }})</span>\n                      </td>\n                    </tr>\n\n                    <!-- Circuit Rows (shown when expanded) -->\n                    <ng-container *ngIf=\"group.expanded\">\n                      <!-- Subheader Row -->\n                      <tr class=\"subheader-row\">\n                        <th class=\"subheader-indent\"></th>\n                        <th class=\"subheader-cell\">Client</th>\n                        <th class=\"subheader-cell\">Host</th>\n                        <th class=\"subheader-cell sortable-header\" (click)=\"toggleCircuitSort(group)\">\n                          Created\n                          <span class=\"sort-indicator\" *ngIf=\"group.sortBy === 'created'\">\n                            {{ group.sortDirection === 'asc' ? '▲' : '▼' }}\n                          </span>\n                        </th>\n                        <th class=\"subheader-cell\"></th>\n                      </tr>\n\n                      <!-- Circuit Data Rows -->\n                      <tr *ngFor=\"let circuit of getSortedCircuits(group)\"\n                          (click)=\"onCircuitSelect(circuit, $event)\"\n                          [class.selected-row]=\"selectedCircuit?.id === circuit.id\"\n                          class=\"circuit-row clickable-row\">\n                        <td class=\"circuit-indent\"></td>\n                        <td class=\"circuit-entity\">\n                          <span [class]=\"getClientInfo(circuit).type === 'identity' ? 'icon-identity entity-icon' : 'icon-routers entity-icon'\"></span>\n                          <span class=\"entity-name\">{{ getClientInfo(circuit).name }}</span>\n                        </td>\n                        <td class=\"circuit-entity\">\n                          <span [class]=\"getHostInfo(circuit).type === 'identity' ? 'icon-identity entity-icon' : 'icon-routers entity-icon'\"></span>\n                          <span class=\"entity-name\">{{ getHostInfo(circuit).name }}</span>\n                        </td>\n                        <td class=\"circuit-created\">\n                          {{ circuit.createdAt | date:'short' }}\n                        </td>\n                        <td class=\"action-column\">\n                          <span class=\"circuit-nav-icon icon-Share-RBAC\" (click)=\"onCircuitPreviewOpen(circuit, $event)\" title=\"View Circuit Details\"></span>\n                        </td>\n                      </tr>\n                    </ng-container>\n                  </ng-container>\n                </tbody>\n              </table>\n            </div>\n          </div>\n        </div>\n\n        <div class=\"action-section\">\n          <button *ngIf=\"hasUnsavedLocationChanges(previewEntity?.item)\"\n                  class=\"save-location-btn\"\n                  (click)=\"onSaveLocationChanges()\">\n            Save Changes\n          </button>\n          <button class=\"cancel-btn\" (click)=\"onPreviewClose()\">\n            Cancel\n          </button>\n          <button class=\"popup-details-btn\" (click)=\"onNavigateToDetails()\">\n            Go To Edit Page\n            <span class=\"icon-RightPage\"></span>\n          </button>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\n\ninterface ServiceGroup {\n  serviceName: string;\n  serviceId: string;\n  circuits: any[];\n  expanded: boolean;\n  sortBy?: 'created';\n  sortDirection?: 'asc' | 'desc';\n}\n\n@Component({\n  selector: 'lib-unlocated-panel',\n  templateUrl: './unlocated-panel.component.html',\n  styleUrls: ['./unlocated-panel.component.scss'],\n  standalone: false\n})\nexport class UnlocatedPanelComponent implements OnChanges {\n  @Input() unlocatedData: any = null;\n  @Input() filteredIdentities: any[] = [];\n  @Input() filteredRouters: any[] = [];\n  @Input() identitiesSearch: string = '';\n  @Input() routersSearch: string = '';\n  @Input() previewEntity: any = null;\n  @Input() previewType: string = '';\n  @Input() previewCircuits: any[] = [];\n  @Input() previewHasUnsavedLocation: boolean = false;\n  @Input() selectedCircuit: any = null;\n  @Input() selectedCircuitRouters: any[] = [];\n  @Input() selectedRouterInPath: string | null = null;\n  @Input() allIdentities: any[] = [];\n  @Input() allRouters: any[] = [];\n\n  @Output() identitiesSearchChanged = new EventEmitter<string>();\n  @Output() routersSearchChanged = new EventEmitter<string>();\n  @Output() entityDragStarted = new EventEmitter<{event: DragEvent, entity: any, type: string}>();\n  @Output() entityClicked = new EventEmitter<{entity: any, type: string}>();\n  @Output() previewClosed = new EventEmitter<void>();\n  @Output() saveLocationClicked = new EventEmitter<void>();\n  @Output() circuitSelected = new EventEmitter<any>();\n  @Output() routerInPathSelected = new EventEmitter<{routerId: string, routerType: string}>();\n  @Output() navigateToDetails = new EventEmitter<{type: string, id: string}>();\n  @Output() circuitPreviewOpened = new EventEmitter<any>();\n  @Output() roleAttributeNavigated = new EventEmitter<string>();\n\n  // Service grouping\n  serviceGroups: ServiceGroup[] = [];\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['previewCircuits']) {\n      this.updateServiceGroups();\n    }\n  }\n\n  /**\n   * Handle identities search change\n   */\n  onIdentitiesSearchChange(search: string): void {\n    this.identitiesSearchChanged.emit(search);\n  }\n\n  /**\n   * Handle routers search change\n   */\n  onRoutersSearchChange(search: string): void {\n    this.routersSearchChanged.emit(search);\n  }\n\n  /**\n   * Handle drag start\n   */\n  onDragStart(event: DragEvent, entity: any, type: string): void {\n    this.entityDragStarted.emit({ event, entity, type });\n  }\n\n  /**\n   * Handle entity click\n   */\n  onEntityClick(entity: any, type: string): void {\n    this.entityClicked.emit({ entity, type });\n  }\n\n  /**\n   * Close preview\n   */\n  onPreviewClose(): void {\n    this.previewClosed.emit();\n  }\n\n  /**\n   * Save location\n   */\n  onSaveLocation(): void {\n    this.saveLocationClicked.emit();\n  }\n\n  /**\n   * Get entity online status\n   */\n  getEntityOnlineStatus(entity: any): boolean {\n    if (!entity) return false;\n    if (entity.connected !== undefined) {\n      return entity.connected === true;\n    }\n    if (entity.isOnline !== undefined) {\n      return entity.isOnline === true;\n    }\n    return false;\n  }\n\n  /**\n   * Select a circuit\n   */\n  onCircuitSelect(circuit: any, event?: MouseEvent): void {\n    if (event) {\n      event.stopPropagation();\n    }\n    this.circuitSelected.emit(circuit);\n  }\n\n  /**\n   * Open circuit preview\n   */\n  onCircuitPreviewOpen(circuit: any, event: MouseEvent): void {\n    event.stopPropagation();\n    this.circuitPreviewOpened.emit(circuit);\n  }\n\n  /**\n   * Select router in path\n   */\n  onRouterInPathSelect(routerId: string, routerType: string): void {\n    this.routerInPathSelected.emit({ routerId, routerType });\n  }\n\n  /**\n   * Navigate to details\n   */\n  onNavigateToDetails(): void {\n    this.navigateToDetails.emit({\n      type: this.previewType,\n      id: this.previewEntity?.id\n    });\n  }\n\n  /**\n   * Navigate to role attribute\n   */\n  onRoleAttributeClick(role: string, event?: Event): void {\n    if (event) {\n      event.stopPropagation();\n    }\n    this.roleAttributeNavigated.emit(role);\n  }\n\n  /**\n   * Update service groups - group circuits by service and apply filtering\n   */\n  updateServiceGroups(): void {\n    let processed = [...this.previewCircuits];\n\n    // Group circuits by service\n    const serviceMap = new Map<string, ServiceGroup>();\n\n    processed.forEach(circuit => {\n      const serviceId = circuit.service?.id || 'unknown';\n      const serviceName = circuit.service?.name || 'Unknown Service';\n\n      if (!serviceMap.has(serviceId)) {\n        serviceMap.set(serviceId, {\n          serviceName,\n          serviceId,\n          circuits: [],\n          expanded: false\n        });\n      }\n\n      serviceMap.get(serviceId)!.circuits.push(circuit);\n    });\n\n    // Convert to array and sort by service name\n    this.serviceGroups = Array.from(serviceMap.values()).sort((a, b) =>\n      a.serviceName.localeCompare(b.serviceName)\n    );\n  }\n\n  /**\n   * Toggle service group expansion\n   */\n  toggleGroup(group: ServiceGroup, event?: Event): void {\n    if (event) {\n      event.stopPropagation();\n    }\n    group.expanded = !group.expanded;\n  }\n\n  /**\n   * Toggle sort for a service group\n   */\n  toggleCircuitSort(group: ServiceGroup): void {\n    if (group.sortBy === 'created') {\n      group.sortDirection = group.sortDirection === 'asc' ? 'desc' : 'asc';\n    } else {\n      group.sortBy = 'created';\n      group.sortDirection = 'desc';\n    }\n  }\n\n  /**\n   * Get entity name and type from ID\n   */\n  getEntityInfo(entityId: string): { name: string; type: 'identity' | 'router' } {\n    // Try to find in identities first\n    const identity = this.allIdentities.find(i => i.id === entityId);\n    if (identity) {\n      // Check if this identity is a router type\n      const type = identity.typeId === 'Router' ? 'router' : 'identity';\n      return { name: identity.name || entityId, type };\n    }\n\n    // Try to find in routers\n    const router = this.allRouters.find(r => r.id === entityId);\n    if (router) {\n      return { name: router.name || entityId, type: 'router' };\n    }\n\n    // Unknown entity\n    return { name: entityId, type: 'identity' };\n  }\n\n  /**\n   * Get client entity info from circuit\n   */\n  getClientInfo(circuit: any): { name: string; type: 'identity' | 'router' } {\n    const clientId = circuit.tags?.clientId || circuit.clientId || circuit.client?.id || 'Unknown';\n    return this.getEntityInfo(clientId);\n  }\n\n  /**\n   * Get host entity info from circuit\n   */\n  getHostInfo(circuit: any): { name: string; type: 'identity' | 'router' } {\n    const hostId = circuit.tags?.hostId || circuit.hostId || circuit.host?.id || 'Unknown';\n    return this.getEntityInfo(hostId);\n  }\n\n  /**\n   * Get sorted circuits for a group - dual sort with created date as primary when active\n   */\n  getSortedCircuits(group: ServiceGroup): any[] {\n    return [...group.circuits].sort((a, b) => {\n      // If created sort is active, use it as primary sort\n      if (group.sortBy === 'created') {\n        const dateA = new Date(a.createdAt || 0).getTime();\n        const dateB = new Date(b.createdAt || 0).getTime();\n        const dateCompare = group.sortDirection === 'asc' ? dateA - dateB : dateB - dateA;\n\n        if (dateCompare !== 0) {\n          return dateCompare;\n        }\n\n        // If dates are the same, sort by client name as secondary\n        const clientA = this.getClientInfo(a).name.toLowerCase();\n        const clientB = this.getClientInfo(b).name.toLowerCase();\n        return clientA.localeCompare(clientB);\n      }\n\n      // Default: sort by client name first, then by created date\n      const clientA = this.getClientInfo(a).name.toLowerCase();\n      const clientB = this.getClientInfo(b).name.toLowerCase();\n      const clientCompare = clientA.localeCompare(clientB);\n\n      if (clientCompare !== 0) {\n        return clientCompare;\n      }\n\n      // If client names are the same, sort by created date (descending)\n      const dateA = new Date(a.createdAt || 0).getTime();\n      const dateB = new Date(b.createdAt || 0).getTime();\n      return dateB - dateA;\n    });\n  }\n}\n","<div class=\"unlocated-popup\">\n  <!-- Identities Section -->\n  <div class=\"unlocated-section\" *ngIf=\"unlocatedData?.unlocatedIdentities?.length > 0\">\n    <h3 class=\"section-title section-title-identity\">\n      <span class=\"icon-identity section-icon\"></span>\n      <span class=\"section-text\">Identities ({{ unlocatedData?.unlocatedIdentities?.length }})</span>\n    </h3>\n    <div class=\"search-container\">\n      <input\n        type=\"text\"\n        class=\"search-input\"\n        [(ngModel)]=\"identitiesSearch\"\n        (input)=\"onIdentitiesSearchChange(identitiesSearch)\"\n        placeholder=\"Search by identity name...\"\n      />\n    </div>\n    <div class=\"unlocated-table-container\">\n      <table class=\"unlocated-table\">\n        <thead>\n          <tr>\n            <th class=\"drag-handle-header\"></th>\n            <th>Name</th>\n            <th>Roles</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr *ngFor=\"let identity of filteredIdentities\"\n              (click)=\"onEntityClick(identity, 'identity')\"\n              class=\"clickable-row draggable-row\"\n              draggable=\"true\"\n              (dragstart)=\"onDragStart($event, identity, 'identity')\">\n            <td class=\"drag-handle-cell\">\n              <span class=\"drag-handle\">⋮⋮</span>\n            </td>\n            <td class=\"entity-name\">\n              <span class=\"status-icon\" [class.status-online]=\"identity.edgeRouterConnectionStatus === 'online'\" [class.status-offline]=\"identity.edgeRouterConnectionStatus !== 'online'\"></span>\n              <span class=\"entity-text\">{{ identity.name }}</span>\n            </td>\n            <td class=\"entity-roles\">\n              <span *ngIf=\"identity.roleAttributes && identity.roleAttributes.length > 0\" class=\"roles-container\">\n                <span *ngFor=\"let role of identity.roleAttributes.slice(0, 3)\" class=\"role-tag\" (click)=\"onRoleAttributeClick(role, $event)\">#{{ role }}</span>\n                <span *ngIf=\"identity.roleAttributes.length > 3\" class=\"role-more\">+{{ identity.roleAttributes.length - 3 }}</span>\n              </span>\n              <span *ngIf=\"!identity.roleAttributes || identity.roleAttributes.length === 0\" class=\"no-roles\">—</span>\n            </td>\n          </tr>\n        </tbody>\n      </table>\n      <div class=\"empty-search-state\" *ngIf=\"filteredIdentities.length === 0 && identitiesSearch\">\n        <div class=\"empty-icon\">🔍</div>\n        <div class=\"empty-message\">No identities found matching \"{{ identitiesSearch }}\"</div>\n      </div>\n    </div>\n  </div>\n\n  <!-- Routers Section -->\n  <div class=\"unlocated-section\" *ngIf=\"unlocatedData?.unlocatedRouters?.length > 0\">\n    <h3 class=\"section-title section-title-router\">\n      <span class=\"icon-routers section-icon\"></span>\n      <span class=\"section-text\">Routers ({{ unlocatedData?.unlocatedRouters?.length }})</span>\n    </h3>\n    <div class=\"search-container\">\n      <input\n        type=\"text\"\n        class=\"search-input\"\n        [(ngModel)]=\"routersSearch\"\n        (input)=\"onRoutersSearchChange(routersSearch)\"\n        placeholder=\"Search by router name...\"\n      />\n    </div>\n    <div class=\"unlocated-table-container\">\n      <table class=\"unlocated-table\">\n        <thead>\n          <tr>\n            <th class=\"drag-handle-header\"></th>\n            <th>Name</th>\n            <th>Type</th>\n            <th>Roles</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr *ngFor=\"let router of filteredRouters\"\n              (click)=\"onEntityClick(router, 'routers')\"\n              class=\"clickable-row draggable-row\"\n              draggable=\"true\"\n              (dragstart)=\"onDragStart($event, router, 'routers')\">\n            <td class=\"drag-handle-cell\">\n              <span class=\"drag-handle\">⋮⋮</span>\n            </td>\n            <td class=\"entity-name\">\n              <span class=\"status-icon\" [class.status-online]=\"router.connected\" [class.status-offline]=\"!router.connected\"></span>\n              <span class=\"entity-text\">{{ router.name }}</span>\n            </td>\n            <td class=\"entity-type\">{{ router._routerType === 'transit-router' ? 'Transit' : 'Edge' }}</td>\n            <td class=\"entity-roles\">\n              <span *ngIf=\"router.roleAttributes && router.roleAttributes.length > 0\" class=\"roles-container\">\n                <span *ngFor=\"let role of router.roleAttributes.slice(0, 3)\" class=\"role-tag\" (click)=\"onRoleAttributeClick(role, $event)\">#{{ role }}</span>\n                <span *ngIf=\"router.roleAttributes.length > 3\" class=\"role-more\">+{{ router.roleAttributes.length - 3 }}</span>\n              </span>\n              <span *ngIf=\"!router.roleAttributes || router.roleAttributes.length === 0\" class=\"no-roles\">—</span>\n            </td>\n          </tr>\n        </tbody>\n      </table>\n      <div class=\"empty-search-state\" *ngIf=\"filteredRouters.length === 0 && routersSearch\">\n        <div class=\"empty-icon\">🔍</div>\n        <div class=\"empty-message\">No routers found matching \"{{ routersSearch }}\"</div>\n      </div>\n    </div>\n  </div>\n\n  <!-- Empty State -->\n  <div class=\"empty-state\" *ngIf=\"!unlocatedData?.unlocatedIdentities?.length && !unlocatedData?.unlocatedRouters?.length\">\n    <div class=\"empty-icon\">✓</div>\n    <div class=\"empty-message\">No entities to display</div>\n  </div>\n\n  <!-- Entity Preview -->\n  <div class=\"entity-preview\" *ngIf=\"previewEntity\">\n    <div class=\"preview-header\"\n         [class.preview-header-identity]=\"previewType === 'identity'\"\n         [class.preview-header-router]=\"previewType === 'routers'\">\n      <div class=\"preview-title\">\n        <span [class]=\"previewType === 'identity' ? 'icon-identity' : 'icon-routers'\" class=\"preview-icon\"></span>\n        <span class=\"preview-text\">{{ previewEntity?.name }}</span>\n      </div>\n      <div class=\"preview-close icon-HamburgerAppClose\" (click)=\"onPreviewClose()\"></div>\n    </div>\n    <div class=\"preview-content\">\n      <table class=\"popup-table\">\n        <tr *ngIf=\"previewType === 'routers'\">\n          <td class=\"popup-label\">Type:</td>\n          <td class=\"popup-value\">Router</td>\n        </tr>\n        <tr *ngIf=\"previewEntity?.isOnline !== undefined || previewEntity?.connected !== undefined\">\n          <td class=\"popup-label\">Status:</td>\n          <td class=\"popup-value\">\n            <span [class]=\"getEntityOnlineStatus(previewEntity) ? 'status-online' : 'status-offline'\">\n              {{ getEntityOnlineStatus(previewEntity) ? 'Online' : 'Offline' }}\n            </span>\n          </td>\n        </tr>\n        <tr *ngIf=\"previewType === 'identity' && previewEntity?.edgeRouterConnectionStatus\">\n          <td class=\"popup-label\">Status:</td>\n          <td class=\"popup-value\">\n            <span [class]=\"previewEntity?.edgeRouterConnectionStatus === 'online' ? 'status-online' : 'status-offline'\">\n              {{ previewEntity?.edgeRouterConnectionStatus === 'online' ? 'Connected' : 'Disconnected' }}\n            </span>\n          </td>\n        </tr>\n        <tr>\n          <td class=\"popup-label\">Name:</td>\n          <td class=\"popup-value\">{{ previewEntity?.name || 'N/A' }}</td>\n        </tr>\n        <tr *ngIf=\"previewEntity?.id\">\n          <td class=\"popup-label\">ID:</td>\n          <td class=\"popup-value popup-id\">{{ previewEntity?.id }}</td>\n        </tr>\n        <tr>\n          <td class=\"popup-label\">Location:</td>\n          <td class=\"popup-value\" [class.popup-location-none]=\"!previewEntity?.tags?.geolocation\">\n            <span *ngIf=\"previewEntity?.tags?.geolocation\">\n              {{ previewEntity.tags.geolocation }}\n              <span *ngIf=\"previewHasUnsavedLocation\" class=\"unsaved-indicator\">(unsaved)</span>\n            </span>\n            <span *ngIf=\"!previewEntity?.tags?.geolocation\">\n              No geolocation assigned\n            </span>\n          </td>\n        </tr>\n        <tr>\n          <td class=\"popup-label\">Role Attributes:</td>\n          <td class=\"popup-value popup-roles\">\n            <span *ngIf=\"previewEntity?.roleAttributes && previewEntity?.roleAttributes?.length > 0\">\n              <span *ngFor=\"let role of previewEntity?.roleAttributes\" class=\"popup-hashtag\" (click)=\"onRoleAttributeClick(role)\">\n                #{{ role }}\n              </span>\n            </span>\n            <span *ngIf=\"!previewEntity?.roleAttributes || previewEntity?.roleAttributes?.length === 0\" class=\"no-attributes\">\n              No attributes assigned\n            </span>\n          </td>\n        </tr>\n      </table>\n\n      <!-- Active Services Section -->\n      <div class=\"circuits-section\" *ngIf=\"previewCircuits.length > 0\">\n        <div class=\"circuits-container\">\n          <div class=\"circuits-header\">\n            <span class=\"circuits-header-icon icon-services\"></span>\n            <span class=\"circuits-header-text\">Active Services ({{ serviceGroups.length }})</span>\n          </div>\n          <div class=\"circuits-list\">\n            <table class=\"circuits-table tree-table\">\n              <colgroup>\n                <col style=\"width: 30px;\">  <!-- Indent -->\n                <col>                        <!-- Client - flexible -->\n                <col>                        <!-- Host - flexible -->\n                <col style=\"width: 120px;\">  <!-- Created -->\n                <col style=\"width: 26px;\">   <!-- Action -->\n              </colgroup>\n              <thead>\n                <tr>\n                  <th colspan=\"5\" class=\"service-column\">Service Name</th>\n                </tr>\n              </thead>\n              <tbody>\n                <ng-container *ngFor=\"let group of serviceGroups\">\n                  <!-- Service Group Row -->\n                  <tr class=\"group-row clickable-row\" (click)=\"toggleGroup(group, $event)\">\n                    <td class=\"expand-cell\">\n                      <span class=\"expand-icon icon-RightPage\" [class.expanded]=\"group.expanded\"></span>\n                    </td>\n                    <td colspan=\"4\" class=\"service-name\">\n                      <span class=\"icon-Services group-icon\"></span>\n                      <span class=\"service-text\">{{ group.serviceName }}</span>\n                      <span class=\"circuit-count\">({{ group.circuits.length }})</span>\n                    </td>\n                  </tr>\n\n                  <!-- Circuit Rows (shown when expanded) -->\n                  <ng-container *ngIf=\"group.expanded\">\n                    <!-- Subheader Row -->\n                    <tr class=\"subheader-row\">\n                      <th class=\"subheader-indent\"></th>\n                      <th class=\"subheader-cell\">Client</th>\n                      <th class=\"subheader-cell\">Host</th>\n                      <th class=\"subheader-cell sortable-header\" (click)=\"toggleCircuitSort(group)\">\n                        Created\n                        <span class=\"sort-indicator\" *ngIf=\"group.sortBy === 'created'\">\n                          {{ group.sortDirection === 'asc' ? '▲' : '▼' }}\n                        </span>\n                      </th>\n                      <th class=\"subheader-cell\"></th>\n                    </tr>\n\n                    <!-- Circuit Data Rows -->\n                    <tr *ngFor=\"let circuit of getSortedCircuits(group)\"\n                        (click)=\"onCircuitSelect(circuit, $event)\"\n                        [class.selected-row]=\"selectedCircuit?.id === circuit.id\"\n                        class=\"circuit-row clickable-row\">\n                      <td class=\"circuit-indent\"></td>\n                      <td class=\"circuit-entity\">\n                        <span [class]=\"getClientInfo(circuit).type === 'identity' ? 'icon-identity entity-icon' : 'icon-routers entity-icon'\"></span>\n                        <span class=\"entity-name\">{{ getClientInfo(circuit).name }}</span>\n                      </td>\n                      <td class=\"circuit-entity\">\n                        <span [class]=\"getHostInfo(circuit).type === 'identity' ? 'icon-identity entity-icon' : 'icon-routers entity-icon'\"></span>\n                        <span class=\"entity-name\">{{ getHostInfo(circuit).name }}</span>\n                      </td>\n                      <td class=\"circuit-created\">\n                        {{ circuit.createdAt | date:'short' }}\n                      </td>\n                      <td class=\"action-column\">\n                        <span class=\"circuit-nav-icon icon-Share-RBAC\" (click)=\"onCircuitPreviewOpen(circuit, $event)\" title=\"View Circuit Details\"></span>\n                      </td>\n                    </tr>\n                  </ng-container>\n                </ng-container>\n              </tbody>\n            </table>\n          </div>\n        </div>\n      </div>\n\n      <!-- Router Path Details Section -->\n      <div class=\"router-path-section\" *ngIf=\"selectedCircuit && selectedCircuitRouters.length > 0\">\n        <div class=\"router-path-container\">\n          <div class=\"router-path-header\">\n            <span class=\"router-path-icon icon-routers\"></span>\n            <span class=\"router-path-text\">Circuit Path ({{ selectedCircuitRouters.length }} routers)</span>\n          </div>\n          <div class=\"router-path-list\">\n            <table class=\"router-path-table\">\n              <thead>\n                <tr>\n                  <th>#</th>\n                  <th>Router Name</th>\n                  <th>Status</th>\n                </tr>\n              </thead>\n              <tbody>\n                <tr *ngFor=\"let router of selectedCircuitRouters; let i = index\"\n                    (click)=\"onRouterInPathSelect(router.id, 'routers')\"\n                    [class.selected-row]=\"selectedRouterInPath === router.id\"\n                    class=\"clickable-circuit-row\">\n                  <td class=\"path-index\">{{ i + 1 }}</td>\n                  <td class=\"router-name\">{{ router.name || router.id }}</td>\n                  <td class=\"router-status\">\n                    <span *ngIf=\"!router._notFound && router.connected !== undefined\"\n                          [class]=\"router.connected ? 'status-online' : 'status-offline'\">\n                      {{ router.connected ? 'Online' : 'Offline' }}\n                    </span>\n                    <span *ngIf=\"router._notFound\" class=\"status-unknown\">Unknown</span>\n                  </td>\n                </tr>\n              </tbody>\n            </table>\n          </div>\n        </div>\n      </div>\n\n      <div class=\"popup-actions\">\n        <button *ngIf=\"previewHasUnsavedLocation || previewEntity?._unsavedLocation\"\n                class=\"save-location-btn\"\n                (click)=\"onSaveLocation()\">\n          <span class=\"icon-save\"></span>\n          Save Location\n        </button>\n        <button class=\"popup-details-btn\" (click)=\"onNavigateToDetails()\">\n          Go To Edit Page\n          <span class=\"icon-RightPage\"></span>\n        </button>\n      </div>\n    </div>\n  </div>\n</div>\n","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\n\ninterface ServiceGroup {\n  serviceName: string;\n  serviceId: string;\n  circuits: any[];\n  expanded: boolean;\n  sortBy?: 'created';\n  sortDirection?: 'asc' | 'desc';\n}\n\n@Component({\n  selector: 'lib-services-with-circuits-panel',\n  templateUrl: './services-with-circuits-panel.component.html',\n  styleUrls: ['./services-with-circuits-panel.component.scss'],\n  standalone: false\n})\nexport class ServicesWithCircuitsPanelComponent implements OnChanges {\n  @Input() allCircuits: any[] = [];\n  @Input() allIdentities: any[] = [];\n  @Input() allRouters: any[] = [];\n  @Input() searchTerm: string = '';\n  @Input() selectedCircuit: any = null;\n\n  @Output() searchChanged = new EventEmitter<string>();\n  @Output() circuitSelected = new EventEmitter<any>();\n  @Output() circuitPreviewOpened = new EventEmitter<any>();\n\n  serviceGroups: ServiceGroup[] = [];\n  totalCircuits: number = 0;\n  previewCircuit: any = null;\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['allCircuits'] || changes['allIdentities'] || changes['allRouters'] || changes['searchTerm']) {\n      this.updateServiceGroups();\n    }\n  }\n\n  /**\n   * Update service groups - group circuits by service and apply search filter\n   */\n  updateServiceGroups(): void {\n    // Start with all circuits\n    let filtered = [...this.allCircuits];\n\n    // Pre-compute client/host info for all circuits to avoid repeated computation in templates\n    filtered.forEach(circuit => {\n      if (!circuit._clientInfo) {\n        circuit._clientInfo = this.computeClientInfo(circuit);\n      }\n      if (!circuit._hostInfo) {\n        circuit._hostInfo = this.computeHostInfo(circuit);\n      }\n    });\n\n    // Apply search filter if present\n    if (this.searchTerm && this.searchTerm.trim()) {\n      const searchLower = this.searchTerm.toLowerCase().trim();\n      filtered = filtered.filter(circuit => {\n        const serviceName = circuit.service?.name || '';\n        return serviceName.toLowerCase().includes(searchLower);\n      });\n    }\n\n    // Group circuits by service\n    const serviceMap = new Map<string, ServiceGroup>();\n\n    filtered.forEach(circuit => {\n      const serviceId = circuit.service?.id || 'unknown';\n      const serviceName = circuit.service?.name || 'Unknown Service';\n\n      if (!serviceMap.has(serviceId)) {\n        serviceMap.set(serviceId, {\n          serviceName,\n          serviceId,\n          circuits: [],\n          expanded: false\n        });\n      }\n\n      serviceMap.get(serviceId)!.circuits.push(circuit);\n    });\n\n    // Convert to array and sort by service name\n    this.serviceGroups = Array.from(serviceMap.values()).sort((a, b) =>\n      a.serviceName.localeCompare(b.serviceName)\n    );\n\n    this.totalCircuits = this.allCircuits.length;\n  }\n\n  /**\n   * Handle search input change\n   */\n  onSearchChange(search: string): void {\n    this.searchChanged.emit(search);\n  }\n\n  /**\n   * Handle circuit row click - opens preview and displays on map\n   */\n  onCircuitClick(circuit: any, event?: Event): void {\n    if (event) {\n      event.stopPropagation();\n    }\n    this.previewCircuit = circuit;\n    // Emit to show circuit on map\n    this.circuitSelected.emit(circuit);\n  }\n\n  /**\n   * Close the circuit preview\n   */\n  closePreview(): void {\n    this.previewCircuit = null;\n  }\n\n  /**\n   * View full circuit details - opens full circuit panel\n   */\n  viewFullCircuitDetails(): void {\n    if (this.previewCircuit) {\n      this.circuitPreviewOpened.emit(this.previewCircuit);\n    }\n  }\n\n  /**\n   * Toggle service group expansion\n   */\n  toggleGroup(group: ServiceGroup, event?: Event): void {\n    if (event) {\n      event.stopPropagation();\n    }\n    group.expanded = !group.expanded;\n  }\n\n  /**\n   * Get entity name and type from ID\n   */\n  getEntityInfo(entityId: string): { name: string; type: 'identity' | 'router' } {\n    // Try to find in identities first\n    const identity = this.allIdentities.find(i => i.id === entityId);\n    if (identity) {\n      // Check if this identity is a router type\n      const type = identity.typeId === 'Router' ? 'router' : 'identity';\n      return { name: identity.name || entityId, type };\n    }\n\n    // Try to find in routers\n    const router = this.allRouters.find(r => r.id === entityId);\n    if (router) {\n      return { name: router.name || entityId, type: 'router' };\n    }\n\n    // Unknown entity\n    return { name: entityId, type: 'identity' };\n  }\n\n  /**\n   * Compute client entity info from circuit (called once during data processing)\n   */\n  private computeClientInfo(circuit: any): { name: string; type: 'identity' | 'router' } {\n    // Handle empty strings from API - use explicit checks instead of || operator\n    const clientId = (circuit.tags?.clientId && circuit.tags.clientId.trim()) ||\n                     circuit.clientId ||\n                     circuit.client?.id ||\n                     'Unknown';\n    return this.getEntityInfo(clientId);\n  }\n\n  /**\n   * Compute host entity info from circuit (called once during data processing)\n   */\n  private computeHostInfo(circuit: any): { name: string; type: 'identity' | 'router' } {\n    // Handle empty strings from API - use explicit checks instead of || operator\n    const hostId = (circuit.tags?.hostId && circuit.tags.hostId.trim()) ||\n                   circuit.hostId ||\n                   circuit.host?.id ||\n                   'Unknown';\n    return this.getEntityInfo(hostId);\n  }\n\n  /**\n   * Get cached client entity info from circuit (used in templates)\n   */\n  getClientInfo(circuit: any): { name: string; type: 'identity' | 'router' } {\n    return circuit._clientInfo || this.computeClientInfo(circuit);\n  }\n\n  /**\n   * Get cached host entity info from circuit (used in templates)\n   */\n  getHostInfo(circuit: any): { name: string; type: 'identity' | 'router' } {\n    return circuit._hostInfo || this.computeHostInfo(circuit);\n  }\n\n  /**\n   * Get total circuits across all groups\n   */\n  getTotalCircuitsInGroups(): number {\n    return this.serviceGroups.reduce((sum, group) => sum + group.circuits.length, 0);\n  }\n\n  /**\n   * Toggle sort for a service group\n   */\n  toggleSort(group: ServiceGroup): void {\n    if (group.sortBy === 'created') {\n      // Toggle direction\n      group.sortDirection = group.sortDirection === 'asc' ? 'desc' : 'asc';\n    } else {\n      // Set to sort by created, default to descending (newest first)\n      group.sortBy = 'created';\n      group.sortDirection = 'desc';\n    }\n  }\n\n  /**\n   * Get sorted circuits for a group - always dual sort by client name first, then by created date\n   */\n  getSortedCircuits(group: ServiceGroup): any[] {\n    return [...group.circuits].sort((a, b) => {\n      // First, sort by client name\n      const clientA = this.getClientInfo(a).name.toLowerCase();\n      const clientB = this.getClientInfo(b).name.toLowerCase();\n      const clientCompare = clientA.localeCompare(clientB);\n\n      if (clientCompare !== 0) {\n        return clientCompare;\n      }\n\n      // If client names are the same, sort by created date\n      const dateA = new Date(a.createdAt || 0).getTime();\n      const dateB = new Date(b.createdAt || 0).getTime();\n\n      // Apply direction if sort is enabled, otherwise default to descending\n      const direction = group.sortBy === 'created' ? group.sortDirection : 'desc';\n      if (direction === 'asc') {\n        return dateA - dateB;\n      } else {\n        return dateB - dateA;\n      }\n    });\n  }\n}\n","<div class=\"services-with-circuits-wrapper\" [class.split-view]=\"previewCircuit\">\n  <!-- Services List Section -->\n  <div class=\"services-list-section\">\n    <div class=\"services-with-circuits-popup\">\n    <!-- Search Bar -->\n    <div class=\"search-container\">\n      <input\n        type=\"text\"\n        class=\"search-input\"\n        [(ngModel)]=\"searchTerm\"\n        (input)=\"onSearchChange(searchTerm)\"\n        placeholder=\"Search by service name...\"\n      />\n    </div>\n\n    <!-- Circuits Tree Table -->\n    <div class=\"services-table-container\">\n      <table class=\"services-table tree-table\">\n        <colgroup>\n          <col style=\"width: 30px;\">  <!-- Indent -->\n          <col>                        <!-- Client - flexible -->\n          <col>                        <!-- Host - flexible -->\n          <col style=\"width: 120px;\">  <!-- Created -->\n        </colgroup>\n        <thead>\n          <tr>\n            <th colspan=\"4\" class=\"service-column\">Service Name</th>\n          </tr>\n        </thead>\n        <tbody>\n          <ng-container *ngFor=\"let group of serviceGroups\">\n            <!-- Service Group Row -->\n            <tr class=\"group-row clickable-row\" (click)=\"toggleGroup(group, $event)\">\n              <td class=\"expand-cell\">\n                <span class=\"expand-icon icon-RightPage\" [class.expanded]=\"group.expanded\"></span>\n              </td>\n              <td colspan=\"3\" class=\"service-name\">\n                <span class=\"icon-Services group-icon\"></span>\n                <span class=\"service-text\">{{ group.serviceName }}</span>\n                <span class=\"circuit-count\">({{ group.circuits.length }})</span>\n              </td>\n            </tr>\n\n            <!-- Circuit Rows (shown when expanded) -->\n            <ng-container *ngIf=\"group.expanded\">\n              <!-- Subheader Row -->\n              <tr class=\"subheader-row\">\n                <th class=\"subheader-indent\"></th>\n                <th class=\"subheader-cell\">Client</th>\n                <th class=\"subheader-cell\">Host</th>\n                <th class=\"subheader-cell sortable-header\" (click)=\"toggleSort(group)\">\n                  Created\n                  <span class=\"sort-indicator\" *ngIf=\"group.sortBy === 'created'\">\n                    {{ group.sortDirection === 'asc' ? '▲' : '▼' }}\n                  </span>\n                </th>\n              </tr>\n\n              <!-- Circuit Data Rows -->\n              <tr *ngFor=\"let circuit of getSortedCircuits(group)\"\n                  (click)=\"onCircuitClick(circuit, $event)\"\n                  [class.selected-row]=\"previewCircuit?.id === circuit.id\"\n                  class=\"circuit-row clickable-row\">\n                <td class=\"circuit-indent\"></td>\n                <td class=\"circuit-entity\">\n                  <span [class]=\"getClientInfo(circuit).type === 'identity' ? 'icon-identity entity-icon' : 'icon-routers entity-icon'\"></span>\n                  <span class=\"entity-name\">{{ getClientInfo(circuit).name }}</span>\n                </td>\n                <td class=\"circuit-entity\">\n                  <span [class]=\"getHostInfo(circuit).type === 'identity' ? 'icon-identity entity-icon' : 'icon-routers entity-icon'\"></span>\n                  <span class=\"entity-name\">{{ getHostInfo(circuit).name }}</span>\n                </td>\n                <td class=\"circuit-created\">\n                  {{ circuit.createdAt | date:'short' }}\n                </td>\n              </tr>\n            </ng-container>\n          </ng-container>\n        </tbody>\n      </table>\n\n      <!-- Empty State -->\n      <div class=\"empty-state\" *ngIf=\"serviceGroups.length === 0 && searchTerm\">\n        <div class=\"empty-icon\">🔍</div>\n        <div class=\"empty-message\">No circuits found matching \"{{ searchTerm }}\"</div>\n      </div>\n\n      <div class=\"empty-state\" *ngIf=\"serviceGroups.length === 0 && !searchTerm\">\n        <div class=\"empty-icon\">✓</div>\n        <div class=\"empty-message\">No active circuits</div>\n      </div>\n    </div>\n\n      <!-- Results Info -->\n      <div class=\"services-info\">\n        Showing {{ getTotalCircuitsInGroups() }} of {{ totalCircuits }} circuits\n      </div>\n    </div>\n  </div>\n\n  <!-- Circuit Preview Section -->\n  <div class=\"circuit-preview-section\" *ngIf=\"previewCircuit\">\n    <div class=\"preview-header preview-header-circuit\">\n      <div class=\"preview-title\">\n        <span class=\"icon-circuit preview-icon\"></span>\n        <span class=\"preview-text\">Circuit Details</span>\n      </div>\n      <span class=\"icon-HamburgerAppClose preview-close\" (click)=\"closePreview()\"></span>\n    </div>\n    <div class=\"preview-content\">\n      <table class=\"preview-table\">\n        <tr>\n          <td class=\"preview-label\">Circuit ID:</td>\n          <td class=\"preview-value\">{{ previewCircuit.id || 'Unknown' }}</td>\n        </tr>\n        <tr>\n          <td class=\"preview-label\">Service:</td>\n          <td class=\"preview-value service-name\">\n            <span class=\"icon-Services entity-icon\"></span>\n            <span>{{ previewCircuit.service?.name || 'Unknown Service' }}</span>\n          </td>\n        </tr>\n        <tr>\n          <td class=\"preview-label\">Client:</td>\n          <td class=\"preview-value\">\n            <span [class]=\"getClientInfo(previewCircuit).type === 'identity' ? 'icon-identity entity-icon' : 'icon-routers entity-icon'\"></span>\n            <span>{{ getClientInfo(previewCircuit).name }}</span>\n          </td>\n        </tr>\n        <tr>\n          <td class=\"preview-label\">Host:</td>\n          <td class=\"preview-value\">\n            <span [class]=\"getHostInfo(previewCircuit).type === 'identity' ? 'icon-identity entity-icon' : 'icon-routers entity-icon'\"></span>\n            <span>{{ getHostInfo(previewCircuit).name }}</span>\n          </td>\n        </tr>\n        <tr>\n          <td class=\"preview-label\">Path:</td>\n          <td class=\"preview-value\">\n            <span *ngIf=\"previewCircuit.path?.nodes?.length > 0\">{{ previewCircuit.path.nodes.length }} router(s)</span>\n            <span *ngIf=\"previewCircuit.path?.length > 0 && !previewCircuit.path?.nodes\">{{ previewCircuit.path.length }} router(s)</span>\n            <span *ngIf=\"!previewCircuit.path?.nodes?.length && !previewCircuit.path?.length\">Direct</span>\n          </td>\n        </tr>\n        <tr *ngIf=\"previewCircuit.createdAt\">\n          <td class=\"preview-label\">Created:</td>\n          <td class=\"preview-value\">{{ previewCircuit.createdAt | date:'short' }}</td>\n        </tr>\n      </table>\n\n      <div class=\"preview-actions\">\n        <button class=\"preview-btn\" (click)=\"viewFullCircuitDetails()\">\n          View Full Details\n        </button>\n      </div>\n    </div>\n  </div>\n</div>\n","import { Component, Input, Output, EventEmitter, HostListener, OnInit, OnDestroy, OnChanges, SimpleChanges } from '@angular/core';\nimport { Subscription, fromEvent } from 'rxjs';\nimport { throttleTime } from 'rxjs/operators';\n\n@Component({\n  selector: 'lib-side-panel-container',\n  templateUrl: './side-panel-container.component.html',\n  styleUrls: ['./side-panel-container.component.scss'],\n  standalone: false\n})\nexport class SidePanelContainerComponent implements OnInit, OnDestroy, OnChanges {\n  @Input() isOpen: boolean = false;\n  @Input() panelType: 'marker' | 'link' | 'circuit' | 'unlocated' | 'entityList' | 'servicesWithCircuits' | null = null;\n  @Input() panelData: any = null;\n\n  // Panel-specific inputs (passed through to child components)\n  @Input() sidePanelCircuits: any[] = [];\n  @Input() selectedCircuit: any = null;\n  @Input() selectedCircuitRouters: any[] = [];\n  @Input() selectedCircuitSegment: any = null;\n  @Input() selectedRouterInPath: string | null = null;\n  @Input() circuitPreviewEntity: any = null;\n  @Input() circuitPreviewEntityType: string = '';\n\n  // Entity list inputs\n  @Input() entityListType: string = '';\n  @Input() entityListSearch: string = '';\n  @Input() entityListPage: number = 1;\n  @Input() entityListPageSize: number = 20;\n  @Input() entityListTotal: number = 0;\n  @Input() filteredEntityList: any[] = [];\n  @Input() entityListPreview: any = null;\n  @Input() entityListLocationFilter: 'all' | 'located' | 'unlocated' = 'located';\n\n  // Unlocated panel inputs\n  @Input() filteredUnlocatedIdentities: any[] = [];\n  @Input() filteredUnlocatedRouters: any[] = [];\n  @Input() unlocatedIdentitiesSearch: string = '';\n  @Input() unlocatedRoutersSearch: string = '';\n  @Input() unlocatedPreviewEntity: any = null;\n  @Input() unlocatedPreviewType: string = '';\n  @Input() unlocatedPreviewCircuits: any[] = [];\n  @Input() unlocatedPreviewHasUnsavedLocation: boolean = false;\n  @Input() selectedUnlocatedCircuit: any = null;\n  @Input() selectedUnlocatedCircuitRouters: any[] = [];\n\n  // Services with circuits inputs\n  @Input() allCircuits: any[] = [];\n  @Input() allIdentities: any[] = [];\n  @Input() allRouters: any[] = [];\n  @Input() allTerminators: any[] = [];\n  @Input() servicesWithCircuitsSearch: string = '';\n\n  // Outputs\n  @Output() closed = new EventEmitter<void>();\n\n  // Marker panel outputs\n  @Output() circuitSelected = new EventEmitter<any>();\n  @Output() routerInPathSelected = new EventEmitter<{routerId: string, routerType: string}>();\n  @Output() saveLocationChanges = new EventEmitter<{item: any, type: string}>();\n  @Output() navigateToDetails = new EventEmitter<{type: string, id: string}>();\n  @Output() circuitPreviewOpened = new EventEmitter<any>();\n  @Output() roleAttributeNavigated = new EventEmitter<string>();\n\n  // Circuit panel outputs\n  @Output() hopSelected = new EventEmitter<{hop: any, index: number}>();\n  @Output() routerSelected = new EventEmitter<{routerId: string, routerType: string}>();\n  @Output() entityClicked = new EventEmitter<{entityId: string, entityType: string}>();\n  @Output() serviceClicked = new EventEmitter<any>();\n  @Output() circuitPreviewClosed = new EventEmitter<void>();\n  @Output() entityPanelOpened = new EventEmitter<{entityId: string, entityType: string}>();\n\n  // Link panel outputs\n  @Output() routerClicked = new EventEmitter<any>();\n\n  // Entity list panel outputs\n  @Output() entityListSearchChanged = new EventEmitter<string>();\n  @Output() entityListPageChanged = new EventEmitter<number>();\n  @Output() entityListSortChanged = new EventEmitter<{column: string, direction: 'asc' | 'desc'}>();\n  @Output() entityListLocationFilterChanged = new EventEmitter<'all' | 'located' | 'unlocated'>();\n  @Output() entityListEntityClicked = new EventEmitter<any>();\n  @Output() entityListPreviewClosed = new EventEmitter<void>();\n\n  // Unlocated panel outputs\n  @Output() unlocatedIdentitiesSearchChanged = new EventEmitter<string>();\n  @Output() unlocatedRoutersSearchChanged = new EventEmitter<string>();\n  @Output() unlocatedEntityDragStarted = new EventEmitter<{event: DragEvent, entity: any, type: string}>();\n  @Output() unlocatedEntityClicked = new EventEmitter<{entity: any, type: string}>();\n  @Output() unlocatedPreviewClosed = new EventEmitter<void>();\n  @Output() unlocatedSaveLocationClicked = new EventEmitter<void>();\n\n  // Services panel outputs\n  @Output() servicesSearchChanged = new EventEmitter<string>();\n\n  // Resize state\n  sidePanelWidth = 35; // in rem, default width\n  isResizing = false;\n  minPanelWidth = 20;\n  maxPanelWidth = 60;\n  startX = 0;\n  startWidth = 0;\n\n  private mouseMoveSubscription?: Subscription;\n  private mouseUpSubscription?: Subscription;\n\n  // Expose Math to template\n  Math = Math;\n\n  ngOnInit(): void {\n    // Set initial CSS variable\n    this.updatePanelWidth();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    // Update panel width when isOpen changes\n    if (changes['isOpen']) {\n      this.updatePanelWidth();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.cleanupMouseListeners();\n  }\n\n  /**\n   * Get header class based on panel type and data\n   */\n  getHeaderClass(): string {\n    if (this.panelType === 'marker') {\n      if (this.panelData?.type === 'identity') return 'header-identity';\n      if (this.panelData?.type === 'services') return 'header-service';\n      return 'header-router';\n    } else if (this.panelType === 'entityList') {\n      if (this.entityListType === 'identities') return 'header-identity';\n      if (this.entityListType === 'routers') return 'header-router';\n      if (this.entityListType === 'services') return 'header-service';\n    } else if (this.panelType === 'servicesWithCircuits') {\n      return 'header-service';\n    } else if (this.panelType === 'circuit') {\n      return 'header-circuit';\n    } else if (this.panelType === 'link') {\n      // Check link latency and return appropriate class\n      const link = this.panelData?.link;\n      if (link) {\n        const latencyNs = Math.max(link.sourceLatency || 0, link.destLatency || 0);\n        const latencyMs = latencyNs / 1000000;\n        const GOOD_LATENCY = 50;\n        const ACCEPTABLE_LATENCY = 100;\n\n        if (latencyMs < GOOD_LATENCY) {\n          return 'header-link-good';\n        } else if (latencyMs < ACCEPTABLE_LATENCY) {\n          return 'header-link-elevated';\n        } else {\n          return 'header-link-poor';\n        }\n      }\n      return 'header-link';\n    } else if (this.panelType === 'unlocated') {\n      return 'header-unlocated';\n    }\n    return '';\n  }\n\n  /**\n   * Get panel title based on panel type and data\n   */\n  getPanelTitle(): string {\n    switch (this.panelType) {\n      case 'marker':\n        return this.panelData?.item?.name || '';\n      case 'link':\n        return 'Router Link';\n      case 'circuit':\n        return 'Active Service';\n      case 'unlocated':\n        return 'Unlocated Entities';\n      case 'entityList':\n        const filterText = this.entityListLocationFilter === 'located' ? 'Located' :\n                          this.entityListLocationFilter === 'unlocated' ? 'Unlocated' : 'All';\n        if (this.entityListType === 'identities') return `${filterText} Identities`;\n        if (this.entityListType === 'routers') return `${filterText} Routers`;\n        if (this.entityListType === 'services') return 'All Services';\n        return '';\n      case 'servicesWithCircuits':\n        return 'Active Services';\n      default:\n        return '';\n    }\n  }\n\n  /**\n   * Get title icon class based on panel type\n   */\n  getTitleIconClass(): string {\n    if (this.panelType === 'marker') {\n      if (this.panelData?.type === 'identity') return 'icon-identity';\n      if (this.panelData?.type === 'services') return 'icon-services';\n      return 'icon-routers';\n    } else if (this.panelType === 'entityList') {\n      // Show location filter icon instead of entity type icon\n      if (this.entityListLocationFilter === 'located') return 'icon-Location';\n      if (this.entityListLocationFilter === 'unlocated') return 'icon-unlocated';\n      // For 'all' filter, show entity type icon\n      if (this.entityListType === 'identities') return 'icon-identity';\n      if (this.entityListType === 'routers') return 'icon-routers';\n      if (this.entityListType === 'services') return 'icon-services';\n    } else if (this.panelType === 'link') {\n      return 'icon-routers';\n    } else if (this.panelType === 'circuit' || this.panelType === 'servicesWithCircuits') {\n      return 'icon-services';\n    } else if (this.panelType === 'unlocated') {\n      return 'icon-unlocated';\n    }\n    return '';\n  }\n\n  /**\n   * Close the side panel\n   */\n  closePanel(): void {\n    this.closed.emit();\n  }\n\n  /**\n   * Handle resize mouse down\n   */\n  onResizerMouseDown(event: MouseEvent): void {\n    event.preventDefault();\n    this.isResizing = true;\n    this.startX = event.clientX;\n    this.startWidth = this.sidePanelWidth;\n\n    // Subscribe to mouse move events (throttled to 60fps)\n    this.mouseMoveSubscription = fromEvent<MouseEvent>(document, 'mousemove')\n      .pipe(throttleTime(16)) // ~60fps\n      .subscribe((e) => this.onMouseMove(e));\n\n    // Subscribe to mouse up event\n    this.mouseUpSubscription = fromEvent<MouseEvent>(document, 'mouseup')\n      .subscribe((e) => this.onMouseUp(e));\n  }\n\n  /**\n   * Handle mouse move during resize\n   */\n  private onMouseMove(event: MouseEvent): void {\n    if (!this.isResizing) return;\n\n    const deltaX = this.startX - event.clientX;\n    const remSize = parseFloat(getComputedStyle(document.documentElement).fontSize);\n    const deltaRem = deltaX / remSize;\n    const newWidth = this.startWidth + deltaRem;\n\n    // Clamp to min/max\n    this.sidePanelWidth = Math.max(this.minPanelWidth, Math.min(this.maxPanelWidth, newWidth));\n\n    this.updatePanelWidth();\n  }\n\n  /**\n   * Handle mouse up after resize\n   */\n  private onMouseUp(event: MouseEvent): void {\n    this.isResizing = false;\n    this.cleanupMouseListeners();\n  }\n\n  /**\n   * Update CSS variable for panel width\n   */\n  private updatePanelWidth(): void {\n    const width = this.isOpen ? this.sidePanelWidth : 0;\n    document.documentElement.style.setProperty('--side-panel-width', `${width}rem`);\n  }\n\n  /**\n   * Cleanup mouse event listeners\n   */\n  private cleanupMouseListeners(): void {\n    if (this.mouseMoveSubscription) {\n      this.mouseMoveSubscription.unsubscribe();\n      this.mouseMoveSubscription = undefined;\n    }\n    if (this.mouseUpSubscription) {\n      this.mouseUpSubscription.unsubscribe();\n      this.mouseUpSubscription = undefined;\n    }\n  }\n}\n","<div *ngIf=\"isOpen\" class=\"side-panel-resizer\" (mousedown)=\"onResizerMouseDown($event)\"></div>\n<lib-form-field-container *ngIf=\"isOpen\" [showHeader]=\"false\" class=\"no-padding full-height side-panel-container\">\n  <div class=\"side-panel\">\n    <div class=\"side-panel-header\" [ngClass]=\"getHeaderClass()\">\n      <div class=\"side-panel-title\">\n        <span class=\"title-with-icon\">\n          <span [class]=\"getTitleIconClass()\" class=\"title-icon\"></span>\n          <span class=\"title-text\">{{ getPanelTitle() }}</span>\n        </span>\n      </div>\n      <div class=\"side-panel-close icon-HamburgerAppClose\" (click)=\"closePanel()\"></div>\n    </div>\n    <div class=\"side-panel-content\" [class.full-height-panel]=\"panelType === 'entityList' || panelType === 'unlocated'\">\n      <!-- Panel content will be routed here based on panelType -->\n      <ng-container [ngSwitch]=\"panelType\">\n        <!-- Marker Panel -->\n        <lib-marker-panel\n          *ngSwitchCase=\"'marker'\"\n          [markerData]=\"panelData\"\n          [circuits]=\"sidePanelCircuits\"\n          [selectedCircuit]=\"selectedCircuit\"\n          [selectedCircuitRouters]=\"selectedCircuitRouters\"\n          [selectedRouterInPath]=\"selectedRouterInPath\"\n          [allIdentities]=\"allIdentities\"\n          [allRouters]=\"allRouters\"\n          [allTerminators]=\"allTerminators\"\n          (circuitSelected)=\"circuitSelected.emit($event)\"\n          (routerInPathSelected)=\"routerInPathSelected.emit($event)\"\n          (saveLocationChanges)=\"saveLocationChanges.emit($event)\"\n          (navigateToDetails)=\"navigateToDetails.emit($event)\"\n          (circuitPreviewOpened)=\"circuitPreviewOpened.emit($event)\"\n          (roleAttributeNavigated)=\"roleAttributeNavigated.emit($event)\"\n          (panelClosed)=\"closePanel()\"\n        ></lib-marker-panel>\n\n        <!-- Link Panel -->\n        <lib-link-panel\n          *ngSwitchCase=\"'link'\"\n          [linkData]=\"panelData\"\n          (routerClicked)=\"routerClicked.emit($event)\"\n        ></lib-link-panel>\n\n        <!-- Circuit Panel -->\n        <lib-circuit-panel\n          *ngSwitchCase=\"'circuit'\"\n          [circuitData]=\"panelData\"\n          [selectedSegmentIndex]=\"selectedCircuitSegment?.segmentIndex\"\n          [selectedRouterId]=\"selectedRouterInPath\"\n          [previewEntity]=\"circuitPreviewEntity\"\n          [previewEntityType]=\"circuitPreviewEntityType\"\n          (hopSelected)=\"hopSelected.emit($event)\"\n          (routerSelected)=\"routerSelected.emit($event)\"\n          (entityClicked)=\"entityClicked.emit($event)\"\n          (serviceClicked)=\"serviceClicked.emit($event)\"\n          (previewClosed)=\"circuitPreviewClosed.emit()\"\n          (navigateToDetails)=\"navigateToDetails.emit($event)\"\n          (entityPanelOpened)=\"entityPanelOpened.emit($event)\"\n        ></lib-circuit-panel>\n\n        <!-- Entity List Panel -->\n        <lib-entity-list-panel\n          *ngSwitchCase=\"'entityList'\"\n          [entityType]=\"entityListType\"\n          [entities]=\"filteredEntityList\"\n          [currentPage]=\"entityListPage\"\n          [pageSize]=\"entityListPageSize\"\n          [totalEntities]=\"entityListTotal\"\n          [searchTerm]=\"entityListSearch\"\n          [locationFilter]=\"entityListLocationFilter\"\n          [previewEntity]=\"entityListPreview\"\n          [previewCircuits]=\"sidePanelCircuits\"\n          [selectedCircuit]=\"selectedCircuit\"\n          [selectedCircuitRouters]=\"selectedCircuitRouters\"\n          [selectedRouterInPath]=\"selectedRouterInPath\"\n          [Math]=\"Math\"\n          [allIdentities]=\"allIdentities\"\n          [allRouters]=\"allRouters\"\n          (searchChanged)=\"entityListSearchChanged.emit($event)\"\n          (pageChanged)=\"entityListPageChanged.emit($event)\"\n          (sortChanged)=\"entityListSortChanged.emit($event)\"\n          (locationFilterChanged)=\"entityListLocationFilterChanged.emit($event)\"\n          (entityClicked)=\"entityListEntityClicked.emit($event)\"\n          (previewClosed)=\"entityListPreviewClosed.emit()\"\n          (circuitSelected)=\"circuitSelected.emit($event)\"\n          (routerInPathSelected)=\"routerInPathSelected.emit($event)\"\n          (saveLocationChanges)=\"saveLocationChanges.emit($event)\"\n          (navigateToDetails)=\"navigateToDetails.emit($event)\"\n          (circuitPreviewOpened)=\"circuitPreviewOpened.emit($event)\"\n          (roleAttributeNavigated)=\"roleAttributeNavigated.emit($event)\"\n          (entityDragStarted)=\"unlocatedEntityDragStarted.emit($event)\"\n        ></lib-entity-list-panel>\n\n        <!-- Unlocated Panel -->\n        <lib-unlocated-panel\n          *ngSwitchCase=\"'unlocated'\"\n          [unlocatedData]=\"panelData\"\n          [filteredIdentities]=\"filteredUnlocatedIdentities\"\n          [filteredRouters]=\"filteredUnlocatedRouters\"\n          [identitiesSearch]=\"unlocatedIdentitiesSearch\"\n          [routersSearch]=\"unlocatedRoutersSearch\"\n          [previewEntity]=\"unlocatedPreviewEntity\"\n          [previewType]=\"unlocatedPreviewType\"\n          [previewCircuits]=\"unlocatedPreviewCircuits\"\n          [previewHasUnsavedLocation]=\"unlocatedPreviewHasUnsavedLocation\"\n          [selectedCircuit]=\"selectedUnlocatedCircuit\"\n          [selectedCircuitRouters]=\"selectedUnlocatedCircuitRouters\"\n          [selectedRouterInPath]=\"selectedRouterInPath\"\n          [allIdentities]=\"allIdentities\"\n          [allRouters]=\"allRouters\"\n          (identitiesSearchChanged)=\"unlocatedIdentitiesSearchChanged.emit($event)\"\n          (routersSearchChanged)=\"unlocatedRoutersSearchChanged.emit($event)\"\n          (entityDragStarted)=\"unlocatedEntityDragStarted.emit($event)\"\n          (entityClicked)=\"unlocatedEntityClicked.emit($event)\"\n          (previewClosed)=\"unlocatedPreviewClosed.emit()\"\n          (saveLocationClicked)=\"unlocatedSaveLocationClicked.emit()\"\n          (circuitSelected)=\"circuitSelected.emit($event)\"\n          (routerInPathSelected)=\"routerInPathSelected.emit($event)\"\n          (navigateToDetails)=\"navigateToDetails.emit($event)\"\n          (circuitPreviewOpened)=\"circuitPreviewOpened.emit($event)\"\n          (roleAttributeNavigated)=\"roleAttributeNavigated.emit($event)\"\n        ></lib-unlocated-panel>\n\n        <!-- Services with Circuits Panel -->\n        <lib-services-with-circuits-panel\n          *ngSwitchCase=\"'servicesWithCircuits'\"\n          [allCircuits]=\"allCircuits\"\n          [allIdentities]=\"allIdentities\"\n          [allRouters]=\"allRouters\"\n          [searchTerm]=\"servicesWithCircuitsSearch\"\n          [selectedCircuit]=\"selectedCircuit\"\n          (searchChanged)=\"servicesSearchChanged.emit($event)\"\n          (circuitSelected)=\"circuitSelected.emit($event)\"\n          (circuitPreviewOpened)=\"circuitPreviewOpened.emit($event)\"\n        ></lib-services-with-circuits-panel>\n      </ng-container>\n    </div>\n  </div>\n</lib-form-field-container>\n","    import {Component, OnInit, OnDestroy, Inject, ViewChild, SimpleChanges, ElementRef, AfterViewInit, HostListener} from '@angular/core';\nimport {ZITI_DATA_SERVICE, ZitiDataService} from '../../services/ziti-data.service';\nimport {SETTINGS_SERVICE, SettingsService} from '../../services/settings.service';\nimport { Subscription, fromEvent } from 'rxjs';\nimport { throttleTime, filter, distinctUntilChanged } from 'rxjs/operators';\nimport {GrowlerService} from \"../../features/messaging/growler.service\";\nimport {GrowlerModel} from \"../../features/messaging/growler.model\";\nimport {Router, ActivatedRoute} from '@angular/router';\nimport {FilterObj} from '../../features/data-table/data-table-filter.service';\nimport {MatDialog} from '@angular/material/dialog';\nimport {ConfirmComponent} from '../../features/confirm/confirm.component';\nimport {GeolocationService} from './services/geolocation.service';\nimport {MapDataService} from './services/map-data.service';\nimport {CircuitCalculationService} from './services/circuit-calculation.service';\nimport {CircuitPathBuilderService} from './services/circuit-path-builder.service';\nimport {CircuitFilterService} from './services/circuit-filter.service';\nimport {MapMarkerService} from './services/map-marker.service';\nimport {MapRenderingService} from './services/map-rendering.service';\nimport {MapStateService} from './services/map-state.service';\nimport L from 'leaflet';\nimport 'leaflet.markercluster';\n\nimport {defer} from 'lodash-es';\n\n@Component({\n  selector: 'lib-geolocate',\n  templateUrl: './geolocate.component.html',\n  styleUrls: ['./geolocate.component.scss'],\n  standalone: false\n})\nexport class GeolocateComponent implements OnInit, OnDestroy {\n  map: any;\n  identityClusterGroup: any;\n  routerClusterGroup: any;\n  pageTitle = 'Dashboard';\n  totalIdentities = 0;\n  totalServices = 0;\n  totalConfigs = 0;\n  totalEdgeRouters = 0;\n  totalServicePolicies = 0;\n  totalSessions = 0;\n  showVisualizer = false;\n\n  // DEBUG: Set to true to randomly manipulate link latency for testing color thresholds\n  DEBUG_TEST_LINK_LATENCY = true;\n\n  // Counts for entities without geolocation\n  unlocatedIdentities = 0;\n  unlocatedRouters = 0;\n  servicesWithActiveCircuits = 0;\n\n  // Counts for entities with geolocation\n  geolocatedIdentities = 0;\n  geolocatedRouters = 0;\n\n  // Search for services with circuits\n  servicesWithCircuitsSearch = '';\n\n  // Search for unlocated identities and routers\n  unlocatedIdentitiesSearch = '';\n  filteredUnlocatedIdentities: any[] = [];\n  unlocatedRoutersSearch = '';\n  filteredUnlocatedRouters: any[] = [];\n\n  // Pagination and search for entity lists\n  entityListSearch = '';\n  entityListPage = 1;\n  entityListPageSize = 20;\n  entityListTotal = 0;\n  filteredEntityList: any[] = [];\n  fullEntityList: any[] = [];\n  entityListType: string = '';\n  entityListSortColumn: string = '';\n  entityListSortDirection: 'asc' | 'desc' = 'desc';\n  entityListLocationFilter: 'all' | 'located' | 'unlocated' = 'located';\n\n  // Note: Marker, rendering, and location properties moved to MapMarkerService, MapRenderingService, and MapStateService\n\n  // Drag and drop state\n  private draggedEntity: any = null;\n  private draggedEntityType: string = '';\n\n  // Data caches\n  circuits: any[] = [];\n  terminators: any[] = [];\n  identities: any[] = [];\n  edgeRouters: any[] = [];\n  services: any[] = [];\n  links: any[] = [];\n\n  // Note: Visibility toggles, side panel state, and selected circuit state moved to MapStateService\n\n  // Entity list preview in split view\n  entityListPreview: any = null; // Preview data for split view\n  entityListPreviewType: 'identity' | 'routers' | 'services' | null = null;\n  selectedRouterInPath: string | null = null; // Track the selected router in circuit path\n  circuitPreviewEntity: any = null; // Preview entity in circuit panel\n  circuitPreviewEntityType: string = ''; // Type of preview entity (identity/routers)\n\n  // Entity preview in unlocated panel\n  unlocatedPreviewEntity: any = null;\n  unlocatedPreviewType: string = '';\n  unlocatedPreviewHasUnsavedLocation: boolean = false;\n  unlocatedPreviewCircuits: any[] = [];\n\n  // Side panel resizing (width moved to MapStateService)\n  isResizing = false;\n  minPanelWidth = 20; // minimum width in rem\n  maxPanelWidth = 60; // maximum width in rem\n  startX = 0;\n  startWidth = 0;\n\n  // Note: circuitMarkerIds moved to MapMarkerService\n\n  // Service and identity filters (multi-select)\n  selectedServiceFilters: any[] = [];\n  selectedIdentityFilters: any[] = [];\n\n  serviceRoleAttributes: any[] = [];\n  serviceNamedAttributes: any[] = [];\n  servicesNameIdMap: { [key: string]: string } = {};\n  servicesIdNameMap: { [key: string]: string } = {};\n\n  identityRoleAttributes: any[] = [];\n  identityNamedAttributes: any[] = [];\n  identitiesNameIdMap: { [key: string]: string } = {};\n  identitiesIdNameMap: { [key: string]: string } = {};\n\n  routerRoleAttributes: any[] = [];\n\n  // Note: Filter state properties (selectedServiceAttributes, selectedIdentityAttributes, etc.)\n  // and dropdown visibility moved to MapStateService\n\n  private subscription = new Subscription();\n  private documentClickHandler = this.handleDocumentClick.bind(this);\n\n  edgeRoutersInit = false;\n  identitiesInit = false;\n  isLoading = false;\n\n  // Expose Math to template\n  Math = Math;\n\n  dialogRef: any;\n\n  constructor(\n    @Inject(ZITI_DATA_SERVICE) private zitiDataService: ZitiDataService,\n    @Inject(SETTINGS_SERVICE) private settingsService: SettingsService,\n    private router: Router,\n    private route: ActivatedRoute,\n    private growlerService: GrowlerService,\n    private dialogForm: MatDialog,\n    private geolocationService: GeolocationService,\n    private mapDataService: MapDataService,\n    private circuitCalculationService: CircuitCalculationService,\n    private circuitPathBuilderService: CircuitPathBuilderService,\n    private circuitFilterService: CircuitFilterService,\n    public mapMarkerService: MapMarkerService,\n    public mapRenderingService: MapRenderingService,\n    public mapStateService: MapStateService\n  ) {}\n\n  // Template getters/setters for two-way binding - delegates to mapStateService\n  get selectedRouterAttributes(): any[] { return this.mapStateService.selectedRouterAttributes; }\n  set selectedRouterAttributes(value: any[]) { this.mapStateService.selectedRouterAttributes = value; }\n\n  get selectedIdentityAttributes(): any[] { return this.mapStateService.selectedIdentityAttributes; }\n  set selectedIdentityAttributes(value: any[]) { this.mapStateService.selectedIdentityAttributes = value; }\n\n  get selectedIdentityNamedAttributes(): any[] { return this.mapStateService.selectedIdentityNamedAttributes; }\n  set selectedIdentityNamedAttributes(value: any[]) { this.mapStateService.selectedIdentityNamedAttributes = value; }\n\n  get selectedServiceAttributes(): any[] { return this.mapStateService.selectedServiceAttributes; }\n  set selectedServiceAttributes(value: any[]) { this.mapStateService.selectedServiceAttributes = value; }\n\n  get selectedServiceNamedAttributes(): any[] { return this.mapStateService.selectedServiceNamedAttributes; }\n  set selectedServiceNamedAttributes(value: any[]) { this.mapStateService.selectedServiceNamedAttributes = value; }\n\n  get selectedConnectionStatus(): string { return this.mapStateService.selectedConnectionStatus; }\n  set selectedConnectionStatus(value: string) { this.mapStateService.selectedConnectionStatus = value; }\n\n  get filtersApplied(): boolean { return this.mapStateService.filtersApplied; }\n  set filtersApplied(value: boolean) { this.mapStateService.filtersApplied = value; }\n\n  get showConnectionStatusFilterSelector(): boolean { return this.mapStateService.showConnectionStatusFilterSelector; }\n  set showConnectionStatusFilterSelector(value: boolean) { this.mapStateService.showConnectionStatusFilterSelector = value; }\n\n  get sidePanelOpen(): boolean { return this.mapStateService.sidePanelOpen; }\n  set sidePanelOpen(value: boolean) { this.mapStateService.sidePanelOpen = value; }\n\n  get sidePanelType() { return this.mapStateService.sidePanelType; }\n  set sidePanelType(value: any) { this.mapStateService.sidePanelType = value; }\n\n  get sidePanelData() { return this.mapStateService.sidePanelData; }\n  set sidePanelData(value: any) { this.mapStateService.sidePanelData = value; }\n\n  get sidePanelCircuits() { return this.mapStateService.sidePanelCircuits; }\n  set sidePanelCircuits(value: any[]) { this.mapStateService.sidePanelCircuits = value; }\n\n  get routersVisible(): boolean { return this.mapStateService.routersVisible; }\n  set routersVisible(value: boolean) { this.mapStateService.routersVisible = value; }\n\n  get identitiesVisible(): boolean { return this.mapStateService.identitiesVisible; }\n  set identitiesVisible(value: boolean) { this.mapStateService.identitiesVisible = value; }\n\n  get linksVisible(): boolean { return this.mapStateService.linksVisible; }\n  set linksVisible(value: boolean) { this.mapStateService.linksVisible = value; }\n\n  get activeCircuitsVisible(): boolean { return this.mapStateService.activeCircuitsVisible; }\n  set activeCircuitsVisible(value: boolean) { this.mapStateService.activeCircuitsVisible = value; }\n\n  get clusteringEnabled(): boolean { return this.mapStateService.clusteringEnabled; }\n  set clusteringEnabled(value: boolean) { this.mapStateService.clusteringEnabled = value; }\n\n  get selectedCircuit() { return this.mapStateService.selectedCircuit; }\n  set selectedCircuit(value: any) { this.mapStateService.selectedCircuit = value; }\n\n  get selectedCircuitRouters() { return this.mapStateService.selectedCircuitRouters; }\n  set selectedCircuitRouters(value: any[]) { this.mapStateService.selectedCircuitRouters = value; }\n\n  get selectedCircuitSegment() { return this.mapStateService.selectedCircuitSegment; }\n  set selectedCircuitSegment(value: any) { this.mapStateService.selectedCircuitSegment = value; }\n\n  get selectedUnlocatedCircuit() { return this.mapStateService.selectedUnlocatedCircuit; }\n  set selectedUnlocatedCircuit(value: any) { this.mapStateService.selectedUnlocatedCircuit = value; }\n\n  get selectedUnlocatedCircuitRouters() { return this.mapStateService.selectedUnlocatedCircuitRouters; }\n  set selectedUnlocatedCircuitRouters(value: any[]) { this.mapStateService.selectedUnlocatedCircuitRouters = value; }\n\n  @ViewChild('routerFilterSelector') routerFilterSelector: any;\n  @ViewChild('identityFilterSelector') identityFilterSelector: any;\n  @ViewChild('serviceFilterSelector') serviceFilterSelector: any;\n  @ViewChild('connectionStatusFilterSelector') connectionStatusFilterSelector: ElementRef;\n\n  ngOnInit(): void {\n    // Subscribe to marker service events\n    this.subscription.add(\n      this.mapMarkerService.markerClicked.subscribe(data => {\n        // If entity list panel is open with a preview, update the preview instead of switching panels\n        if (this.mapStateService.sidePanelType === 'entityList' && this.entityListPreview?.item?.id === data.item.id) {\n          // Update the existing preview with new location (in case marker was dragged)\n          this.entityListPreview = {\n            ...this.entityListPreview,\n            location: data.location\n          };\n        } else {\n          // Otherwise, open marker panel as usual\n          this.openSidePanel('marker', data);\n        }\n      })\n    );\n\n    this.subscription.add(\n      this.mapMarkerService.geolocationRemoved.subscribe(({ item, type, marker }) => {\n        this.handleGeolocationRemoval(item, type, marker);\n      })\n    );\n\n    this.subscription.add(\n      this.mapMarkerService.geolocationUpdated.subscribe(({ item, lat, lng, type }) => {\n        this.updateGeolocationLocal(item, lat, lng, type);\n\n        // If entity list panel is showing a preview of this entity, update the location\n        if (this.mapStateService.sidePanelType === 'entityList' && this.entityListPreview?.item?.id === item.id) {\n          const location = type === 'identity'\n            ? this.mapStateService.identityLocations.get(item.id)\n            : this.mapStateService.routerLocations.get(item.id);\n\n          this.entityListPreview = {\n            ...this.entityListPreview,\n            location: location\n          };\n        }\n      })\n    );\n\n    // Subscribe to rendering service events\n    this.subscription.add(\n      this.mapRenderingService.linkClicked.subscribe(data => {\n        this.openSidePanel('link', data);\n      })\n    );\n\n    this.subscription.add(\n      this.mapRenderingService.circuitSegmentClicked.subscribe(data => {\n        this.openSidePanel('circuit', data);\n      })\n    );\n\n    // Subscribe to settings changes to detect re-authentication\n    // When user re-authenticates after timeout, reload map data\n    this.subscription.add(\n      this.settingsService.settingsChange.pipe(\n        filter((settings: any) => !!settings?.session?.id),\n        distinctUntilChanged((prev: any, curr: any) => prev?.session?.id === curr?.session?.id)\n      ).subscribe((settings: any) => {\n        // Session ID changed - user has re-authenticated\n        // Reload map data to get latest information\n        if (this.map) {\n          this.isLoading = true;\n          const attributesPromise = this.getRoleAttributest();\n          const summaryPromise = this.loadEntityCounts();\n          const mapPromise = this.loadMapData();\n          Promise.all([attributesPromise, summaryPromise, mapPromise]).finally(() => {\n            this.isLoading = false;\n          });\n        }\n      })\n    );\n\n    const attributesPromise = this.getRoleAttributest();\n    this.getIdentityNamedAttributes(); // Initialize identity names for filtering\n    this.getServiceNamedAttributes(); // Initialize service names for filtering\n\n    // Only initialize map if it doesn't already exist\n    if (!this.map) {\n      this.map = L.map('MainMap', {\n        zoomControl: false,\n        attributionControl: false\n      });\n\n      L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {\n        attribution: '&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors',\n        subdomains: ['a', 'b', 'c'],\n        maxZoom: 19,\n        minZoom: 2,\n        crossOrigin: true,\n        // Add tile loading optimizations\n        updateWhenIdle: true,\n        updateWhenZooming: false,\n        keepBuffer: 2\n      }).addTo(this.map);\n\n      L.control.attribution({\n        position: 'bottomleft'\n      }).addTo(this.map);\n\n      this.map.setView(new L.LatLng(41.850033, -87.6500523), 4);\n\n      // Map click handler to clear marker selection when clicking on the map (not on a marker)\n      this.map.on('click', (e: any) => {\n        // Clear selected marker if one is selected\n        this.mapMarkerService.clearSelectedMarker(this.identityClusterGroup, this.routerClusterGroup);\n      });\n\n      // Add map click handler to disable dragging when clicking outside markers\n      this.map.on('click', (event: any) => {\n        // Check if we clicked on a marker or on the map itself\n        // If currentDraggableMarker exists and we're not clicking on it, disable dragging\n        this.mapMarkerService.disableCurrentDraggableMarker();\n      });\n\n      // Initialize separate marker cluster groups for identities and routers\n      if ((L as any).markerClusterGroup) {\n        // Identity cluster group\n        this.identityClusterGroup = (L as any).markerClusterGroup({\n          maxClusterRadius: 80,\n          spiderfyOnMaxZoom: true,\n          showCoverageOnHover: true,\n          zoomToBoundsOnClick: true,\n          iconCreateFunction: (cluster: any) => {\n            const count = cluster.getChildCount();\n            let size = 'small';\n            if (count >= 100) size = 'large';\n            else if (count >= 10) size = 'medium';\n\n            return L.divIcon({\n              html: `<div><span>${count}</span></div>`,\n              className: `marker-cluster marker-cluster-identity marker-cluster-${size}`,\n              iconSize: L.point(40, 40)\n            });\n          }\n        });\n\n        this.map.addLayer(this.identityClusterGroup);\n\n        // Router cluster group\n        this.routerClusterGroup = (L as any).markerClusterGroup({\n          maxClusterRadius: 80,\n          spiderfyOnMaxZoom: true,\n          showCoverageOnHover: true,\n          zoomToBoundsOnClick: true,\n          iconCreateFunction: (cluster: any) => {\n            const count = cluster.getChildCount();\n            let size = 'small';\n            if (count >= 100) size = 'large';\n            else if (count >= 10) size = 'medium';\n\n            return L.divIcon({\n              html: `<div><span>${count}</span></div>`,\n              className: `marker-cluster marker-cluster-router marker-cluster-${size}`,\n              iconSize: L.point(40, 40)\n            });\n          }\n        });\n\n        this.map.addLayer(this.routerClusterGroup);\n      }\n    }\n\n    // Click handler to close dropdowns when clicking outside (only add once)\n    if (!this.documentClickHandler) {\n      document.addEventListener('click', this.documentClickHandler);\n    }\n\n    // Throttled mousemove handler for side panel resizing (only add once)\n    if (this.subscription.closed) {\n      this.subscription.add(\n        fromEvent<MouseEvent>(document, 'mousemove')\n          .pipe(throttleTime(16)) // ~60fps\n          .subscribe(event => this.onMouseMove(event))\n      );\n    }\n\n    this.isLoading = true;\n    const summaryPromise = this.loadEntityCounts();\n    const mapPromise = this.loadMapData();\n    Promise.all([attributesPromise, summaryPromise, mapPromise]).then(() => {\n    }).finally(() => {\n      this.isLoading = false;\n    });\n    this.checkVisualizerFeature();\n  }\n\n  getRoleAttributest() {\n    const serviceRolesPromise = this.getServiceRoleAttributes().then((result) => {\n      this.serviceRoleAttributes = result.data;\n    });\n    const identityRolesPromise = this.getIdentityRoleAttributes().then((result) => {\n      this.identityRoleAttributes = result.data;\n    });\n    const routerRolesPromise = this.getRouterRoleAttributes().then((result) => {\n      this.routerRoleAttributes = result.data;\n    });\n    return Promise.all([routerRolesPromise, identityRolesPromise, serviceRolesPromise]);\n  }\n\n  public getRouterRoleAttributes() {\n    return this.zitiDataService.get('edge-router-role-attributes', {}, []);\n  }\n\n  public getIdentityRoleAttributes() {\n    return this.zitiDataService.get('identity-role-attributes', {}, []);\n  }\n\n  public getServiceRoleAttributes() {\n    return this.zitiDataService.get('service-role-attributes', {}, []);\n  }\n\n  loadEntityCounts() {\n    this.isLoading = true;\n    const paging = {\n      searchOn: 'name',\n      filter: '',\n      total: 1,\n      page: 1,\n      sort: 'name',\n      order: 'asc'\n    };\n    const summaryPromise = this.zitiDataService.get('summary', paging, []);\n\n    return summaryPromise.then((result: any) => {\n      const data = result?.data || [];\n      this.totalIdentities = data['identities'];\n      this.totalEdgeRouters = data['routers.edge'];\n      this.totalServices = data['services'];\n      this.totalConfigs = data['configs'];\n      this.totalServicePolicies = data['servicePolicies'];\n      this.totalSessions = data['sessions'];\n    }).finally(() => {\n      this.isLoading = false;\n    });\n  }\n\n  loadMapData() {\n    this.mapMarkerService.identityMarkers = [];\n    this.mapMarkerService.routerMarkers = [];\n\n    const edgeRoutersPromise = this.loadRouters();\n    const identitiesPromise = this.loadIdentities();\n    const servicesPromise = this.loadServices();\n    return Promise.all([edgeRoutersPromise, identitiesPromise, servicesPromise]).then((results) => {\n      this.edgeRoutersInit = true;\n      const edgeRouters = results[0].data || [];\n      this.edgeRouters = edgeRouters;\n\n      // Combine and deduplicate by ID\n      const routerMap = new Map();\n      [...edgeRouters].forEach(router => {\n        if (router.id && !routerMap.has(router.id)) {\n          routerMap.set(router.id, router);\n        }\n      });\n      const uniqueRouters = Array.from(routerMap.values());\n\n      // Calculate unlocated routers count\n      this.unlocatedRouters = uniqueRouters.filter(router => !router.tags?.geolocation).length;\n      this.geolocatedRouters = uniqueRouters.filter(router => router.tags?.geolocation).length;\n\n      this.mapMarkerService.addMarkers(\n        uniqueRouters,\n        'routers',\n        this.routerClusterGroup,\n        this.map,\n        this.mapStateService.routerLocations,\n        this.mapStateService.identityLocations\n      );\n\n      // Load links, circuits and terminators after routers are loaded and their locations are stored\n      this.loadLinks();\n      this.loadCircuits();\n      this.loadTerminators();\n    });\n  }\n\n  loadRouters() {\n    // Fetch routers using the service\n    return this.mapDataService.fetchRouters()\n      .then(({ routers, routerTypes }) => {\n        // Update state service's router types map\n        this.mapStateService.setRouterTypes(routerTypes);\n\n        // Apply role attribute filtering\n        let routersToDisplay = routers;\n        if (this.mapStateService.selectedRouterAttributes.length > 0) {\n          routersToDisplay = routers.filter((router: any) => {\n            const routerRoles = router.roleAttributes || [];\n            return this.mapStateService.selectedRouterAttributes.some(selectedAttr =>\n              routerRoles.includes(selectedAttr)\n            );\n          });\n        }\n\n        // Apply connection status filter\n        if (this.mapStateService.selectedConnectionStatus === 'online') {\n          routersToDisplay = routersToDisplay.filter((router: any) => router.isOnline === true);\n        } else if (this.mapStateService.selectedConnectionStatus === 'offline') {\n          routersToDisplay = routersToDisplay.filter((router: any) => router.isOnline === false);\n        }\n\n        return { data: routersToDisplay };\n      });\n  }\n\n  loadIdentities() {\n    // Build filters for API call\n    let identityFilters: any = [];\n    if (this.mapStateService.selectedIdentityAttributes.length > 0) {\n      // Build filter like: roleAttributes contains \"attr1\" or roleAttributes contains \"attr2\"\n      const searchFilter = {\n        columnId: 'roleAttributes',\n        value: this.mapStateService.selectedIdentityAttributes,\n        filterName: 'Identity Attributes',\n        type: 'ATTRIBUTE'\n      };\n      identityFilters.push(searchFilter);\n    }\n    if (this.mapStateService.selectedIdentityNamedAttributes.length > 0) {\n      // Convert identity names to IDs for filtering\n      const identityIds = this.mapStateService.selectedIdentityNamedAttributes\n        .map(name => this.identitiesNameIdMap[name])\n        .filter(id => id); // Filter out any undefined values\n\n      if (identityIds.length > 0) {\n        const namedFilter = {\n          columnId: 'id',\n          value: identityIds,\n          filterName: 'Identity Id',\n          type: 'TEXTINPUT',\n          verb: '='\n        };\n        identityFilters.push(namedFilter);\n      }\n    }\n\n    // Fetch identities using the service\n    return this.mapDataService.fetchIdentities(identityFilters).then((allIdentities) => {\n      this.identitiesInit = true;\n\n      // Apply connection status filter\n      if (this.mapStateService.selectedConnectionStatus === 'online') {\n        allIdentities = allIdentities.filter((identity: any) => identity.edgeRouterConnectionStatus === 'online');\n      } else if (this.mapStateService.selectedConnectionStatus === 'offline') {\n        allIdentities = allIdentities.filter((identity: any) => identity.edgeRouterConnectionStatus !== 'online');\n      }\n\n      this.identities = allIdentities;\n\n      // Calculate unlocated identities count (exclude Router-type identities)\n      this.unlocatedIdentities = this.identities.filter(identity => identity.typeId !== 'Router' && !identity.tags?.geolocation).length;\n      this.geolocatedIdentities = this.identities.filter(identity => identity.typeId !== 'Router' && identity.tags?.geolocation).length;\n\n      this.mapMarkerService.addMarkers(\n        this.identities,\n        'identity',\n        this.identityClusterGroup,\n        this.map,\n        this.mapStateService.routerLocations,\n        this.mapStateService.identityLocations\n      );\n    });\n  }\n\n  loadServices() {\n    // Build filters for API call\n    let serviceFilters: any = [];\n    if (this.mapStateService.selectedServiceAttributes.length > 0) {\n      // Build filter like: roleAttributes contains \"attr1\" or roleAttributes contains \"attr2\"\n      const searchFilter = {\n        columnId: 'roleAttributes',\n        value: this.mapStateService.selectedServiceAttributes,\n        filterName: 'Service Attributes',\n        type: 'ATTRIBUTE'\n      };\n      serviceFilters.push(searchFilter);\n    }\n    if (this.mapStateService.selectedServiceNamedAttributes.length > 0) {\n      // Convert service names to IDs for filtering\n      const serviceIds = this.mapStateService.selectedServiceNamedAttributes\n        .map(name => this.servicesNameIdMap[name])\n        .filter(id => id); // Filter out any undefined values\n\n      if (serviceIds.length > 0) {\n        const namedFilter = {\n          columnId: 'id',\n          value: serviceIds,\n          filterName: 'Service Id',\n          type: 'TEXTINPUT',\n          verb: '='\n        };\n        serviceFilters.push(namedFilter);\n      }\n    }\n\n    // Fetch services using the service\n    return this.mapDataService.fetchServices(serviceFilters).then((services) => {\n      this.services = services;\n    });\n  }\n\n  // Wrapper method - delegates to MapMarkerService with additional bounds fitting logic\n  addMarkers(data: any[], type: string, skipAutoFit: boolean = false) {\n    const clusterGroup = type === 'identity' ? this.identityClusterGroup : this.routerClusterGroup;\n\n    const markers = this.mapMarkerService.addMarkers(\n      data,\n      type,\n      clusterGroup,\n      this.map,\n      this.mapStateService.routerLocations,\n      this.mapStateService.identityLocations\n    );\n\n    // Fit bounds to show all markers after both routers and identities are loaded\n    // Skip if explicitly requested (e.g., during drag-and-drop operations)\n    if (!skipAutoFit && this.edgeRoutersInit && this.identitiesInit && markers.length > 0) {\n      if (this.identityClusterGroup && this.routerClusterGroup) {\n        const allMarkers = [...this.mapMarkerService.identityMarkers, ...this.mapMarkerService.routerMarkers];\n        if (allMarkers.length > 0) {\n          const group = L.featureGroup(allMarkers);\n          // Set maxZoom to 10 increments less than the map's maximum to prevent zooming in too far\n          // Users can still manually zoom in further if needed\n          const mapMaxZoom = this.map.getMaxZoom();\n          const autoZoomMax = Math.max(1, mapMaxZoom - 10);\n          this.map.fitBounds(group.getBounds(), { maxZoom: autoZoomMax });\n        }\n      }\n    }\n  }\n\n  loadLinks() {\n    this.mapDataService.fetchLinks().then((links) => {\n      // DEBUG: Randomly manipulate link latency for testing\n      if (this.DEBUG_TEST_LINK_LATENCY) {\n        links = links.map(link => {\n          // 50% chance of excellent latency (green - under 50ms)\n          // 30% chance of elevated latency (yellow - 50-100ms)\n          // 20% chance of problematic latency (red - over 100ms)\n          const random = Math.random();\n          let testLatencyMs;\n\n          if (random < 0.5) {\n            // Excellent latency: 10-50ms\n            testLatencyMs = 10 + Math.random() * 40;\n          } else if (random < 0.8) {\n            // Elevated latency: 50-100ms\n            testLatencyMs = 50 + Math.random() * 50;\n          } else {\n            // Problematic latency: 100-300ms\n            testLatencyMs = 100 + Math.random() * 200;\n          }\n\n          // Convert milliseconds to nanoseconds\n          const testLatencyNs = Math.floor(testLatencyMs * 1000000);\n\n          return {\n            ...link,\n            sourceLatency: testLatencyNs,\n            destLatency: testLatencyNs\n          };\n        });\n      }\n\n      this.links = links;\n      // Links will be drawn when data is ready or when filters change\n      if (this.mapStateService.selectedServiceAttributes.length === 0 &&\n          this.mapStateService.selectedServiceNamedAttributes.length === 0 &&\n          this.mapStateService.selectedIdentityAttributes.length === 0 &&\n          this.mapStateService.selectedIdentityNamedAttributes.length === 0 &&\n          this.mapStateService.selectedRouterAttributes.length === 0) {\n        this.drawLinks(this.links);\n      }\n    });\n  }\n\n  loadCircuits() {\n    this.mapDataService.fetchCircuits().then((circuits) => {\n      this.circuits = circuits;\n\n      // Calculate count of services with active circuits using the service\n      this.servicesWithActiveCircuits = this.circuitCalculationService.calculateServicesWithActiveCircuits(this.circuits);\n\n      // Draw circuits if no filters are active AND circuits are visible\n      if (this.mapStateService.selectedServiceAttributes.length === 0 &&\n          this.mapStateService.selectedServiceNamedAttributes.length === 0 &&\n          this.mapStateService.selectedIdentityAttributes.length === 0 &&\n          this.mapStateService.selectedIdentityNamedAttributes.length === 0 &&\n          this.mapStateService.selectedRouterAttributes.length === 0 &&\n          this.mapStateService.activeCircuitsVisible) {\n        this.drawActiveCircuits(this.circuits);\n      }\n    });\n  }\n\n  loadTerminators() {\n    this.mapDataService.fetchTerminators().then((terminators) => {\n      this.terminators = terminators;\n\n      // Redraw active circuits now that we have terminators to find hosting identities\n      // Only draw if circuits are visible\n      if (this.circuits.length > 0 && this.mapStateService.activeCircuitsVisible) {\n        this.drawActiveCircuits(this.circuits);\n      }\n    });\n  }\n\n  // Wrapper method - delegates to MapRenderingService\n  drawLinks(links: any[]) {\n    this.mapRenderingService.drawLinks(\n      this.map,\n      links,\n      this.mapStateService.routerLocations,\n      this.edgeRouters,\n      this.mapStateService.linksVisible\n    );\n  }\n\n  toggleClustering() {\n    this.mapStateService.toggleClustering();\n\n    if (this.mapStateService.clusteringEnabled) {\n      // Enable clustering - add markers to cluster groups (only if visible)\n      if (this.mapStateService.identitiesVisible) {\n        this.mapMarkerService.identityMarkers.forEach(marker => {\n          this.map.removeLayer(marker);\n          if (this.identityClusterGroup) {\n            this.identityClusterGroup.addLayer(marker);\n          }\n        });\n      }\n      if (this.mapStateService.routersVisible) {\n        this.mapMarkerService.routerMarkers.forEach(marker => {\n          this.map.removeLayer(marker);\n          if (this.routerClusterGroup) {\n            this.routerClusterGroup.addLayer(marker);\n          }\n        });\n      }\n    } else {\n      // Disable clustering - add markers directly to map (only if visible)\n      if (this.mapStateService.identitiesVisible) {\n        this.mapMarkerService.identityMarkers.forEach(marker => {\n          if (this.identityClusterGroup) {\n            this.identityClusterGroup.removeLayer(marker);\n          }\n          marker.addTo(this.map);\n        });\n      }\n      if (this.mapStateService.routersVisible) {\n        this.mapMarkerService.routerMarkers.forEach(marker => {\n          if (this.routerClusterGroup) {\n            this.routerClusterGroup.removeLayer(marker);\n          }\n          marker.addTo(this.map);\n        });\n      }\n    }\n  }\n\n  checkLinks() {\n    this.mapRenderingService.updateLinksVisibility(this.map, this.mapStateService.linksVisible);\n  }\n\n  toggleLinks() {\n    this.mapStateService.toggleLinks();\n    this.checkLinks();\n  }\n\n  checkVisualizerFeature() {\n    const urlParams = new URLSearchParams(window.location.search);\n    this.showVisualizer = urlParams.get('feature') === 'visualizer';\n  }\n\n  // Service filter methods\n  disableMapScroll() {\n    if (this.map) {\n      this.map.scrollWheelZoom.disable();\n      this.map.dragging.disable();\n    }\n  }\n\n  enableMapScroll() {\n    if (this.map) {\n      this.map.scrollWheelZoom.enable();\n      this.map.dragging.enable();\n    }\n  }\n\n  getFilteredIdentityIds(): Set<string> {\n    return this.circuitFilterService.getFilteredIdentityIds(\n      this.identities,\n      this.circuits,\n      this.terminators,\n      this.selectedServiceFilters,\n      this.selectedIdentityFilters\n    );\n  }\n\n  getFilteredRouterIds(): Set<string> {\n    return this.circuitFilterService.getFilteredRouterIds(\n      this.identities,\n      this.circuits,\n      this.terminators,\n      this.mapStateService.routerLocations,\n      this.selectedServiceFilters,\n      this.selectedIdentityFilters\n    );\n  }\n\n  applyFilters() {\n    const hasFilters = this.selectedServiceFilters.length > 0 || this.selectedIdentityFilters.length > 0;\n\n    if (!hasFilters) {\n      // No filters active - show all markers and links\n      this.showAllMarkers();\n      this.drawLinks(this.links);\n      return;\n    }\n\n    const filteredIdentityIds = this.getFilteredIdentityIds();\n    const filteredRouterIds = this.getFilteredRouterIds();\n\n    // Clear all markers from cluster groups\n    if (this.identityClusterGroup) {\n      this.identityClusterGroup.clearLayers();\n    }\n    if (this.routerClusterGroup) {\n      this.routerClusterGroup.clearLayers();\n    }\n\n    // Re-add only filtered markers\n    this.mapMarkerService.identityMarkers.forEach((marker: any) => {\n      const identityId = this.getMarkerIdentityId(marker);\n      if (identityId && filteredIdentityIds.has(identityId)) {\n        if (this.mapStateService.clusteringEnabled && this.identityClusterGroup) {\n          this.identityClusterGroup.addLayer(marker);\n        } else {\n          marker.addTo(this.map);\n        }\n      }\n    });\n\n    this.mapMarkerService.routerMarkers.forEach((marker: any) => {\n      const routerId = this.getMarkerRouterId(marker);\n      if (routerId && filteredRouterIds.has(routerId)) {\n        if (this.mapStateService.clusteringEnabled && this.routerClusterGroup) {\n          this.routerClusterGroup.addLayer(marker);\n        } else {\n          marker.addTo(this.map);\n        }\n      }\n    });\n\n    // Redraw circuit lines with filters (remove existing first)\n    this.mapRenderingService.circuitLines.forEach(line => {\n      this.map.removeLayer(line);\n    });\n    this.mapRenderingService.circuitLines = [];\n\n    // Redraw filtered links\n    this.drawFilteredLinks(filteredRouterIds);\n\n    // Redraw active circuits with filters only if visible or a circuit is selected\n    if (this.mapStateService.activeCircuitsVisible || this.isCircuitSelectionActive()) {\n      this.drawActiveCircuits(this.circuits);\n    }\n  }\n\n  showAllMarkers() {\n    // Clear cluster groups\n    if (this.identityClusterGroup) {\n      this.identityClusterGroup.clearLayers();\n    }\n    if (this.routerClusterGroup) {\n      this.routerClusterGroup.clearLayers();\n    }\n\n    // Add all identity markers\n    this.mapMarkerService.identityMarkers.forEach((marker: any) => {\n      if (this.mapStateService.clusteringEnabled && this.identityClusterGroup) {\n        this.identityClusterGroup.addLayer(marker);\n      } else {\n        marker.addTo(this.map);\n      }\n    });\n\n    // Add all router markers\n    this.mapMarkerService.routerMarkers.forEach((marker: any) => {\n      if (this.mapStateService.clusteringEnabled && this.routerClusterGroup) {\n        this.routerClusterGroup.addLayer(marker);\n      } else {\n        marker.addTo(this.map);\n      }\n    });\n\n    // Redraw all circuits and links when no filters are active\n    if (this.mapStateService.activeCircuitsVisible || this.isCircuitSelectionActive()) {\n      this.drawActiveCircuits(this.circuits);\n    }\n  }\n\n  // Wrapper method - delegates to MapRenderingService\n  drawFilteredLinks(filteredRouterIds: Set<string>) {\n    this.mapRenderingService.drawFilteredLinks(\n      this.map,\n      this.links,\n      filteredRouterIds,\n      this.mapStateService.routerLocations,\n      this.mapStateService.linksVisible\n    );\n  }\n\n  // Wrapper method - delegates to MapRenderingService with circuit marker management\n  drawActiveCircuits(circuits: any[], isSelectedCircuit: boolean = false) {\n    const newCircuitMarkerIds = this.mapRenderingService.drawActiveCircuits(\n      this.map,\n      circuits,\n      this.identities,\n      this.mapStateService.identityLocations,\n      this.mapStateService.routerLocations,\n      this.terminators,\n      this.edgeRouters,\n      this.services,\n      this.mapStateService.selectedServiceAttributes,\n      this.mapStateService.selectedServiceNamedAttributes,\n      this.mapStateService.selectedCircuitSegment,\n      this.mapStateService.activeCircuitsVisible,\n      this.mapStateService.isCircuitSelectionActive(),\n      (scaleUp: boolean) => this.scaleCircuitMarkers(scaleUp)\n    );\n\n    // Update circuit marker IDs and scale up markers only if a specific circuit is selected\n    // Don't scale markers when showing all circuits\n    if (this.mapStateService.isCircuitSelectionActive()) {\n      this.mapMarkerService.circuitMarkerIds = newCircuitMarkerIds;\n      this.scaleCircuitMarkers(true);\n    } else {\n      // When showing all circuits, keep markers at default size\n      this.mapMarkerService.circuitMarkerIds.clear();\n    }\n  }\n\n  // Helper function to scale markers that are part of active circuits\n  // Wrapper method - delegates to MapMarkerService\n  scaleCircuitMarkers(scaleUp: boolean): void {\n    this.mapMarkerService.scaleCircuitMarkers(scaleUp, this.identityClusterGroup, this.routerClusterGroup);\n  }\n\n  // Wrapper method - delegates to MapMarkerService\n  applyMarkerOpacity(selectedMarker: any, opacity: number = 0.7): void {\n    this.mapMarkerService.applyMarkerOpacity(selectedMarker, opacity, this.identityClusterGroup, this.routerClusterGroup);\n  }\n\n  // Wrapper method - delegates to MapMarkerService\n  resetMarkerOpacity(): void {\n    this.mapMarkerService.resetMarkerOpacity(this.identityClusterGroup, this.routerClusterGroup);\n  }\n\n  toggleActiveCircuits() {\n    // If a circuit is selected, clear the selection first\n    if (this.isCircuitSelectionActive()) {\n      this.mapStateService.selectedCircuit = null;\n      this.mapStateService.selectedCircuitRouters = [];\n      this.mapStateService.selectedUnlocatedCircuit = null;\n      this.mapStateService.selectedUnlocatedCircuitRouters = [];\n      this.clearActiveCircuits();\n    }\n\n    this.mapStateService.activeCircuitsVisible = !this.mapStateService.activeCircuitsVisible;\n\n    if (this.mapStateService.activeCircuitsVisible) {\n      // Show all circuits (not selected)\n      this.drawActiveCircuits(this.circuits, false);\n    } else {\n      // Hide all circuits\n      this.mapRenderingService.activeCircuitLines.forEach(line => {\n        this.map.removeLayer(line);\n      });\n    }\n  }\n\n  toggleRouters() {\n    this.mapStateService.routersVisible = !this.mapStateService.routersVisible;\n    this.checkRouters();\n  }\n\n  toggleIdentities() {\n    this.mapStateService.identitiesVisible = !this.mapStateService.identitiesVisible;\n    this.checkIdentities();\n  }\n\n  checkRouters() {\n    if (this.mapStateService.routersVisible) {\n      // Show routers\n      if (this.routerClusterGroup && this.mapStateService.clusteringEnabled) {\n        this.routerClusterGroup.addTo(this.map);\n      } else {\n        this.mapMarkerService.routerMarkers.forEach(marker => marker.addTo(this.map));\n      }\n    } else {\n      // Hide routers\n      if (this.routerClusterGroup && this.mapStateService.clusteringEnabled) {\n        this.map.removeLayer(this.routerClusterGroup);\n      } else {\n        this.mapMarkerService.routerMarkers.forEach(marker => this.map.removeLayer(marker));\n      }\n    }\n  }\n\n  checkIdentities() {\n    if (this.mapStateService.identitiesVisible) {\n      // Show identities\n      if (this.identityClusterGroup && this.mapStateService.clusteringEnabled) {\n        this.identityClusterGroup.addTo(this.map);\n      } else {\n        this.mapMarkerService.identityMarkers.forEach(marker => marker.addTo(this.map));\n      }\n    } else {\n      // Hide identities\n      if (this.identityClusterGroup && this.mapStateService.clusteringEnabled) {\n        this.map.removeLayer(this.identityClusterGroup);\n      } else {\n        this.mapMarkerService.identityMarkers.forEach(marker => this.map.removeLayer(marker));\n      }\n    }\n  }\n\n  // Helper methods to get ID from marker\n  getMarkerIdentityId(marker: any): string | null {\n    return this.mapMarkerService.markerToIdentityId.get(marker) || null;\n  }\n\n  getMarkerRouterId(marker: any): string | null {\n    return this.mapMarkerService.markerToRouterId.get(marker) || null;\n  }\n\n  showRouterFilterSelector = false;\n  showRouterFilter(event?: any) {\n    defer(() => {\n      this.showRouterFilterSelector = true;\n      defer(() => {\n        this.routerFilterSelector?.search?.nativeElement?.focus();\n      })\n    });\n  }\n\n  closeRouterFilter(event?: any) {\n    this.showRouterFilterSelector = false;\n  }\n\n  showIdentityFilterSelector = false;\n  showIdentityFilter(event?: any) {\n    defer(() => {\n      this.showIdentityFilterSelector = true;\n      defer(() => {\n        this.identityFilterSelector?.search?.nativeElement?.focus();\n      })\n    });\n  }\n\n  closeIdentityFilter(event?: any) {\n    this.showIdentityFilterSelector = false;\n  }\n\n  showServiceFilterSelector = false;\n  showServiceFilter(event?: any) {\n    defer(() => {\n      this.showServiceFilterSelector = true;\n      defer(() => {\n        this.serviceFilterSelector?.search?.nativeElement?.focus();\n      })\n    });\n  }\n\n  closeServiceFilter(event?: any) {\n    this.showServiceFilterSelector = false;\n  }\n\n  showConnectionStatusFilter(event?: any) {\n    defer(() => {\n      this.mapStateService.showConnectionStatusFilterSelector = true;\n      defer(() => {\n        this.connectionStatusFilterSelector?.nativeElement?.focus();\n      })\n    });\n  }\n\n  closeConnectionStatusFilter(event?: any) {\n    this.mapStateService.showConnectionStatusFilterSelector = false;\n  }\n\n  onConnectionStatusChange(newStatus?: string) {\n    this.reloadMapDataWithFilters();\n    this.checkAppliedFilters();\n  }\n\n  clearFilters(event) {\n    this.mapStateService.selectedIdentityAttributes = [];\n    this.mapStateService.selectedIdentityNamedAttributes = [];\n    this.mapStateService.selectedRouterAttributes = [];\n    this.mapStateService.selectedServiceAttributes = [];\n    this.mapStateService.selectedServiceNamedAttributes = [];\n    this.mapStateService.selectedConnectionStatus = 'all';\n    this.reloadMapDataWithFilters();\n    this.checkAppliedFilters();\n  }\n\n  onRouterRoleAttributesChange(attributes: any[]) {\n    this.mapStateService.selectedRouterAttributes = attributes;\n    this.reloadMapDataWithFilters();\n    this.checkAppliedFilters();\n  }\n\n  onIdentityRoleAttributesChange(attributes: any[]) {\n    this.mapStateService.selectedIdentityAttributes = attributes;\n    this.reloadMapDataWithFilters();\n    this.checkAppliedFilters();\n  }\n\n  onIdentityNamedAttributesChange(attributes: any[]) {\n    this.mapStateService.selectedIdentityNamedAttributes = attributes;\n    this.reloadMapDataWithFilters();\n    this.checkAppliedFilters();\n  }\n\n  getIdentityNamedAttributes(filter?: string) {\n    const paging = {\n      searchOn: 'name',\n      filter: filter || '',\n      total: 30,\n      page: 1,\n      sort: 'name',\n      order: 'asc'\n    };\n    const filters: FilterObj[] = [];\n    if (filter && filter.trim() !== '') {\n      filters.push({\n        filterName: 'name',\n        columnId: 'name',\n        value: filter || '%',\n        label: '',\n        type: 'TEXTINPUT',\n      });\n    }\n    this.zitiDataService.get('identities', paging, filters).then((result) => {\n      const namedAttributes = result.data.map((identity: any) => {\n        this.identitiesNameIdMap[identity.name] = identity.id;\n        this.identitiesIdNameMap[identity.id] = identity.name;\n        return identity.name;\n      });\n      this.identityNamedAttributes = namedAttributes;\n    });\n  }\n\n  onServiceRoleAttributesChange(attributes: any[]) {\n    this.mapStateService.selectedServiceAttributes = attributes;\n    this.reloadMapDataWithFilters();\n    this.checkAppliedFilters();\n  }\n\n  onServiceNamedAttributesChange(attributes: any[]) {\n    this.mapStateService.selectedServiceNamedAttributes = attributes;\n    this.reloadMapDataWithFilters();\n    this.checkAppliedFilters();\n  }\n\n  getServiceNamedAttributes(filter?: string) {\n    const paging = {\n      searchOn: 'name',\n      filter: filter || '',\n      total: 30,\n      page: 1,\n      sort: 'name',\n      order: 'asc'\n    };\n    const filters: FilterObj[] = [];\n    if (filter && filter.trim() !== '') {\n      filters.push({\n        columnId: 'name',\n        value: filter,\n        filterName: '',\n        label: '',\n        type: 'TEXTINPUT',\n      });\n    }\n    this.zitiDataService.get('services', paging, filters).then((result) => {\n      const namedAttributes = result.data.map((service: any) => {\n        this.servicesNameIdMap[service.name] = service.id;\n        this.servicesIdNameMap[service.id] = service.name;\n        return service.name;\n      });\n      this.serviceNamedAttributes = namedAttributes;\n    });\n  }\n\n  checkAppliedFilters() {\n    if (this.mapStateService.selectedRouterAttributes.length === 0 &&\n        this.mapStateService.selectedIdentityAttributes.length === 0 &&\n        this.mapStateService.selectedIdentityNamedAttributes.length === 0 &&\n        this.mapStateService.selectedServiceAttributes.length === 0 &&\n        this.mapStateService.selectedServiceNamedAttributes.length === 0 &&\n        this.mapStateService.selectedConnectionStatus === 'all') {\n      this.mapStateService.filtersApplied = false;\n    } else {\n      this.mapStateService.filtersApplied = true;\n    }\n  }\n\n  reloadMapDataWithFilters() {\n    // Save reference to ALL location data before filtering\n    // This ensures circuits can reference any identity/router\n    const allRouterLocations = new Map(this.mapStateService.routerLocations);\n    const allIdentityLocations = new Map(this.mapStateService.identityLocations);\n\n    // Clear existing markers and lines\n    if (this.identityClusterGroup) {\n      this.identityClusterGroup.clearLayers();\n    }\n    if (this.routerClusterGroup) {\n      this.routerClusterGroup.clearLayers();\n    }\n    this.mapRenderingService.circuitLines.forEach(line => this.map.removeLayer(line));\n    this.mapRenderingService.circuitLines = [];\n    this.mapRenderingService.activeCircuitLines.forEach(line => this.map.removeLayer(line));\n    this.mapRenderingService.activeCircuitLines = [];\n\n    this.mapMarkerService.identityMarkers = [];\n    this.mapMarkerService.routerMarkers = [];\n\n    // Reload data with filters\n    const mapPromise = this.loadMapData();\n\n    mapPromise.then(() => {\n      // Restore ALL location data so circuits can find any router/identity\n      allRouterLocations.forEach((value, key) => {\n        if (!this.mapStateService.routerLocations.has(key)) {\n          this.mapStateService.routerLocations.set(key, value);\n        }\n      });\n      allIdentityLocations.forEach((value, key) => {\n        if (!this.mapStateService.identityLocations.has(key)) {\n          this.mapStateService.identityLocations.set(key, value);\n        }\n      });\n\n      // After loading filtered identities and services, filter circuits/terminators/links\n      this.filterCircuitsAndRouters();\n    });\n  }\n\n  filterCircuitsAndRouters() {\n\n    // Use the already-filtered data from backend\n    const filteredIdentityIds = new Set(this.identities.map(i => i.id));\n    const filteredServiceIds = new Set(this.services.map(s => s.id));\n    const filteredRouterIds = new Set(this.edgeRouters.map(r => r.id));\n\n    // If no filters active, show all\n    if (this.mapStateService.selectedRouterAttributes.length === 0 &&\n        this.mapStateService.selectedIdentityAttributes.length === 0 &&\n        this.mapStateService.selectedIdentityNamedAttributes.length === 0 &&\n        this.mapStateService.selectedServiceAttributes.length === 0 &&\n        this.mapStateService.selectedServiceNamedAttributes.length === 0) {\n      // Show all markers\n      this.showAllMarkers();\n      // Redraw all circuits and links\n      if (this.circuits.length > 0 && (this.mapStateService.activeCircuitsVisible || this.isCircuitSelectionActive())) {\n        this.drawActiveCircuits(this.circuits);\n      }\n      if (this.links.length > 0) {\n        this.drawLinks(this.links);\n      }\n      return;\n    }\n\n    // If markers don't exist yet, create them (for all data - not just mock data)\n    if (this.mapMarkerService.identityMarkers.length === 0 && this.mapMarkerService.routerMarkers.length === 0) {\n      this.mapMarkerService.addMarkers(\n        this.edgeRouters,\n        'routers',\n        this.routerClusterGroup,\n        this.map,\n        this.mapStateService.routerLocations,\n        this.mapStateService.identityLocations\n      );\n\n      this.mapMarkerService.addMarkers(\n        this.identities,\n        'identity',\n        this.identityClusterGroup,\n        this.map,\n        this.mapStateService.routerLocations,\n        this.mapStateService.identityLocations\n      );\n    }\n\n    // Clear markers to redraw only filtered ones\n    // Remove markers from cluster groups\n    if (this.identityClusterGroup) {\n      this.identityClusterGroup.clearLayers();\n    }\n    if (this.routerClusterGroup) {\n      this.routerClusterGroup.clearLayers();\n    }\n\n    // Also remove any markers that were added directly to the map (when clustering is disabled)\n    this.mapMarkerService.identityMarkers.forEach((marker: any) => {\n      if (this.map.hasLayer(marker)) {\n        this.map.removeLayer(marker);\n      }\n    });\n    this.mapMarkerService.routerMarkers.forEach((marker: any) => {\n      if (this.map.hasLayer(marker)) {\n        this.map.removeLayer(marker);\n      }\n    });\n\n    // Determine if filters are applied for each type\n    const hasIdentityFilter = this.mapStateService.selectedIdentityAttributes.length > 0 || this.mapStateService.selectedIdentityNamedAttributes.length > 0;\n    const hasRouterFilter = this.mapStateService.selectedRouterAttributes.length > 0;\n    const hasServiceFilter = this.mapStateService.selectedServiceAttributes.length > 0 || this.mapStateService.selectedServiceNamedAttributes.length > 0;\n\n    // Filter circuits to only those involving filtered identities, services, and routers\n    const filteredCircuits = this.circuits.filter((circuit) => {\n      // Check service match - only filter if service filter is active\n      const matchesService = !hasServiceFilter || filteredServiceIds.has(circuit.service?.id);\n\n      // Check identity match - only filter if identity filter is active\n      const circuitClientId = circuit.clientId || circuit.tags?.clientId || circuit.client?.id || circuit.sourceId || circuit.initiator?.id;\n      const matchesIdentity = !hasIdentityFilter || filteredIdentityIds.has(circuitClientId);\n\n      // Check if circuit path contains any of the filtered routers - only filter if router filter is active\n      let matchesRouter = !hasRouterFilter;\n      if (hasRouterFilter) {\n        const pathNodes = circuit.path?.nodes || circuit.path;\n        if (pathNodes) {\n          matchesRouter = pathNodes.some((node: any) => {\n            const routerId = node.id || node.routerId || node;\n            return filteredRouterIds.has(routerId);\n          });\n        }\n      }\n\n      return matchesService && matchesIdentity && matchesRouter;\n    });\n\n    // Get identity and router IDs to show\n    const identityIdsToShow = new Set<string>();\n    const routerIdsToShow = new Set<string>();\n\n    // Handle identity filtering\n    if (hasIdentityFilter) {\n      // If identity filter is active, show explicitly filtered identities\n      filteredIdentityIds.forEach(id => identityIdsToShow.add(id));\n      // Also add identities from filtered circuits for context\n      filteredCircuits.forEach((circuit) => {\n        const circuitClientId = circuit.clientId || circuit.tags?.clientId || circuit.client?.id || circuit.sourceId || circuit.initiator?.id;\n        const circuitHostId = circuit.tags?.hostId || circuit.host?.id || circuit.hostId;\n        if (circuitClientId) identityIdsToShow.add(circuitClientId);\n        if (circuitHostId) identityIdsToShow.add(circuitHostId);\n      });\n    } else if (hasRouterFilter || hasServiceFilter) {\n      // If only router/service filters are active, extract identities from circuits\n      // Use the SAME logic that draws circuit paths to determine which identities are connected\n\n      // For each filtered circuit, build the circuit path data to extract client/host identities\n      filteredCircuits.forEach(circuit => {\n        const circuitPathData = this.circuitPathBuilderService.buildCircuitPathData(\n          circuit,\n          this.mapStateService.routerLocations,\n          this.mapStateService.identityLocations,\n          this.edgeRouters,\n          this.identities\n        );\n\n        if (circuitPathData) {\n          // Add client identity if present\n          if (circuitPathData.clientId) {\n            identityIdsToShow.add(circuitPathData.clientId);\n          }\n          // Add host identity if present\n          if (circuitPathData.hostId) {\n            identityIdsToShow.add(circuitPathData.hostId);\n          }\n        }\n      });\n    } else {\n      // No filters active - show all identities\n      this.identities.forEach(identity => identityIdsToShow.add(identity.id));\n    }\n\n    // Handle router filtering\n    if (hasRouterFilter) {\n      // If router filter is active, only show filtered routers\n      filteredRouterIds.forEach(id => routerIdsToShow.add(id));\n    } else {\n      // If no router filter is active, show ALL routers\n      this.edgeRouters.forEach(router => routerIdsToShow.add(router.id));\n    }\n\n    // Add hosting identities from terminators for filtered services (only if service filter is active)\n    if (hasServiceFilter) {\n      this.terminators.forEach(terminator => {\n        const terminatorServiceId = terminator.serviceId || terminator.service?.id;\n        if (filteredServiceIds.has(terminatorServiceId)) {\n          const hostIdentityId = terminator.hostId || terminator.identity?.id || terminator.identityId;\n          if (hostIdentityId) {\n            identityIdsToShow.add(hostIdentityId);\n          }\n          // Only add routers from terminators if router filter is active\n          if (hasRouterFilter && terminator.routerId) {\n            routerIdsToShow.add(terminator.routerId);\n          }\n        }\n      });\n    }\n\n    // Add routers from filtered circuits only if router filter is active\n    if (hasRouterFilter) {\n      filteredCircuits.forEach(circuit => {\n        const pathNodes = circuit.path?.nodes || circuit.path;\n        if (pathNodes) {\n          pathNodes.forEach((node: any) => {\n            const routerId = node.id || node.routerId || node;\n            if (routerId) {\n              routerIdsToShow.add(routerId);\n            }\n          });\n        }\n      });\n    }\n\n    // Filter and redraw identity markers\n    this.mapMarkerService.identityMarkers.forEach((marker: any) => {\n      const identityId = this.getMarkerIdentityId(marker);\n      if (identityId && identityIdsToShow.has(identityId)) {\n        if (this.mapStateService.clusteringEnabled && this.identityClusterGroup) {\n          this.identityClusterGroup.addLayer(marker);\n        } else {\n          marker.addTo(this.map);\n        }\n      }\n    });\n\n    // Filter and redraw router markers\n    this.mapMarkerService.routerMarkers.forEach((marker: any) => {\n      const routerId = this.getMarkerRouterId(marker);\n      if (routerId && routerIdsToShow.has(routerId)) {\n        if (this.mapStateService.clusteringEnabled && this.routerClusterGroup) {\n          this.routerClusterGroup.addLayer(marker);\n        } else {\n          marker.addTo(this.map);\n        }\n      }\n    });\n\n    // Clear existing circuit and link lines\n    this.mapRenderingService.circuitLines.forEach(line => this.map.removeLayer(line));\n    this.mapRenderingService.circuitLines = [];\n    this.mapRenderingService.activeCircuitLines.forEach(line => this.map.removeLayer(line));\n    this.mapRenderingService.activeCircuitLines = [];\n\n    // Redraw filtered circuits only if circuits are visible or a circuit is selected\n    if (this.mapStateService.activeCircuitsVisible || this.isCircuitSelectionActive()) {\n      // Draw filtered circuits (rendering service will filter paths to only visible entities)\n      this.drawActiveCircuits(filteredCircuits, false);\n    }\n\n    // Filter and redraw links\n    const filteredLinks = this.links.filter(link => {\n      const sourceId = link.sourceRouter?.id;\n      const destId = link.destRouter?.id;\n      return routerIdsToShow.has(sourceId) && routerIdsToShow.has(destId);\n    });\n    this.drawLinks(filteredLinks);\n  }\n\n  openSidePanel(type: 'marker' | 'link' | 'circuit' | 'unlocated' | 'entityList' | 'servicesWithCircuits', data: any) {\n    // Clear previous selected marker icon and reset opacity\n    if (this.mapMarkerService.selectedMarker) {\n      this.updateMarkerIcon(this.mapMarkerService.selectedMarker, false);\n      this.resetMarkerOpacity();\n      this.mapMarkerService.selectedMarker = null;\n    }\n\n    // Clear previous circuit selection when opening a new panel (except circuit panels)\n    if (type !== 'circuit') {\n      this.mapStateService.selectedCircuitSegment = null;\n      this.mapStateService.selectedCircuit = null;\n      this.mapStateService.selectedCircuitRouters = [];\n      this.mapStateService.selectedUnlocatedCircuit = null;\n      this.mapStateService.selectedUnlocatedCircuitRouters = [];\n    }\n\n    // Clear entity preview panels when switching to different side panels\n    this.unlocatedPreviewEntity = null;\n    this.entityListPreview = null;\n    this.entityListPreviewType = null;\n\n    this.mapStateService.sidePanelType = type;\n    this.mapStateService.sidePanelData = data;\n    this.mapStateService.sidePanelOpen = true;\n\n    // Handle circuit panel - track the selected segment and build hops/routers data\n    if (type === 'circuit' && data?.circuit && data?.segment) {\n      this.mapStateService.selectedCircuitSegment = {\n        circuitId: data.circuit.id,\n        segmentIndex: data.segment.index\n      };\n\n      // Use circuitHops from data if already provided (from CircuitPathBuilderService),\n      // otherwise build it from pathNodes (fallback for legacy code paths)\n      const circuitHops = data.circuitHops || this.buildCircuitHops(data);\n\n      // Use circuitRouters from data if already provided (from CircuitPathBuilderService),\n      // otherwise build it from pathNodes (fallback for legacy code paths)\n      const circuitRouters = data.circuitRouters || this.buildCircuitRouters(data.pathNodes);\n\n      // Add hops and routers to sidePanelData\n      this.mapStateService.sidePanelData = {\n        ...data,\n        circuitHops,\n        circuitRouters\n      };\n\n      // Redraw the circuit with the selected segment highlighted\n      this.clearActiveCircuits();\n      this.drawActiveCircuits([data.circuit], false);\n    }\n\n    // Load circuits for marker panel and update marker icon\n    if (type === 'marker' && data?.item?.id && data?.type) {\n      this.mapStateService.sidePanelCircuits = this.getEntityCircuits(data.item.id, data.type);\n\n      // Find and mark the selected marker\n      const marker = this.findMarkerByItemId(data.item.id, data.type);\n      if (marker) {\n        this.mapMarkerService.selectedMarker = marker;\n        this.updateMarkerIcon(marker, true);\n        // Apply opacity and greyscale to all other markers\n        this.applyMarkerOpacity(marker);\n      }\n    } else {\n      this.mapStateService.sidePanelCircuits = [];\n      // Reset opacity for non-marker panels\n      if (!this.mapMarkerService.selectedMarker) {\n        this.resetMarkerOpacity();\n      }\n    }\n\n    // Trigger map resize after panel opens\n    setTimeout(() => {\n      this.map?.invalidateSize();\n    }, 300);\n  }\n\n  showUnlocatedEntities() {\n    // Filter identities without geolocation tags (exclude Router-type identities)\n    const unlocatedIdentities = this.identities.filter(identity =>\n      (identity.typeId !== 'Router') && (!identity.tags?.geolocation || identity.tags.geolocation.trim() === '')\n    );\n\n    // Filter routers without geolocation tags\n    const unlocatedRouters = this.edgeRouters.filter(router =>\n      !router.tags?.geolocation || router.tags.geolocation.trim() === ''\n    );\n\n    // Initialize search\n    this.unlocatedIdentitiesSearch = '';\n    this.filteredUnlocatedIdentities = [...unlocatedIdentities];\n    this.unlocatedRoutersSearch = '';\n    this.filteredUnlocatedRouters = [...unlocatedRouters];\n\n    // Open side panel with unlocated entities\n    this.openSidePanel('unlocated', {\n      unlocatedIdentities,\n      unlocatedRouters\n    });\n  }\n\n  showUnlocatedIdentities() {\n    // Filter identities without geolocation tags (exclude Router-type identities)\n    const unlocatedIdentities = this.identities.filter(identity =>\n      (identity.typeId !== 'Router') && (!identity.tags?.geolocation || identity.tags.geolocation.trim() === '')\n    );\n\n    // Initialize search\n    this.unlocatedIdentitiesSearch = '';\n    this.filteredUnlocatedIdentities = [...unlocatedIdentities];\n    this.unlocatedRoutersSearch = '';\n    this.filteredUnlocatedRouters = [];\n\n    // Open side panel with only unlocated identities\n    this.openSidePanel('unlocated', {\n      unlocatedIdentities,\n      unlocatedRouters: []\n    });\n  }\n\n  showUnlocatedRouters() {\n    // Filter routers without geolocation tags\n    const unlocatedRouters = this.edgeRouters.filter(router =>\n      !router.tags?.geolocation || router.tags.geolocation.trim() === ''\n    );\n\n    // Initialize search\n    this.unlocatedIdentitiesSearch = '';\n    this.filteredUnlocatedIdentities = [];\n    this.unlocatedRoutersSearch = '';\n    this.filteredUnlocatedRouters = [...unlocatedRouters];\n\n    // Open side panel with only unlocated routers\n    this.openSidePanel('unlocated', {\n      unlocatedIdentities: [],\n      unlocatedRouters\n    });\n  }\n\n  showServicesWithActiveCircuits() {\n    // Initialize search\n    this.servicesWithCircuitsSearch = '';\n\n    // Open side panel with all circuits (will be sorted by service name in the component)\n    this.openSidePanel('servicesWithCircuits', {});\n  }\n\n  onServicesWithCircuitsSearchChange(search: string) {\n    this.servicesWithCircuitsSearch = search;\n  }\n\n  onUnlocatedIdentitiesSearchChange(search: string) {\n    this.unlocatedIdentitiesSearch = search;\n    const searchLower = search.toLowerCase().trim();\n\n    if (!searchLower) {\n      // If search is empty, show all identities\n      this.filteredUnlocatedIdentities = [...(this.mapStateService.sidePanelData?.unlocatedIdentities || [])];\n    } else {\n      // Filter identities by name\n      this.filteredUnlocatedIdentities = (this.mapStateService.sidePanelData?.unlocatedIdentities || []).filter(identity =>\n        identity.name?.toLowerCase().includes(searchLower)\n      );\n    }\n  }\n\n  onUnlocatedRoutersSearchChange(search: string) {\n    this.unlocatedRoutersSearch = search;\n    const searchLower = search.toLowerCase().trim();\n\n    if (!searchLower) {\n      // If search is empty, show all routers\n      this.filteredUnlocatedRouters = [...(this.mapStateService.sidePanelData?.unlocatedRouters || [])];\n    } else {\n      // Filter routers by name\n      this.filteredUnlocatedRouters = (this.mapStateService.sidePanelData?.unlocatedRouters || []).filter(router =>\n        router.name?.toLowerCase().includes(searchLower)\n      );\n    }\n  }\n\n  showLocatedIdentities() {\n    // Filter out Router-type identities (they're shown as routers, not identities)\n    const filteredIdentities = this.identities.filter(identity => identity.typeId !== 'Router');\n    this.entityListLocationFilter = 'located'; // Default to located view\n    this.initializeEntityList(filteredIdentities, 'identities');\n    this.openSidePanel('entityList', { entityType: 'identities' });\n  }\n\n  showLocatedRouters() {\n    this.entityListLocationFilter = 'located'; // Default to located view\n    this.initializeEntityList(this.edgeRouters, 'routers');\n    this.openSidePanel('entityList', { entityType: 'routers' });\n  }\n\n  showAllServices() {\n    // Add active circuit count to each service\n    const servicesWithCounts = this.services.map(service => {\n      const circuitCount = this.circuits.filter(circuit => {\n        const serviceId = circuit.service?.id || circuit.serviceId;\n        return serviceId === service.id;\n      }).length;\n\n      return {\n        ...service,\n        activeCircuitCount: circuitCount\n      };\n    });\n\n    // Set default sort to active circuits descending\n    this.entityListSortColumn = 'activeCircuitCount';\n    this.entityListSortDirection = 'desc';\n\n    this.initializeEntityList(servicesWithCounts, 'services');\n    this.openSidePanel('entityList', { entityType: 'services' });\n  }\n\n  initializeEntityList(entities: any[], type: string) {\n    // Clear preview when switching to a different entity list type\n    if (this.entityListType !== type) {\n      this.closeEntityListPreview();\n    }\n\n    this.fullEntityList = [...entities];\n    this.entityListType = type;\n    this.entityListSearch = '';\n    this.entityListPage = 1;\n    this.applyEntityListFilters();\n  }\n\n  applyEntityListFilters() {\n    // Apply location filter (for identities and routers only)\n    let filtered = this.fullEntityList;\n    if (this.entityListType === 'identities' || this.entityListType === 'routers') {\n      if (this.entityListLocationFilter === 'located') {\n        filtered = filtered.filter(entity => entity.tags?.geolocation);\n      } else if (this.entityListLocationFilter === 'unlocated') {\n        filtered = filtered.filter(entity => !entity.tags?.geolocation || entity.tags.geolocation.trim() === '');\n      }\n      // 'all' filter shows everything, no filtering needed\n    }\n\n    // Apply search filter\n    if (this.entityListSearch.trim()) {\n      const searchLower = this.entityListSearch.toLowerCase();\n      filtered = filtered.filter(entity =>\n        entity.name?.toLowerCase().includes(searchLower) ||\n        entity.id?.toLowerCase().includes(searchLower)\n      );\n    }\n\n    // Apply sorting\n    if (this.entityListSortColumn) {\n      filtered = [...filtered].sort((a, b) => {\n        const aValue = a[this.entityListSortColumn];\n        const bValue = b[this.entityListSortColumn];\n\n        let comparison = 0;\n        if (aValue === null || aValue === undefined) comparison = 1;\n        else if (bValue === null || bValue === undefined) comparison = -1;\n        else if (typeof aValue === 'string') {\n          comparison = aValue.localeCompare(bValue);\n        } else {\n          comparison = aValue > bValue ? 1 : aValue < bValue ? -1 : 0;\n        }\n\n        return this.entityListSortDirection === 'asc' ? comparison : -comparison;\n      });\n    }\n\n    this.entityListTotal = filtered.length;\n\n    // Apply pagination\n    const startIndex = (this.entityListPage - 1) * this.entityListPageSize;\n    const endIndex = startIndex + this.entityListPageSize;\n    this.filteredEntityList = filtered.slice(startIndex, endIndex);\n  }\n\n  onEntityListSearchChange(search: string) {\n    this.entityListSearch = search;\n    this.entityListPage = 1; // Reset to first page on search\n    this.applyEntityListFilters();\n  }\n\n  onEntityListPageChange(page: number) {\n    this.entityListPage = page;\n    this.applyEntityListFilters();\n  }\n\n  onEntityListSortChange(sort: {column: string, direction: 'asc' | 'desc'}) {\n    this.entityListSortColumn = sort.column;\n    this.entityListSortDirection = sort.direction;\n    this.entityListPage = 1; // Reset to first page on sort\n    this.applyEntityListFilters();\n  }\n\n  onEntityListLocationFilterChange(filter: 'all' | 'located' | 'unlocated') {\n    this.entityListLocationFilter = filter;\n    this.entityListPage = 1; // Reset to first page on filter change\n    this.applyEntityListFilters();\n  }\n\n  get entityListTotalPages(): number {\n    return Math.ceil(this.entityListTotal / this.entityListPageSize);\n  }\n\n  get entityListPageNumbers(): number[] {\n    const total = this.entityListTotalPages;\n    const current = this.entityListPage;\n    const pages: number[] = [];\n\n    // Show max 7 page numbers\n    if (total <= 7) {\n      for (let i = 1; i <= total; i++) {\n        pages.push(i);\n      }\n    } else {\n      // Always show first page\n      pages.push(1);\n\n      if (current > 3) {\n        pages.push(-1); // Ellipsis\n      }\n\n      // Show pages around current\n      const start = Math.max(2, current - 1);\n      const end = Math.min(total - 1, current + 1);\n      for (let i = start; i <= end; i++) {\n        pages.push(i);\n      }\n\n      if (current < total - 2) {\n        pages.push(-1); // Ellipsis\n      }\n\n      // Always show last page\n      pages.push(total);\n    }\n\n    return pages;\n  }\n\n  openEntityPreview(entity: any, type: string) {\n    // Store the preview entity to display below the unlocated lists\n    this.unlocatedPreviewEntity = entity;\n    this.unlocatedPreviewType = type;\n    // Clear unsaved flag when clicking on a row (only set by drag & drop)\n    this.unlocatedPreviewHasUnsavedLocation = false;\n    // Only get circuits if entity is located on the map (has geolocation)\n    const hasGeolocation = entity.tags?.geolocation && entity.tags.geolocation.trim() !== '';\n    this.unlocatedPreviewCircuits = hasGeolocation ? this.getEntityCircuits(entity.id, type) : [];\n\n    // Clear selected circuit state when switching entities\n    this.mapStateService.selectedUnlocatedCircuit = null;\n    this.mapStateService.selectedUnlocatedCircuitRouters = [];\n  }\n\n  // Drag and drop handlers for unlocated entities\n  onDragStart(event: DragEvent, entity: any, type: string): void {\n    this.draggedEntity = entity;\n    this.draggedEntityType = type;\n\n    if (event.dataTransfer) {\n      event.dataTransfer.effectAllowed = 'copy';\n      event.dataTransfer.setData('text/plain', entity.name); // Required for Firefox\n    }\n\n    // Add visual feedback to the dragged row\n    const target = event.target as HTMLElement;\n    setTimeout(() => {\n      target.classList.add('dragging');\n      // Add global grabbing cursor\n      document.body.classList.add('dragging-entity');\n    }, 0);\n  }\n\n  onMapDragOver(event: DragEvent): void {\n    event.preventDefault();\n    if (event.dataTransfer) {\n      event.dataTransfer.dropEffect = 'copy';\n    }\n\n    // Add visual feedback to map container\n    const mapContainer = (event.currentTarget as HTMLElement).closest('.map-container');\n    if (mapContainer) {\n      mapContainer.classList.add('drag-over');\n    }\n  }\n\n  onMapDrop(event: DragEvent): void {\n    event.preventDefault();\n\n    // Remove visual feedback from map container\n    const mapContainer = (event.currentTarget as HTMLElement).closest('.map-container');\n    if (mapContainer) {\n      mapContainer.classList.remove('drag-over');\n    }\n\n    // Remove global grabbing cursor\n    document.body.classList.remove('dragging-entity');\n\n    if (!this.draggedEntity) {\n      return;\n    }\n\n    // Get the map container element\n    const mapElement = document.getElementById('MainMap');\n    if (!mapElement) {\n      return;\n    }\n\n    // Get the bounds of the map container\n    const rect = mapElement.getBoundingClientRect();\n\n    // Calculate the position relative to the map container\n    const x = event.clientX - rect.left;\n    const y = event.clientY - rect.top;\n\n    // Convert pixel coordinates to lat/lng\n    const point = L.point(x, y);\n    const latLng = this.map.containerPointToLatLng(point);\n\n    // Store entity info before clearing drag state\n    const droppedEntity = this.draggedEntity;\n    const droppedEntityType = this.draggedEntityType;\n\n    // Update entity geolocation\n    this.updateGeolocationLocal(droppedEntity, latLng.lat, latLng.lng, droppedEntityType);\n\n    // Create marker for the newly located entity (skip auto-fit to prevent zoom out)\n    this.addMarkers([droppedEntity], droppedEntityType, true);\n\n    // Center map on the dropped location without changing zoom\n    this.map.panTo(latLng);\n\n    // Show preview and handle marker setup\n    setTimeout(() => {\n      // Always show preview first (regardless of whether marker is found/clustered)\n      if (this.mapStateService.sidePanelType === 'unlocated' || this.mapStateService.sidePanelType === 'entityList') {\n        // Set preview entity to show details in the unlocated/entity list panel\n        if (this.mapStateService.sidePanelType === 'unlocated') {\n          this.unlocatedPreviewEntity = droppedEntity;\n          this.unlocatedPreviewType = droppedEntityType;\n          this.unlocatedPreviewHasUnsavedLocation = false; // Using _unsavedLocation flag now\n          this.unlocatedPreviewCircuits = this.getEntityCircuits(droppedEntity.id, droppedEntityType);\n        } else if (this.mapStateService.sidePanelType === 'entityList') {\n          // Update entity list preview with location\n          const location = droppedEntityType === 'identity'\n            ? this.mapStateService.identityLocations.get(droppedEntity.id)\n            : this.mapStateService.routerLocations.get(droppedEntity.id);\n\n          this.entityListPreview = {\n            type: droppedEntityType,\n            item: droppedEntity,\n            location: location,\n            _justDropped: true  // Flag to track freshly dropped entities\n          };\n        }\n      } else {\n        // If unlocated/entity list panel isn't open, open marker panel\n        const location = droppedEntityType === 'identity'\n          ? this.mapStateService.identityLocations.get(droppedEntity.id)\n          : this.mapStateService.routerLocations.get(droppedEntity.id);\n\n        if (location) {\n          this.openSidePanel('marker', {\n            type: droppedEntityType,\n            item: droppedEntity,\n            location: location\n          });\n        }\n      }\n\n      // Try to find and mark the newly created marker as selected\n      // Note: marker might be in a cluster, so this is best-effort\n      const markers = droppedEntityType === 'identity' ? this.mapMarkerService.identityMarkers : this.mapMarkerService.routerMarkers;\n      const newMarker = markers.find((m: any) => m._itemData?.id === droppedEntity.id);\n\n      if (newMarker) {\n        // Mark this marker as selected\n        this.mapMarkerService.selectedMarker = newMarker;\n        this.updateMarkerIcon(newMarker, true);\n\n        // Enable dragging\n        newMarker.dragging.enable();\n        this.mapMarkerService.currentDraggableMarker = newMarker;\n\n        // Apply visual styling\n        const markerElement = newMarker.getElement();\n        if (markerElement) {\n          const cssClass = droppedEntityType === 'identity' ? 'marker-draggable-active-identity' : 'marker-draggable-active-router';\n          markerElement.classList.add(cssClass);\n          // Ensure it's fully opaque\n          markerElement.style.opacity = '1';\n        }\n\n        // Apply reduced opacity to other markers\n        this.applyMarkerOpacity(newMarker);\n      }\n\n      // Refresh unlocated entities data (without reopening the panel)\n      const unlocatedIdentities = this.identities.filter(identity =>\n        (identity.typeId !== 'Router') && (!identity.tags?.geolocation || identity.tags.geolocation.trim() === '')\n      );\n      const unlocatedRouters = this.edgeRouters.filter(router =>\n        !router.tags?.geolocation || router.tags.geolocation.trim() === ''\n      );\n      this.filteredUnlocatedIdentities = unlocatedIdentities.filter(identity =>\n        identity.name?.toLowerCase().includes(this.unlocatedIdentitiesSearch.toLowerCase())\n      );\n      this.filteredUnlocatedRouters = unlocatedRouters.filter(router =>\n        router.name?.toLowerCase().includes(this.unlocatedRoutersSearch.toLowerCase())\n      );\n    }, 100);\n\n    // Clear drag state\n    this.draggedEntity = null;\n    this.draggedEntityType = '';\n  }\n\n  onMapDragLeave(event: DragEvent): void {\n    // Remove visual feedback when drag leaves the map\n    const mapContainer = (event.currentTarget as HTMLElement).closest('.map-container');\n    if (mapContainer) {\n      mapContainer.classList.remove('drag-over');\n    }\n    // Remove global grabbing cursor\n    document.body.classList.remove('dragging-entity');\n  }\n\n  closeSidePanel() {\n    // Clear selected marker icon and reset opacity\n    if (this.mapMarkerService.selectedMarker) {\n      this.updateMarkerIcon(this.mapMarkerService.selectedMarker, false);\n      this.resetMarkerOpacity();\n      this.mapMarkerService.selectedMarker = null;\n    }\n\n    // Clear selected circuit segment\n    this.mapStateService.selectedCircuitSegment = null;\n\n    // Clear selected router in path and circuit preview\n    this.selectedRouterInPath = null;\n    this.circuitPreviewEntity = null;\n    this.circuitPreviewEntityType = '';\n\n    // Clear selected circuit and restore all circuits if they were visible\n    if (this.mapStateService.selectedCircuit) {\n      this.mapStateService.selectedCircuit = null;\n      this.mapStateService.selectedCircuitRouters = [];\n      this.clearActiveCircuits();\n      if (this.mapStateService.activeCircuitsVisible) {\n        this.drawActiveCircuits(this.circuits, false);\n      }\n    }\n\n    this.mapStateService.sidePanelOpen = false;\n    this.mapStateService.sidePanelType = null;\n    this.mapStateService.sidePanelData = null;\n\n    // Trigger map resize after panel closes\n    setTimeout(() => {\n      this.map?.invalidateSize();\n    }, 300);\n  }\n\n  navigateToDetails(type: string, id: string) {\n    if (!id) return;\n\n    if (type === 'identity') {\n      this.router.navigateByUrl(`/identities/${id}`);\n    } else if (type === 'routers') {\n      this.router.navigateByUrl(`/routers/${id}`);\n    } else if (type === 'services') {\n      this.router.navigateByUrl(`/services/advanced/${id}`);\n    }\n  }\n\n  navigateToCircuitEntity(id: string, type: string) {\n    if (!id || !type) return;\n\n    // Type could be 'identity' or 'routers'\n    this.navigateToDetails(type, id);\n  }\n\n  openRouterPanel(router: any) {\n    if (!router || !router.id) return;\n\n    // Get router location\n    const location = this.mapStateService.routerLocations.get(router.id);\n\n    // Open side panel with router data\n    this.openSidePanel('marker', {\n      type: 'routers',\n      item: router,\n      location: location\n    });\n  }\n\n  handleEntityListClick(entity: any) {\n    if (!entity || !entity.id) return;\n\n    if (this.entityListType === 'routers') {\n      // For routers, show preview in bottom half of panel\n      this.showEntityListPreview(entity, 'routers');\n    } else if (this.entityListType === 'identities') {\n      // For identities, show preview in bottom half of panel\n      this.showEntityListPreview(entity, 'identity');\n    } else if (this.entityListType === 'services') {\n      // For services, show preview in bottom half of panel\n      this.showEntityListPreview(entity, 'services');\n    } else {\n      // For other entity types, navigate to details page\n      this.navigateToDetails(this.entityListType, entity.id);\n    }\n  }\n\n  showEntityListPreview(entity: any, type: 'identity' | 'routers' | 'services') {\n    if (!entity || !entity.id) return;\n\n    // Get entity location (services don't have locations)\n    let location = null;\n    if (type === 'identity') {\n      location = this.mapStateService.identityLocations.get(entity.id);\n    } else if (type === 'routers') {\n      location = this.mapStateService.routerLocations.get(entity.id);\n    }\n\n    // Set preview data\n    this.entityListPreview = {\n      type: type,\n      item: entity,\n      location: location\n    };\n    this.entityListPreviewType = type;\n\n    // Load circuits for this entity\n    this.mapStateService.sidePanelCircuits = this.getEntityCircuits(entity.id, type);\n\n    // Clear selected circuit state when switching entities\n    this.mapStateService.selectedCircuit = null;\n    this.mapStateService.selectedCircuitRouters = [];\n    this.mapStateService.selectedUnlocatedCircuit = null;\n    this.mapStateService.selectedUnlocatedCircuitRouters = [];\n\n    // Reset the previously selected marker if any\n    if (this.mapMarkerService.selectedMarker) {\n      this.updateMarkerIcon(this.mapMarkerService.selectedMarker, false);\n      this.mapMarkerService.selectedMarker = null;\n    }\n\n    // Reset opacity for all markers first\n    this.resetMarkerOpacity();\n\n    // Find and mark the selected marker (services don't have markers)\n    if (type !== 'services') {\n      const marker = this.findMarkerByItemId(entity.id, type);\n      if (marker) {\n        this.mapMarkerService.selectedMarker = marker;\n        this.updateMarkerIcon(marker, true);\n\n        // Ensure selected marker has full opacity\n        const element = marker.getElement();\n        if (element) {\n          element.style.opacity = '1';\n        }\n\n        // Apply reduced opacity to all other markers\n        this.applyMarkerOpacity(marker);\n\n        // Expand cluster and zoom to show the marker if clustering is enabled\n        const clusterGroup = type === 'identity' ? this.identityClusterGroup : this.routerClusterGroup;\n        if (clusterGroup && this.mapStateService.clusteringEnabled) {\n          // zoomToShowLayer zooms to the parent cluster bounds and spiderfies if still clustered\n          clusterGroup.zoomToShowLayer(marker);\n        } else if (location && location.lat && location.lng) {\n          // Fallback: clustering disabled or marker not in cluster, just pan to location\n          this.map.panTo([location.lat, location.lng]);\n        }\n      } else if (location && location.lat && location.lng) {\n        // Marker not found (shouldn't normally happen), just pan to location\n        this.map.panTo([location.lat, location.lng]);\n      }\n    } else if (location && location.lat && location.lng) {\n      // Services don't have markers, just pan to location\n      this.map.panTo([location.lat, location.lng]);\n    }\n  }\n\n  closeEntityListPreview() {\n    // Check if the entity has unsaved location changes OR was just dropped\n    if (this.entityListPreview?.item &&\n        (this.hasUnsavedLocationChanges(this.entityListPreview.item) || (this.entityListPreview as any)?._justDropped)) {\n      const item = this.entityListPreview.item;\n      const type = this.entityListPreview.type;\n\n      // Find and remove the marker from the map\n      const marker = this.findMarkerByItemId(item.id, type);\n      if (marker) {\n        // Remove from cluster groups or map\n        if (type === 'identity') {\n          if (this.identityClusterGroup && this.identityClusterGroup.hasLayer(marker)) {\n            this.identityClusterGroup.removeLayer(marker);\n          } else if (this.map.hasLayer(marker)) {\n            this.map.removeLayer(marker);\n          }\n          // Remove from marker service collections\n          const index = this.mapMarkerService.identityMarkers.indexOf(marker);\n          if (index > -1) {\n            this.mapMarkerService.identityMarkers.splice(index, 1);\n          }\n          this.mapMarkerService.markerToIdentityId.delete(marker);\n        } else {\n          if (this.routerClusterGroup && this.routerClusterGroup.hasLayer(marker)) {\n            this.routerClusterGroup.removeLayer(marker);\n          } else if (this.map.hasLayer(marker)) {\n            this.map.removeLayer(marker);\n          }\n          // Remove from marker service collections\n          const index = this.mapMarkerService.routerMarkers.indexOf(marker);\n          if (index > -1) {\n            this.mapMarkerService.routerMarkers.splice(index, 1);\n          }\n          this.mapMarkerService.markerToRouterId.delete(marker);\n        }\n\n        // Disable dragging if enabled\n        if (marker.dragging) {\n          marker.dragging.disable();\n        }\n\n        // Remove CSS classes\n        const markerElement = marker.getElement();\n        if (markerElement) {\n          markerElement.classList.remove('marker-draggable-active-identity');\n          markerElement.classList.remove('marker-draggable-active-router');\n        }\n\n        // Clear currentDraggableMarker if this is it\n        if (this.mapMarkerService.currentDraggableMarker === marker) {\n          this.mapMarkerService.currentDraggableMarker = null;\n        }\n      }\n\n      // Clear the location from state\n      if (type === 'identity') {\n        this.mapStateService.identityLocations.delete(item.id);\n      } else {\n        this.mapStateService.routerLocations.delete(item.id);\n      }\n\n      // Clear the geolocation tag and unsaved flag from the entity\n      if (item.tags) {\n        delete item.tags.geolocation;\n      }\n      item._unsavedLocation = false;\n    }\n\n    this.entityListPreview = null;\n    this.entityListPreviewType = null;\n    this.mapStateService.sidePanelCircuits = [];\n\n    // Reset marker selection\n    if (this.mapMarkerService.selectedMarker) {\n      this.updateMarkerIcon(this.mapMarkerService.selectedMarker, false);\n      this.resetMarkerOpacity();\n      this.mapMarkerService.selectedMarker = null;\n    }\n  }\n\n  openIdentityPanel(identity: any) {\n    if (!identity || !identity.id) return;\n\n    // Get identity location\n    const location = this.mapStateService.identityLocations.get(identity.id);\n\n    // Open side panel with identity data\n    this.openSidePanel('marker', {\n      type: 'identity',\n      item: identity,\n      location: location\n    });\n  }\n\n  openServicePanel(service: any) {\n    if (!service || !service.id) return;\n\n    // Open side panel with service data\n    this.openSidePanel('marker', {\n      type: 'services', // Use plural to match getEntityCircuits() logic\n      item: service,\n      location: null // Services don't have location\n    });\n  }\n\n  openEntityPanel(entityId: string, entityType: string) {\n    if (!entityId || !entityType) return;\n\n    if (entityType === 'identity') {\n      // Find the identity\n      const identity = this.identities.find(id => id.id === entityId);\n      if (identity) {\n        this.openIdentityPanel(identity);\n        // Center on map\n        const location = this.mapStateService.identityLocations.get(entityId);\n        if (location && location.lat && location.lng) {\n          this.map.panTo([location.lat, location.lng]);\n        }\n      }\n    } else if (entityType === 'routers') {\n      // Find the router\n      const router = this.edgeRouters.find(r => r.id === entityId);\n      if (router) {\n        this.openRouterPanel(router);\n        // Center on map\n        const location = this.mapStateService.routerLocations.get(entityId);\n        if (location && location.lat && location.lng) {\n          this.map.panTo([location.lat, location.lng]);\n        }\n      }\n    }\n  }\n\n  parseConnectionType(type: string): string {\n    if (!type) return 'N/A';\n    // Remove \"link.\" prefix if present\n    return type.replace(/^link\\./, '');\n  }\n\n  parseEndpoint(endpoint: string): { protocol: string, address: string, port: string } {\n    if (!endpoint) {\n      return { protocol: 'N/A', address: 'N/A', port: 'N/A' };\n    }\n\n    // Format: \"tcp:172.31.20.189:44162\"\n    // Split by colon\n    const parts = endpoint.split(':');\n\n    if (parts.length >= 3) {\n      const protocol = parts[0]; // \"tcp\"\n      const address = parts[1]; // \"172.31.20.189\"\n      const port = parts.slice(2).join(':'); // \"44162\" (join in case there are more colons)\n\n      return { protocol, address, port };\n    } else if (parts.length === 2) {\n      // Format might be \"protocol:address\" without port\n      return { protocol: parts[0], address: parts[1], port: 'N/A' };\n    } else {\n      // Unexpected format\n      return { protocol: 'N/A', address: endpoint, port: 'N/A' };\n    }\n  }\n\n  updateGeolocationLocal(item: any, lat: number, lng: number, type: string): void {\n    // Track the original location BEFORE updating (for unsaved changes detection)\n    this.geolocationService.trackOriginalLocation(item);\n\n    // Update the item's geolocation tag using the service\n    this.geolocationService.updateGeolocationLocal(item, lat, lng);\n\n    // Mark item as having unsaved location changes\n    item._unsavedLocation = true;\n\n    // Update the location in our maps\n    if (type === 'routers') {\n      this.mapStateService.setRouterLocation(item.id, { lat, lng, name: item.name });\n    } else if (type === 'identity') {\n      this.mapStateService.setIdentityLocation(item.id, { lat, lng, name: item.name });\n    }\n\n    // Redraw circuits/links since position changed\n    if (this.mapStateService.linksVisible) {\n      this.drawLinks(this.links);\n    }\n    if (this.mapStateService.activeCircuitsVisible) {\n      this.drawActiveCircuits(this.circuits);\n    }\n  }\n\n  handleGeolocationRemoval(item: any, type: string, marker: any): void {\n    // Remove marker from map and service collections\n    this.mapMarkerService.removeMarker(\n      marker,\n      type,\n      this.identityClusterGroup,\n      this.routerClusterGroup,\n      this.mapStateService.routerLocations,\n      this.mapStateService.identityLocations,\n      item.id\n    );\n\n    // Remove geolocation from backend using the service\n    this.geolocationService.removeGeolocation(item, type, this.mapStateService.routerTypes).then(() => {\n      // Show success message\n      const successGrowler = new GrowlerModel(\n        'success',\n        'Geolocation Removed',\n        `Geolocation for ${item.name} has been removed successfully`\n      );\n      this.growlerService.show(successGrowler);\n\n      // Update counts\n      if (type === 'identity') {\n        this.unlocatedIdentities = this.identities.filter(identity => identity.typeId !== 'Router' && !identity.tags?.geolocation).length;\n        this.geolocatedIdentities = this.identities.filter(identity => identity.typeId !== 'Router' && identity.tags?.geolocation).length;\n      } else if (type === 'routers') {\n        this.unlocatedRouters = this.edgeRouters.filter(router => !router.tags?.geolocation).length;\n        this.geolocatedRouters = this.edgeRouters.filter(router => router.tags?.geolocation).length;\n      }\n\n      // Update unlocated entity lists if the unlocated panel is open\n      if (this.mapStateService.sidePanelType === 'unlocated') {\n        const unlocatedIdentities = this.identities.filter(identity =>\n          (identity.typeId !== 'Router') && (!identity.tags?.geolocation || identity.tags.geolocation.trim() === '')\n        );\n        const unlocatedRouters = this.edgeRouters.filter(router =>\n          !router.tags?.geolocation || router.tags.geolocation.trim() === ''\n        );\n\n        // Update the panel data\n        this.mapStateService.sidePanelData = {\n          unlocatedIdentities,\n          unlocatedRouters\n        };\n\n        // Update filtered lists based on current search\n        this.filteredUnlocatedIdentities = unlocatedIdentities.filter(identity =>\n          identity.name?.toLowerCase().includes(this.unlocatedIdentitiesSearch.toLowerCase())\n        );\n        this.filteredUnlocatedRouters = unlocatedRouters.filter(router =>\n          router.name?.toLowerCase().includes(this.unlocatedRoutersSearch.toLowerCase())\n        );\n      }\n\n      // Update entity list if it's open and showing the affected entity type\n      if (this.mapStateService.sidePanelType === 'entityList') {\n        const entityType = this.mapStateService.sidePanelData?.entityType;\n        if ((type === 'identity' && entityType === 'identities') || (type === 'routers' && entityType === 'routers')) {\n          // Refresh the entity list to reflect the location change\n          this.updateEntityListAfterLocationChange();\n        }\n      }\n\n      // Redraw circuits and links\n      if (this.mapStateService.linksVisible) {\n        this.drawLinks(this.links);\n      }\n      if (this.mapStateService.activeCircuitsVisible) {\n        this.drawActiveCircuits(this.circuits);\n      }\n    }).catch(error => {\n      const errorMessage = this.zitiDataService.getErrorMessage(error);\n      const errorGrowler = new GrowlerModel(\n        'error',\n        'Remove Failed',\n        `Failed to remove geolocation: ${errorMessage}`\n      );\n      this.growlerService.show(errorGrowler);\n    });\n  }\n\n  updateEntityListAfterLocationChange() {\n    // Refresh the full entity list with updated data\n    if (this.entityListType === 'identities') {\n      const filteredIdentities = this.identities.filter(identity => identity.typeId !== 'Router');\n      this.fullEntityList = [...filteredIdentities];\n    } else if (this.entityListType === 'routers') {\n      this.fullEntityList = [...this.edgeRouters];\n    }\n\n    // Reapply filters to update the displayed list\n    this.applyEntityListFilters();\n  }\n\n  navigateToRoleAttribute(role: string) {\n    if (!role) return;\n\n    // Determine which filter to update based on the entity type\n    // Check entity list preview first, then side panel data, then unlocated preview\n    let entityType = this.entityListPreviewType ||\n                     this.mapStateService.sidePanelData?.type ||\n                     this.unlocatedPreviewType;\n\n    // For entity list, convert the entityListType to the appropriate type\n    if (this.mapStateService.sidePanelType === 'entityList' && this.entityListType) {\n      if (this.entityListType === 'identities') entityType = 'identity';\n      else if (this.entityListType === 'routers') entityType = 'routers';\n      else if (this.entityListType === 'services') entityType = 'service';\n    }\n\n    if (entityType === 'identity') {\n      // Add to identity attributes filter if not already present\n      if (!this.mapStateService.selectedIdentityAttributes.includes(role)) {\n        this.mapStateService.selectedIdentityAttributes = [...this.mapStateService.selectedIdentityAttributes, role];\n        this.reloadMapDataWithFilters();\n        this.checkAppliedFilters();\n      }\n    } else if (entityType === 'routers') {\n      // Add to router attributes filter if not already present\n      if (!this.mapStateService.selectedRouterAttributes.includes(role)) {\n        this.mapStateService.selectedRouterAttributes = [...this.mapStateService.selectedRouterAttributes, role];\n        this.reloadMapDataWithFilters();\n        this.checkAppliedFilters();\n      }\n    } else if (entityType === 'service') {\n      // Add to service attributes filter if not already present\n      if (!this.mapStateService.selectedServiceAttributes.includes(role)) {\n        this.mapStateService.selectedServiceAttributes = [...this.mapStateService.selectedServiceAttributes, role];\n        this.reloadMapDataWithFilters();\n        this.checkAppliedFilters();\n      }\n    }\n  }\n\n  getEntityOnlineStatus(item: any): boolean {\n    // Check both isOnline and connected properties (routers use 'connected')\n    return item?.isOnline ?? item?.connected ?? false;\n  }\n\n  hasUnsavedLocationChanges(item: any): boolean {\n    return this.geolocationService.hasUnsavedChanges(item);\n  }\n\n  async saveLocationChanges(item: any, type: string): Promise<void> {\n    if (!item || !item.id) return;\n\n    await this.geolocationService.saveGeolocation(item, type, this.mapStateService.routerTypes);\n\n    // Clear the unsaved location flag after successful save\n    item._unsavedLocation = false;\n\n    // Update counts (entity now has geolocation)\n    if (type === 'identity') {\n      this.unlocatedIdentities = this.identities.filter(identity => identity.typeId !== 'Router' && !identity.tags?.geolocation).length;\n      this.geolocatedIdentities = this.identities.filter(identity => identity.typeId !== 'Router' && identity.tags?.geolocation).length;\n    } else if (type === 'routers') {\n      this.unlocatedRouters = this.edgeRouters.filter(router => !router.tags?.geolocation).length;\n      this.geolocatedRouters = this.edgeRouters.filter(router => router.tags?.geolocation).length;\n    }\n\n    // Update unlocated entity lists if the unlocated panel is open\n    if (this.mapStateService.sidePanelType === 'unlocated') {\n      const unlocatedIdentities = this.identities.filter(identity =>\n        (identity.typeId !== 'Router') && (!identity.tags?.geolocation || identity.tags.geolocation.trim() === '')\n      );\n      const unlocatedRouters = this.edgeRouters.filter(router =>\n        !router.tags?.geolocation || router.tags.geolocation.trim() === ''\n      );\n\n      // Update the panel data\n      this.mapStateService.sidePanelData = {\n        unlocatedIdentities,\n        unlocatedRouters\n      };\n\n      // Update filtered lists based on current search\n      this.filteredUnlocatedIdentities = unlocatedIdentities.filter(identity =>\n        identity.name?.toLowerCase().includes(this.unlocatedIdentitiesSearch.toLowerCase())\n      );\n      this.filteredUnlocatedRouters = unlocatedRouters.filter(router =>\n        router.name?.toLowerCase().includes(this.unlocatedRoutersSearch.toLowerCase())\n      );\n    }\n\n    // Update entity list if it's open and showing the affected entity type\n    if (this.mapStateService.sidePanelType === 'entityList') {\n      const entityType = this.mapStateService.sidePanelData?.entityType;\n      if ((type === 'identity' && entityType === 'identities') || (type === 'routers' && entityType === 'routers')) {\n        // Refresh the entity list to reflect the location change\n        this.updateEntityListAfterLocationChange();\n      }\n    }\n\n    // Clean up draggable marker state and visual styling\n    if (this.mapMarkerService.currentDraggableMarker) {\n      const marker = this.mapMarkerService.currentDraggableMarker;\n\n      // Disable dragging\n      if (marker.dragging) {\n        marker.dragging.disable();\n      }\n\n      // Remove visual CSS classes\n      const markerElement = marker.getElement();\n      if (markerElement) {\n        markerElement.classList.remove('marker-draggable-active-identity');\n        markerElement.classList.remove('marker-draggable-active-router');\n      }\n\n      // Clear currentDraggableMarker reference\n      this.mapMarkerService.currentDraggableMarker = null;\n    }\n\n    // Reset marker selection and opacity\n    if (this.mapMarkerService.selectedMarker) {\n      this.updateMarkerIcon(this.mapMarkerService.selectedMarker, false);\n      this.mapMarkerService.selectedMarker = null;\n    }\n\n    // Reset opacity on all markers\n    this.resetMarkerOpacity();\n  }\n\n  async saveUnlocatedPreviewEntity(): Promise<void> {\n    if (!this.unlocatedPreviewEntity) {\n      return;\n    }\n\n    // Check if there are unsaved changes (either flag)\n    if (!this.unlocatedPreviewHasUnsavedLocation && !this.unlocatedPreviewEntity._unsavedLocation) {\n      return;\n    }\n\n    await this.saveLocationChanges(this.unlocatedPreviewEntity, this.unlocatedPreviewType);\n\n    // Clear the unsaved flags after successful save\n    this.unlocatedPreviewHasUnsavedLocation = false;\n\n    // Keep the preview open so user can continue dropping more entities\n    // Don't close the preview - just clear the unsaved flag\n  }\n\n  getEntityCircuits(entityId: string, entityType: string): any[] {\n    if (!entityId || !this.circuits || this.circuits.length === 0) {\n      return [];\n    }\n\n    const matchedCircuits = this.circuits.filter(circuit => {\n      if (entityType === 'identity') {\n        // Check if this identity is the client (initiator)\n        const clientId = circuit.tags?.clientId ||\n                         circuit.clientId ||\n                         circuit.client?.id ||\n                         circuit.sourceId ||\n                         circuit.initiator?.id;\n\n        if (clientId === entityId) {\n          return true;\n        }\n\n        // Check if this identity is the host\n        const hostIdFromTags = circuit.tags?.hostId;\n        if (hostIdFromTags === entityId) {\n          return true;\n        }\n\n        // Check via terminator\n        const terminatorIdFromCircuit = circuit.terminator?.id || circuit.terminatorId;\n        if (terminatorIdFromCircuit) {\n          const terminator = this.terminators.find(t => t.id === terminatorIdFromCircuit);\n          if (terminator) {\n            const hostIdentityId = terminator.hostId || terminator.identity?.id || terminator.identityId;\n            if (hostIdentityId === entityId) {\n              return true;\n            }\n          }\n        }\n      } else if (entityType === 'routers') {\n        // Check if this router is in the circuit path\n        // Handle both formats: circuit.path.nodes (new) or circuit.path (old)\n        const pathNodes = circuit.path?.nodes || circuit.path;\n\n        if (!pathNodes || !Array.isArray(pathNodes)) {\n          return false;\n        }\n\n        return pathNodes.some((node: any) => {\n          const routerId = node.id || node.routerId || node;\n          return routerId === entityId;\n        });\n      } else if (entityType === 'services') {\n        // Check if this circuit is using this service\n        const serviceId = circuit.service?.id || circuit.serviceId;\n        return serviceId === entityId;\n      }\n\n      return false;\n    });\n\n    return matchedCircuits;\n  }\n\n  clearActiveCircuits(): void {\n    this.mapRenderingService.activeCircuitLines.forEach(line => {\n      this.map.removeLayer(line);\n    });\n    this.mapRenderingService.activeCircuitLines = [];\n\n    // Scale down circuit markers and clear the set\n    this.scaleCircuitMarkers(false);\n    this.mapMarkerService.circuitMarkerIds.clear();\n  }\n\n  isCircuitSelectionActive(): boolean {\n    return !!(this.mapStateService.selectedCircuit || this.mapStateService.selectedUnlocatedCircuit);\n  }\n\n  selectCircuit(circuit: any, isUnlocatedPanel: boolean = false): void {\n    if (isUnlocatedPanel) {\n      // Toggle selection - if already selected, deselect it\n      if (this.mapStateService.selectedUnlocatedCircuit?.id === circuit.id) {\n        this.mapStateService.selectedUnlocatedCircuit = null;\n        this.mapStateService.selectedUnlocatedCircuitRouters = [];\n        this.mapStateService.selectedCircuitSegment = null; // Clear segment selection\n        // Clear circuit display and show all circuits if they were visible\n        this.clearActiveCircuits();\n        if (this.mapStateService.activeCircuitsVisible) {\n          this.drawActiveCircuits(this.circuits, false);\n        }\n      } else {\n        this.mapStateService.selectedUnlocatedCircuit = circuit;\n        this.mapStateService.selectedUnlocatedCircuitRouters = this.getCircuitRouters(circuit);\n        this.mapStateService.selectedCircuitSegment = null; // Clear segment selection when selecting from list\n        // Show only this circuit on the map (no segment highlighting from circuit list)\n        this.clearActiveCircuits();\n        this.drawActiveCircuits([circuit], false);\n      }\n    } else {\n      // Toggle selection - if already selected, deselect it\n      if (this.mapStateService.selectedCircuit?.id === circuit.id) {\n        this.mapStateService.selectedCircuit = null;\n        this.mapStateService.selectedCircuitRouters = [];\n        this.mapStateService.selectedCircuitSegment = null; // Clear segment selection\n        // Clear circuit display and show all circuits if they were visible\n        this.clearActiveCircuits();\n        if (this.mapStateService.activeCircuitsVisible) {\n          this.drawActiveCircuits(this.circuits, false);\n        }\n      } else {\n        this.mapStateService.selectedCircuit = circuit;\n        this.mapStateService.selectedCircuitRouters = this.getCircuitRouters(circuit);\n        this.mapStateService.selectedCircuitSegment = null; // Clear segment selection when selecting from list\n        // Show only this circuit on the map (no segment highlighting from circuit list)\n        this.clearActiveCircuits();\n        this.drawActiveCircuits([circuit], false);\n      }\n    }\n  }\n\n  getCircuitRouters(circuit: any): any[] {\n    if (!circuit) {\n      return [];\n    }\n\n    // Handle both formats: circuit.path.nodes (new) or circuit.path (old)\n    const pathNodes = circuit.path?.nodes || circuit.path;\n\n    if (!pathNodes || !Array.isArray(pathNodes)) {\n      return [];\n    }\n\n    // Map path nodes to router details\n    return pathNodes.map((node: any) => {\n      const routerId = node.id || node.routerId || node;\n\n      // Try to find the router in our edgeRouters array\n      const router = this.edgeRouters.find(r => r.id === routerId);\n      // Also check routerLocations map for the name\n      const routerLocation = this.mapStateService.routerLocations.get(routerId);\n\n      // If node already has full details, enrich it with connection status\n      if (node.name) {\n        // Always ensure we have the connected property\n        if (node.connected !== undefined) {\n          // Node already has connected status, return as-is\n          return node;\n        }\n        // Add connected property from router data or default to false if not found\n        return {\n          ...node,\n          connected: router ? (router.connected ?? router.isOnline ?? false) : false,\n          _notFound: !router\n        };\n      }\n\n      if (router) {\n        return {\n          id: router.id,\n          name: routerLocation?.name || router.name || routerId,\n          type: 'routers',\n          connected: router.connected ?? router.isOnline ?? false,\n          _notFound: false\n        };\n      }\n\n      // If not found, return basic info with location name if available\n      return {\n        id: routerId,\n        name: routerLocation?.name || routerId,\n        type: 'routers',\n        connected: false,\n        _notFound: true\n      };\n    });\n  }\n\n  // Wrapper method - delegates to MapMarkerService\n  findMarkerByItemId(itemId: string, itemType: string): any {\n    return this.mapMarkerService.findMarkerByItemId(itemId, itemType, this.identityClusterGroup, this.routerClusterGroup);\n  }\n\n  // Wrapper method - delegates to MapMarkerService\n  updateMarkerIcon(marker: any, isSelected: boolean): void {\n    this.mapMarkerService.updateMarkerIcon(marker, isSelected);\n  }\n\n  buildCircuitHops(data: any): any[] {\n    // Use the full path information including identities and routers\n    const routerNames = data.routerNames || [];\n    const entityIds = data.entityIds || [];\n    const entityTypes = data.entityTypes || [];\n\n    if (!routerNames || routerNames.length < 2) {\n      return [];\n    }\n\n    const hops = [];\n    for (let i = 0; i < routerNames.length - 1; i++) {\n      hops.push({\n        from: routerNames[i],\n        to: routerNames[i + 1],\n        fromId: entityIds[i],\n        toId: entityIds[i + 1],\n        fromType: entityTypes[i],\n        toType: entityTypes[i + 1],\n        index: i\n      });\n    }\n\n    return hops;\n  }\n\n  buildCircuitRouters(pathNodes: any[]): any[] {\n    if (!pathNodes || pathNodes.length === 0) {\n      return [];\n    }\n\n    return pathNodes.map((node, index) => ({\n      id: node.id,\n      name: node.name || node.id,\n      type: node.type || 'routers',\n      order: index + 1\n    }));\n  }\n\n  selectCircuitHop(hop: any, index: number): void {\n    // Clear selected router when selecting a hop\n    this.selectedRouterInPath = null;\n\n    // Update the selected segment to highlight it on the map\n    this.mapStateService.selectedCircuitSegment = {\n      circuitId: this.mapStateService.sidePanelData?.circuit?.id,\n      segmentIndex: index\n    };\n\n    // Store the current circuit data before redrawing\n    const currentCircuit = this.mapStateService.sidePanelData.circuit;\n    const currentCircuitHops = this.mapStateService.sidePanelData.circuitHops;\n    const currentCircuitRouters = this.mapStateService.sidePanelData.circuitRouters;\n    const currentPathNodes = this.mapStateService.sidePanelData.pathNodes;\n    const currentPathCoordinates = this.mapStateService.sidePanelData.pathCoordinates;\n    const currentRouterNames = this.mapStateService.sidePanelData.routerNames;\n    const currentEntityIds = this.mapStateService.sidePanelData.entityIds;\n    const currentEntityTypes = this.mapStateService.sidePanelData.entityTypes;\n\n    // Redraw the circuit with the new selected segment highlighted\n    this.clearActiveCircuits();\n    this.drawActiveCircuits([currentCircuit], false);\n\n    // Restore the panel state to circuit type with updated segment\n    this.mapStateService.sidePanelType = 'circuit';\n    this.mapStateService.sidePanelData = {\n      circuit: currentCircuit,\n      segment: {\n        from: hop.from,\n        to: hop.to,\n        fromId: hop.fromId,\n        toId: hop.toId,\n        fromType: hop.fromType,\n        toType: hop.toType,\n        index: index,\n        total: currentCircuitHops?.length || 0\n      },\n      circuitHops: currentCircuitHops,\n      circuitRouters: currentCircuitRouters,\n      pathNodes: currentPathNodes,\n      pathCoordinates: currentPathCoordinates,\n      routerNames: currentRouterNames,\n      entityIds: currentEntityIds,\n      entityTypes: currentEntityTypes\n    };\n  }\n\n  selectCircuitRouter(routerId: string, routerType: string): void {\n    // Track the selected router for highlighting in the table\n    this.selectedRouterInPath = routerId;\n\n    // Find the router/identity entity and get its location\n    let location: any = null;\n\n    if (routerType === 'identity') {\n      const identity = this.identities.find(id => id.id === routerId);\n      if (identity) {\n        location = this.mapStateService.identityLocations.get(routerId);\n        // Set preview entity with location data\n        this.circuitPreviewEntity = {\n          ...identity,\n          _location: location\n        };\n        this.circuitPreviewEntityType = 'identity';\n      }\n    } else if (routerType === 'routers') {\n      const router = this.edgeRouters.find(r => r.id === routerId);\n      if (router) {\n        location = this.mapStateService.routerLocations.get(routerId);\n        // Set preview entity with location data\n        this.circuitPreviewEntity = {\n          ...router,\n          _location: location\n        };\n        this.circuitPreviewEntityType = 'routers';\n      }\n    }\n\n    // Center the map on the router/identity location, expanding its cluster if needed\n    if (location && location.lat && location.lng) {\n      const marker = this.findMarkerByItemId(routerId, routerType);\n      const clusterGroup = routerType === 'identity' ? this.identityClusterGroup : this.routerClusterGroup;\n\n      if (marker && clusterGroup) {\n        // Select and highlight the marker first\n        if (this.mapMarkerService.selectedMarker) {\n          this.updateMarkerIcon(this.mapMarkerService.selectedMarker, false);\n          this.resetMarkerOpacity();\n        }\n        this.mapMarkerService.selectedMarker = marker;\n        this.updateMarkerIcon(marker, true);\n        this.applyMarkerOpacity(marker);\n\n        // Then zoom to show it\n        clusterGroup.zoomToShowLayer(marker);\n      } else {\n        // Fallback: marker not found (shouldn't normally happen), just pan\n        this.map.panTo([location.lat, location.lng]);\n      }\n    }\n  }\n\n  closeCircuitPreview(): void {\n    this.circuitPreviewEntity = null;\n    this.circuitPreviewEntityType = '';\n    this.selectedRouterInPath = null;\n  }\n\n  openCircuitPreview(circuit: any, event?: Event): void {\n    // Stop event propagation to prevent row click\n    if (event) {\n      event.stopPropagation();\n    }\n\n    // Clear any existing circuit preview\n    this.circuitPreviewEntity = null;\n    this.circuitPreviewEntityType = '';\n    this.selectedRouterInPath = null;\n\n    // Clear entity list preview state\n    this.entityListPreview = null;\n    this.entityListPreviewType = null;\n\n    // Use service to build circuit path data\n    const pathData = this.circuitPathBuilderService.buildCircuitPathData(\n      circuit,\n      this.mapStateService.routerLocations,\n      this.mapStateService.identityLocations,\n      this.edgeRouters,\n      this.identities,\n      this.links\n    );\n\n    if (!pathData) {\n      console.warn('Could not build circuit path data for circuit:', circuit.id);\n      return;\n    }\n\n    // Warn if some entities are missing geolocation data\n    if (!pathData.hasCompleteGeolocation) {\n      console.warn('Circuit has entities without geolocation data:', pathData.missingLocations.join(', '));\n    }\n\n    // Open the circuit panel with available data\n    if (pathData.circuitHops.length > 0) {\n      // Set the selected circuit and draw it on the map\n      this.mapStateService.selectedCircuit = circuit;\n      this.mapStateService.selectedCircuitRouters = pathData.circuitRouters;\n      this.mapStateService.selectedCircuitSegment = null; // Clear segment selection\n\n      // Clear and redraw the circuit on the map\n      this.clearActiveCircuits();\n      this.drawActiveCircuits([circuit], false);\n\n      this.openSidePanel('circuit', {\n        circuit: circuit,\n        segment: {\n          index: 0,\n          total: pathData.circuitHops.length,\n          from: pathData.circuitHops[0].from,\n          to: pathData.circuitHops[0].to,\n          fromId: pathData.circuitHops[0].fromId,\n          toId: pathData.circuitHops[0].toId,\n          fromType: pathData.circuitHops[0].fromType,\n          toType: pathData.circuitHops[0].toType,\n          isVisible: pathData.circuitHops[0].isVisible\n        },\n        pathNodes: pathData.pathNodes,\n        pathCoordinates: pathData.pathCoordinates,\n        routerNames: pathData.routerNames,\n        entityIds: pathData.entityIds,\n        entityTypes: pathData.entityTypes,\n        circuitHops: pathData.circuitHops,\n        circuitRouters: pathData.circuitRouters,\n        visibleSegmentToHopIndex: pathData.visibleSegmentToHopIndex\n      });\n    }\n  }\n\n  // Document click handler for closing dropdowns\n  private handleDocumentClick(event: Event): void {\n    const target = event.target as HTMLElement;\n    let dropdownClosed = false;\n\n    if (!target.closest('.service-filter-container')) {\n      if (this.mapStateService.showServiceDropdown) {\n        dropdownClosed = true;\n      }\n      this.mapStateService.showServiceDropdown = false;\n    }\n    if (!target.closest('.identity-filter-container')) {\n      if (this.mapStateService.showIdentityDropdown) {\n        dropdownClosed = true;\n      }\n      this.mapStateService.showIdentityDropdown = false;\n    }\n\n    // Re-enable map scroll when dropdowns close\n    if (dropdownClosed) {\n      this.enableMapScroll();\n    }\n  }\n\n  // Side panel resize handlers\n  onResizerMouseDown(event: MouseEvent): void {\n    event.preventDefault();\n    this.isResizing = true;\n    this.startX = event.clientX;\n    this.startWidth = this.mapStateService.sidePanelWidth;\n  }\n\n  private onMouseMove(event: MouseEvent): void {\n    if (!this.isResizing) {\n      return;\n    }\n\n    // Calculate the delta in pixels and convert to rem\n    const deltaX = this.startX - event.clientX;\n    const fontSize = parseFloat(getComputedStyle(document.documentElement).fontSize);\n    const deltaRem = deltaX / fontSize;\n\n    // Calculate new width\n    let newWidth = this.startWidth + deltaRem;\n\n    // Clamp to min/max\n    newWidth = Math.max(this.minPanelWidth, Math.min(this.maxPanelWidth, newWidth));\n\n    this.mapStateService.sidePanelWidth = newWidth;\n\n    // Update CSS variable\n    document.documentElement.style.setProperty('--side-panel-width', `${newWidth}rem`);\n  }\n\n  @HostListener('document:mouseup')\n  onMouseUp(): void {\n    if (this.isResizing) {\n      this.isResizing = false;\n    }\n  }\n\n  ngOnDestroy() {\n    this.subscription.unsubscribe();\n    document.removeEventListener('click', this.documentClickHandler);\n\n    // Clean up Leaflet map and event listeners\n    if (this.map) {\n      // Remove all event listeners from map\n      this.map.off();\n\n      // Clean up cluster groups\n      if (this.identityClusterGroup) {\n        this.identityClusterGroup.off();\n        this.identityClusterGroup.clearLayers();\n      }\n      if (this.routerClusterGroup) {\n        this.routerClusterGroup.off();\n        this.routerClusterGroup.clearLayers();\n      }\n\n      // Clear marker arrays\n      this.mapMarkerService.identityMarkers = [];\n      this.mapMarkerService.routerMarkers = [];\n\n      // Clear line arrays\n      this.mapRenderingService.circuitLines = [];\n      this.mapRenderingService.activeCircuitLines = [];\n\n      // Clear location maps\n      this.mapStateService.identityLocations.clear();\n      this.mapStateService.routerLocations.clear();\n      this.mapMarkerService.markerToIdentityId.clear();\n      this.mapMarkerService.markerToRouterId.clear();\n\n      // Remove the map\n      this.map.remove();\n      this.map = null;\n    }\n  }\n}\n","<div class=\"ziti-page-container\">\n  <div *ngIf=\"false\" class=\"overlay\"></div>\n  <div class=\"ziti-page-wrapper\">\n    <lib-form-field-container [showHeader]=\"false\" class=\"no-padding no-shadow\" style=\"z-index: 9999999;\">\n      <lib-geolocate-filter-bar\n        [(selectedRouterAttributes)]=\"selectedRouterAttributes\"\n        [(selectedIdentityAttributes)]=\"selectedIdentityAttributes\"\n        [(selectedIdentityNamedAttributes)]=\"selectedIdentityNamedAttributes\"\n        [(selectedServiceAttributes)]=\"selectedServiceAttributes\"\n        [(selectedServiceNamedAttributes)]=\"selectedServiceNamedAttributes\"\n        [(selectedConnectionStatus)]=\"selectedConnectionStatus\"\n        [routerRoleAttributes]=\"routerRoleAttributes\"\n        [identityRoleAttributes]=\"identityRoleAttributes\"\n        [identityNamedAttributes]=\"identityNamedAttributes\"\n        [serviceRoleAttributes]=\"serviceRoleAttributes\"\n        [serviceNamedAttributes]=\"serviceNamedAttributes\"\n        [filtersApplied]=\"filtersApplied\"\n        [showRouterFilterSelector]=\"showRouterFilterSelector\"\n        [showIdentityFilterSelector]=\"showIdentityFilterSelector\"\n        [showServiceFilterSelector]=\"showServiceFilterSelector\"\n        [showConnectionStatusFilterSelector]=\"showConnectionStatusFilterSelector\"\n        (routerFilterClicked)=\"showRouterFilter($event)\"\n        (identityFilterClicked)=\"showIdentityFilter($event)\"\n        (serviceFilterClicked)=\"showServiceFilter($event)\"\n        (connectionStatusFilterClicked)=\"showConnectionStatusFilter($event)\"\n        (routerFilterClosed)=\"closeRouterFilter($event)\"\n        (identityFilterClosed)=\"closeIdentityFilter($event)\"\n        (serviceFilterClosed)=\"closeServiceFilter($event)\"\n        (connectionStatusFilterClosed)=\"closeConnectionStatusFilter($event)\"\n        (routerRoleAttributesChanged)=\"onRouterRoleAttributesChange($event)\"\n        (identityNamedAttributesChanged)=\"onIdentityNamedAttributesChange($event)\"\n        (identityRoleAttributesChanged)=\"onIdentityRoleAttributesChange($event)\"\n        (serviceNamedAttributesChanged)=\"onServiceNamedAttributesChange($event)\"\n        (serviceRoleAttributesChanged)=\"onServiceRoleAttributesChange($event)\"\n        (connectionStatusChanged)=\"onConnectionStatusChange($event)\"\n        (identityFilterChanged)=\"getIdentityNamedAttributes($event)\"\n        (serviceFilterChanged)=\"getServiceNamedAttributes($event)\"\n        (clearFiltersClicked)=\"clearFilters($event)\"\n      >\n        <lib-entity-count-legend\n          [geolocatedIdentities]=\"geolocatedIdentities\"\n          [unlocatedIdentities]=\"unlocatedIdentities\"\n          [geolocatedRouters]=\"geolocatedRouters\"\n          [unlocatedRouters]=\"unlocatedRouters\"\n          [totalServices]=\"totalServices\"\n          [servicesWithActiveCircuits]=\"servicesWithActiveCircuits\"\n          [totalActiveCircuits]=\"circuits.length\"\n          (showLocatedIdentitiesClicked)=\"showLocatedIdentities()\"\n          (showUnlocatedIdentitiesClicked)=\"showUnlocatedIdentities()\"\n          (showLocatedRoutersClicked)=\"showLocatedRouters()\"\n          (showUnlocatedRoutersClicked)=\"showUnlocatedRouters()\"\n          (showAllServicesClicked)=\"showAllServices()\"\n          (showServicesWithActiveCircuitsClicked)=\"showServicesWithActiveCircuits()\"\n        ></lib-entity-count-legend>\n      </lib-geolocate-filter-bar>\n    </lib-form-field-container>\n    <div class=\"ziti-dashboard-row\">\n      <lib-form-field-container [showHeader]=\"false\" class=\"no-padding full-height no-shadow\">\n        <div class=\"map-layout\" [class.side-panel-open]=\"sidePanelOpen\">\n          <div class=\"map-container\"\n               (dragover)=\"onMapDragOver($event)\"\n               (drop)=\"onMapDrop($event)\"\n               (dragleave)=\"onMapDragLeave($event)\">\n            <div id=\"MainMap\"></div>\n            <lib-map-legend\n              [routersVisible]=\"routersVisible\"\n              [identitiesVisible]=\"identitiesVisible\"\n              [linksVisible]=\"linksVisible\"\n              [activeCircuitsVisible]=\"activeCircuitsVisible\"\n              [clusteringEnabled]=\"clusteringEnabled\"\n              [isCircuitSelectionActive]=\"isCircuitSelectionActive()\"\n              (routersToggled)=\"toggleRouters()\"\n              (identitiesToggled)=\"toggleIdentities()\"\n              (linksToggled)=\"toggleLinks()\"\n              (activeCircuitsToggled)=\"toggleActiveCircuits()\"\n              (clusteringToggled)=\"toggleClustering()\"\n            ></lib-map-legend>\n          </div>\n        </div>\n      </lib-form-field-container>\n      <lib-side-panel-container\n        [isOpen]=\"sidePanelOpen\"\n        [panelType]=\"sidePanelType\"\n        [panelData]=\"sidePanelData\"\n        [sidePanelCircuits]=\"sidePanelCircuits\"\n        [selectedCircuit]=\"selectedCircuit\"\n        [selectedCircuitRouters]=\"selectedCircuitRouters\"\n        [selectedCircuitSegment]=\"selectedCircuitSegment\"\n        [selectedRouterInPath]=\"selectedRouterInPath\"\n        [circuitPreviewEntity]=\"circuitPreviewEntity\"\n        [circuitPreviewEntityType]=\"circuitPreviewEntityType\"\n        [entityListType]=\"entityListType\"\n        [entityListSearch]=\"entityListSearch\"\n        [entityListPage]=\"entityListPage\"\n        [entityListPageSize]=\"entityListPageSize\"\n        [entityListTotal]=\"entityListTotal\"\n        [entityListLocationFilter]=\"entityListLocationFilter\"\n        [filteredEntityList]=\"filteredEntityList\"\n        [entityListPreview]=\"entityListPreview\"\n        [filteredUnlocatedIdentities]=\"filteredUnlocatedIdentities\"\n        [filteredUnlocatedRouters]=\"filteredUnlocatedRouters\"\n        [unlocatedIdentitiesSearch]=\"unlocatedIdentitiesSearch\"\n        [unlocatedRoutersSearch]=\"unlocatedRoutersSearch\"\n        [unlocatedPreviewEntity]=\"unlocatedPreviewEntity\"\n        [unlocatedPreviewType]=\"unlocatedPreviewType\"\n        [unlocatedPreviewCircuits]=\"unlocatedPreviewCircuits\"\n        [unlocatedPreviewHasUnsavedLocation]=\"unlocatedPreviewHasUnsavedLocation\"\n        [selectedUnlocatedCircuit]=\"selectedUnlocatedCircuit\"\n        [selectedUnlocatedCircuitRouters]=\"selectedUnlocatedCircuitRouters\"\n        [allCircuits]=\"circuits\"\n        [allIdentities]=\"identities\"\n        [allRouters]=\"edgeRouters\"\n        [allTerminators]=\"terminators\"\n        [servicesWithCircuitsSearch]=\"servicesWithCircuitsSearch\"\n        (closed)=\"closeSidePanel()\"\n        (circuitSelected)=\"selectCircuit($event, false)\"\n        (routerInPathSelected)=\"selectCircuitRouter($event.routerId, $event.routerType)\"\n        (saveLocationChanges)=\"saveLocationChanges($event.item, $event.type)\"\n        (navigateToDetails)=\"navigateToDetails($event.type, $event.id)\"\n        (circuitPreviewOpened)=\"openCircuitPreview($event)\"\n        (roleAttributeNavigated)=\"navigateToRoleAttribute($event)\"\n        (hopSelected)=\"selectCircuitHop($event.hop, $event.index)\"\n        (routerSelected)=\"selectCircuitRouter($event.routerId, $event.routerType)\"\n        (entityClicked)=\"openEntityPanel($event.entityId, $event.entityType)\"\n        (serviceClicked)=\"openServicePanel($event)\"\n        (circuitPreviewClosed)=\"closeCircuitPreview()\"\n        (entityPanelOpened)=\"openEntityPanel($event.entityId, $event.entityType)\"\n        (routerClicked)=\"openRouterPanel($event)\"\n        (entityListSearchChanged)=\"onEntityListSearchChange($event)\"\n        (entityListPageChanged)=\"onEntityListPageChange($event)\"\n        (entityListSortChanged)=\"onEntityListSortChange($event)\"\n        (entityListLocationFilterChanged)=\"onEntityListLocationFilterChange($event)\"\n        (entityListEntityClicked)=\"handleEntityListClick($event)\"\n        (entityListPreviewClosed)=\"closeEntityListPreview()\"\n        (unlocatedIdentitiesSearchChanged)=\"onUnlocatedIdentitiesSearchChange($event)\"\n        (unlocatedRoutersSearchChanged)=\"onUnlocatedRoutersSearchChange($event)\"\n        (unlocatedEntityDragStarted)=\"onDragStart($event.event, $event.entity, $event.type)\"\n        (unlocatedEntityClicked)=\"openEntityPreview($event.entity, $event.type)\"\n        (unlocatedPreviewClosed)=\"unlocatedPreviewEntity = null\"\n        (unlocatedSaveLocationClicked)=\"saveUnlocatedPreviewEntity()\"\n        (servicesSearchChanged)=\"onServicesWithCircuitsSearchChange($event)\"\n      ></lib-side-panel-container>\n    </div>\n  </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, interval, Subscription } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\nimport { catchError, map } from 'rxjs/operators';\nimport { of } from 'rxjs';\n\nexport interface HAController {\n  url: string;\n  name: string;\n  isOnline: boolean;\n  lastHealthCheck: Date | null;\n  lastResponseTime: number | null;\n  sessionToken: string | null;\n}\n\nexport interface HAClusterStatus {\n  enabled: boolean;\n  controllers: HAController[];\n  onlineCount: number;\n  totalCount: number;\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class HAControllerService {\n  private _clusterStatus$ = new BehaviorSubject<HAClusterStatus>({\n    enabled: false,\n    controllers: [],\n    onlineCount: 0,\n    totalCount: 0\n  });\n\n  public clusterStatus$ = this._clusterStatus$.asObservable();\n\n  private healthCheckSubscription: Subscription | null = null;\n  private readonly HEALTH_CHECK_INTERVAL = 30000; // 30 seconds\n\n  constructor(private httpClient: HttpClient) {\n    // Restore HA cluster status from localStorage on service initialization\n    this.restoreClusterStatus();\n  }\n\n  /**\n   * Initialize HA cluster with discovered controllers\n   */\n  initializeCluster(controllers: HAController[]): void {\n    const status = this._clusterStatus$.value;\n    const newStatus = {\n      ...status,\n      enabled: controllers.length > 1,\n      controllers: controllers,\n      totalCount: controllers.length,\n      onlineCount: controllers.filter(c => c.isOnline).length\n    };\n\n    this._clusterStatus$.next(newStatus);\n\n    // Persist to localStorage\n    this.saveClusterStatus(newStatus);\n\n    // Start health checks if enabled\n    if (controllers.length > 1) {\n      this.startHealthChecks();\n    }\n  }\n\n  /**\n   * Add a controller to the HA cluster\n   */\n  addController(controller: HAController): void {\n    const status = this._clusterStatus$.value;\n    const exists = status.controllers.find(c => c.url === controller.url);\n\n    if (!exists) {\n      const controllers = [...status.controllers, controller];\n      this._clusterStatus$.next({\n        enabled: controllers.length > 1,\n        controllers: controllers,\n        totalCount: controllers.length,\n        onlineCount: controllers.filter(c => c.isOnline).length\n      });\n\n      if (controllers.length > 1 && !this.healthCheckSubscription) {\n        this.startHealthChecks();\n      }\n    }\n  }\n\n  /**\n   * Remove a controller from the HA cluster\n   */\n  removeController(controllerUrl: string): void {\n    const status = this._clusterStatus$.value;\n    const controllers = status.controllers.filter(c => c.url !== controllerUrl);\n\n    this._clusterStatus$.next({\n      enabled: controllers.length > 1,\n      controllers: controllers,\n      totalCount: controllers.length,\n      onlineCount: controllers.filter(c => c.isOnline).length\n    });\n\n    if (controllers.length <= 1 && this.healthCheckSubscription) {\n      this.stopHealthChecks();\n    }\n  }\n\n  /**\n   * Update session token for a controller\n   */\n  updateSessionToken(controllerUrl: string, token: string): void {\n    const status = this._clusterStatus$.value;\n    const controllers = status.controllers.map(c => {\n      if (c.url === controllerUrl) {\n        return { ...c, sessionToken: token };\n      }\n      return c;\n    });\n\n    this._clusterStatus$.next({\n      ...status,\n      controllers: controllers\n    });\n  }\n\n  /**\n   * Get session token for a specific controller\n   */\n  getSessionToken(controllerUrl: string): string | null {\n    const controller = this._clusterStatus$.value.controllers.find(c => c.url === controllerUrl);\n    return controller?.sessionToken || null;\n  }\n\n  /**\n   * Get all online controllers\n   */\n  getOnlineControllers(): HAController[] {\n    return this._clusterStatus$.value.controllers.filter(c => c.isOnline);\n  }\n\n  /**\n   * Get all controllers with valid sessions\n   */\n  getControllersWithSessions(): HAController[] {\n    return this._clusterStatus$.value.controllers.filter(c => c.sessionToken && c.isOnline);\n  }\n\n  /**\n   * Check if HA is enabled\n   */\n  isHAEnabled(): boolean {\n    return this._clusterStatus$.value.enabled;\n  }\n\n  /**\n   * Perform health check on a single controller\n   */\n  private checkControllerHealth(controller: HAController): Observable<{ url: string; isOnline: boolean; responseTime: number }> {\n    const startTime = Date.now();\n    const healthUrl = `${controller.url}/edge/management/v1/version`;\n\n    return this.httpClient.get(healthUrl, {\n      headers: controller.sessionToken ? { 'zt-session': controller.sessionToken } : {}\n    }).pipe(\n      map(() => {\n        const responseTime = Date.now() - startTime;\n        return { url: controller.url, isOnline: true, responseTime };\n      }),\n      catchError((err) => {\n        // Silently handle health check failures (don't throw errors)\n        // This prevents ERROR -200 from appearing in console\n        return of({ url: controller.url, isOnline: false, responseTime: -1 });\n      })\n    );\n  }\n\n  /**\n   * Perform health checks on all controllers\n   */\n  private performHealthChecks(): void {\n    const status = this._clusterStatus$.value;\n    if (!status.enabled || status.controllers.length === 0) {\n      return;\n    }\n\n    // Check health of all controllers in parallel\n    const healthChecks = status.controllers.map(controller =>\n      this.checkControllerHealth(controller)\n    );\n\n    // Wait for all health checks to complete\n    Promise.all(healthChecks.map(obs => obs.toPromise())).then(results => {\n      const controllers = status.controllers.map(controller => {\n        const result = results.find(r => r && r.url === controller.url);\n        if (result) {\n          return {\n            ...controller,\n            isOnline: result.isOnline,\n            lastHealthCheck: new Date(),\n            lastResponseTime: result.responseTime\n          };\n        }\n        return controller;\n      });\n\n      this._clusterStatus$.next({\n        ...status,\n        controllers: controllers,\n        onlineCount: controllers.filter(c => c.isOnline).length\n      });\n    });\n  }\n\n  /**\n   * Start periodic health checks\n   */\n  private startHealthChecks(): void {\n    if (this.healthCheckSubscription) {\n      return; // Already running\n    }\n\n    // Delay initial health check to avoid errors during app bootstrap\n    // This gives the app time to fully initialize before checking controller health\n    setTimeout(() => {\n      this.performHealthChecks();\n    }, 5000); // 5 second delay\n\n    // Then start periodic checks\n    this.healthCheckSubscription = interval(this.HEALTH_CHECK_INTERVAL).subscribe(() => {\n      this.performHealthChecks();\n    });\n  }\n\n  /**\n   * Stop periodic health checks\n   */\n  private stopHealthChecks(): void {\n    if (this.healthCheckSubscription) {\n      this.healthCheckSubscription.unsubscribe();\n      this.healthCheckSubscription = null;\n    }\n  }\n\n  /**\n   * Reset HA cluster (disable and clear all controllers)\n   */\n  reset(): void {\n    this.stopHealthChecks();\n    const newStatus = {\n      enabled: false,\n      controllers: [],\n      onlineCount: 0,\n      totalCount: 0\n    };\n    this._clusterStatus$.next(newStatus);\n\n    // Clear from localStorage\n    this.clearClusterStatus();\n  }\n\n  /**\n   * Cleanup on service destruction\n   */\n  ngOnDestroy(): void {\n    this.stopHealthChecks();\n  }\n\n  /**\n   * Save cluster status to localStorage\n   */\n  private saveClusterStatus(status: HAClusterStatus): void {\n    try {\n      localStorage.setItem('ha.clusterStatus', JSON.stringify(status));\n    } catch (err) {\n      // Failed to save to localStorage\n    }\n  }\n\n  /**\n   * Restore cluster status from localStorage\n   */\n  private restoreClusterStatus(): void {\n    try {\n      const saved = localStorage.getItem('ha.clusterStatus');\n      if (saved) {\n        const status: HAClusterStatus = JSON.parse(saved);\n\n        // Validate that we have at least one controller before restoring\n        if (status.controllers && status.controllers.length > 0) {\n          // Count how many controllers were marked as online when saved\n          const onlineCount = status.controllers.filter(c => c.isOnline).length;\n\n          // Only enable HA if there are 2+ online controllers\n          // If only 1 controller is reachable, fall back to standard session auth\n          if (onlineCount >= 2) {\n            this._clusterStatus$.next(status);\n\n            // Restart health checks if enabled\n            // Note: Health checks will update online/offline status of controllers\n            if (status.enabled && status.controllers.length > 1) {\n              this.startHealthChecks();\n            }\n          } else {\n            // Not enough online controllers - disable HA mode\n            // Clear the cluster to fall back to standard session authentication\n            this.clearClusterStatus();\n          }\n        }\n      }\n    } catch (err) {\n      // Failed to restore from localStorage - clear corrupted data\n      this.clearClusterStatus();\n    }\n  }\n\n  /**\n   * Clear cluster status from localStorage\n   */\n  private clearClusterStatus(): void {\n    try {\n      localStorage.removeItem('ha.clusterStatus');\n    } catch (err) {\n      // Failed to clear from localStorage\n    }\n  }\n}\n","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport { HAControllerService, HAClusterStatus, HAController } from '../../../../services/ha-controller.service';\nimport { Subscription } from 'rxjs';\n\n@Component({\n  selector: 'lib-ha-status-indicator',\n  standalone: false,\n  templateUrl: './ha-status-indicator.component.html',\n  styleUrls: ['./ha-status-indicator.component.scss']\n})\nexport class HaStatusIndicatorComponent implements OnInit, OnDestroy {\n  clusterStatus: HAClusterStatus | null = null;\n  isExpanded = false;\n  private subscription: Subscription | null = null;\n\n  constructor(private haControllerService: HAControllerService) {}\n\n  ngOnInit(): void {\n    // Subscribe to cluster status updates\n    this.subscription = this.haControllerService.clusterStatus$.subscribe(\n      (status) => {\n        this.clusterStatus = status;\n      }\n    );\n  }\n\n  ngOnDestroy(): void {\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n    }\n  }\n\n  toggleExpanded(): void {\n    this.isExpanded = !this.isExpanded;\n  }\n\n  getControllerStatusClass(controller: HAController): string {\n    return controller.isOnline ? 'controller-online' : 'controller-offline';\n  }\n\n  getControllerIcon(controller: HAController): string {\n    return controller.isOnline ? 'check_circle' : 'error';\n  }\n\n  formatResponseTime(controller: HAController): string {\n    if (controller.lastResponseTime === null || controller.lastResponseTime < 0) {\n      return 'N/A';\n    }\n    return `${controller.lastResponseTime}ms`;\n  }\n\n  formatLastCheck(controller: HAController): string {\n    if (!controller.lastHealthCheck) {\n      return 'Never';\n    }\n    const now = new Date().getTime();\n    const lastCheck = new Date(controller.lastHealthCheck).getTime();\n    const seconds = Math.floor((now - lastCheck) / 1000);\n\n    if (seconds < 60) {\n      return `${seconds}s ago`;\n    } else if (seconds < 3600) {\n      return `${Math.floor(seconds / 60)}m ago`;\n    } else {\n      return `${Math.floor(seconds / 3600)}h ago`;\n    }\n  }\n\n  get statusSummary(): string {\n    if (!this.clusterStatus || !this.clusterStatus.enabled) {\n      return 'HA Disabled';\n    }\n    return `${this.clusterStatus.onlineCount}/${this.clusterStatus.totalCount} Online`;\n  }\n\n  get statusIcon(): string {\n    if (!this.clusterStatus || !this.clusterStatus.enabled) {\n      return 'cloud_off';\n    }\n    if (this.clusterStatus.onlineCount === 0) {\n      return 'cloud_off';\n    }\n    if (this.clusterStatus.onlineCount < this.clusterStatus.totalCount) {\n      return 'cloud_queue';\n    }\n    return 'cloud_done';\n  }\n\n  get statusClass(): string {\n    if (!this.clusterStatus || !this.clusterStatus.enabled) {\n      return 'status-disabled';\n    }\n    if (this.clusterStatus.onlineCount === 0) {\n      return 'status-error';\n    }\n    if (this.clusterStatus.onlineCount < this.clusterStatus.totalCount) {\n      return 'status-warning';\n    }\n    return 'status-success';\n  }\n}\n","<div class=\"ha-status-indicator\" *ngIf=\"clusterStatus && clusterStatus.enabled\">\n  <div class=\"status-summary\" [ngClass]=\"statusClass\" (click)=\"toggleExpanded()\">\n    <i class=\"material-icons status-icon\">{{ statusIcon }}</i>\n    <span class=\"status-text\">{{ statusSummary }}</span>\n    <i class=\"material-icons expand-icon\" [class.expanded]=\"isExpanded\">\n      {{ isExpanded ? 'expand_less' : 'expand_more' }}\n    </i>\n  </div>\n\n  <div class=\"controller-details\" *ngIf=\"isExpanded\">\n    <div class=\"controller-list\">\n      <div\n        *ngFor=\"let controller of clusterStatus.controllers\"\n        class=\"controller-item\"\n        [ngClass]=\"getControllerStatusClass(controller)\"\n      >\n        <div class=\"controller-info\">\n          <i class=\"material-icons controller-status-icon\">{{ getControllerIcon(controller) }}</i>\n          <div class=\"controller-text\">\n            <div class=\"controller-name\">{{ controller.name }}</div>\n            <div class=\"controller-url\">{{ controller.url }}</div>\n          </div>\n        </div>\n        <div class=\"controller-metrics\">\n          <div class=\"metric\">\n            <span class=\"metric-label\">Response:</span>\n            <span class=\"metric-value\">{{ formatResponseTime(controller) }}</span>\n          </div>\n          <div class=\"metric\">\n            <span class=\"metric-label\">Last Check:</span>\n            <span class=\"metric-value\">{{ formatLastCheck(controller) }}</span>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n","import {Component, OnInit, OnDestroy, Inject} from '@angular/core';\nimport { ZitiDataService, ZITI_DATA_SERVICE } from '../../services/ziti-data.service';\nimport { Subscription } from 'rxjs';\nimport { ActivatedRoute } from '@angular/router';\n\n@Component({\n    selector: 'lib-attributes',\n    templateUrl: './attributes.component.html',\n    styleUrls: ['./attributes.component.scss'],\n    standalone: false\n})\nexport class AttributesComponent implements OnInit, OnDestroy {\n  attributes: any[] = [];\n  identities: any[] = [];\n  services: any[] = [];\n  edgeRouters: any[] = [];\n  postureChecks: any[] = [];\n  identityAttributes: any[] = [];\n  edgeRouterAttributes: any[] = [];\n  serviceAttributes: any[] = [];\n  selectedAttribute: any = null;\n\n  private subscription = new Subscription();\n\n  constructor(\n    @Inject(ZITI_DATA_SERVICE) private zitiDataService: ZitiDataService,\n    private route: ActivatedRoute\n  ) {}\n\n  ngOnInit(): void {\n    this.loadData();\n  }\n\n  loadData() {\n      const promises: Promise<any>[] = [];\n      promises.push(this.zitiDataService.get('identities', {}, []).then(data => {\n          this.identities = data?.data || [];\n      }));\n      promises.push(this.zitiDataService.get('services', {}, []).then(data => {\n          this.services = data?.data || [];\n      }));\n      promises.push(this.zitiDataService.get('edge-routers', {}, []).then(data => {\n          this.edgeRouters = data?.data || [];\n      }));\n      promises.push(this.zitiDataService.get('posture-checks', {}, []).then(data => {\n          this.postureChecks = data?.data || [];\n      }));\n      promises.push(this.zitiDataService.get('identity-role-attributes', {}, []).then(data => {\n          this.identityAttributes = data?.data || [];\n      }));\n      promises.push(this.zitiDataService.get('edge-router-role-attributes', {}, []).then(data => {\n          this.edgeRouterAttributes = data?.data || [];\n      }));\n      promises.push(this.zitiDataService.get('service-role-attributes', {}, []).then(data => {\n          this.serviceAttributes = data?.data || [];\n      }));\n      Promise.all(promises).then(() => {\n          this.attributesLoaded();\n      });\n  }\n\n  attributesLoaded() {\n      this.attributes = [];\n      const attributes = [...this.identityAttributes, ...this.serviceAttributes, ...this.edgeRouterAttributes];\n      attributes.forEach(attr => {\n          this.attributes.push({\n              name: attr,\n              identities: this.countOccurrences(this.identities, attr),\n              services: this.countOccurrences(this.services, attr),\n              postureChecks: this.countOccurrences(this.postureChecks, attr),\n              routers: this.countOccurrences(this.edgeRouters, attr)\n          })\n      });\n  }\n\n  calculateAttributes() {\n    const allAttributes = new Set<string>();\n    [...this.identityAttributes, ...this.serviceAttributes, ...this.edgeRouterAttributes].forEach(item => {\n      item.roleAttributes?.forEach(attr => allAttributes.add(attr));\n    });\n\n    this.attributes = Array.from(allAttributes).map(attr => ({\n      name: attr,\n      identities: this.countOccurrences(this.identities, attr),\n      services: this.countOccurrences(this.services, attr),\n      routers: this.countOccurrences(this.edgeRouters, attr),\n      postureChecks: this.countOccurrences(this.postureChecks, attr)\n    })).sort((a, b) => a.name.localeCompare(b.name));\n  }\n\n  countOccurrences(items: any[], attribute: string): number {\n    return items.filter(item => item.roleAttributes?.includes(attribute)).length;\n  }\n\n  getAssociatedItems(items: any[], attribute: string): string {\n    return items.filter(item => item.roleAttributes?.includes(attribute)).map(item => `<li>${item.name}</li>`).join('');\n  }\n\n  editAttribute(attributeName: string) {\n    this.selectedAttribute = this.attributes.find(attr => attr.name === attributeName);\n  }\n\n  closeModal() {\n    this.selectedAttribute = null;\n  }\n\n  ngOnDestroy() {\n    this.subscription.unsubscribe();\n  }\n}\n","<div class=\"ziti-page-container\">\n  <div class=\"header\">\n    <div class=\"title\"><span>Manage Attributes</span></div>\n    <div class=\"line\"></div>\n    <div class=\"tabs\">\n      <div class=\"tab selected\"><span>Manage Attributes</span></div>\n    </div>\n  </div>\n  <div class=\"data-table-container\">\n    @if (attributes.length === 0) {\n      <div class=\"noitems\"></div>\n    }\n    @if (attributes.length > 0) {\n      <div class=\"table\">\n        <div class=\"head data-table columns\">\n          <div class=\"col\">Name<div class=\"dragger\"></div></div>\n          <div class=\"col\">Identities<div class=\"dragger\"></div></div>\n          <div class=\"col\">Services<div class=\"dragger\"></div></div>\n          <div class=\"col\">Routers<div class=\"dragger\"></div></div>\n          <div class=\"col\">Posture Checks</div>\n        </div>\n        <div class=\"rows\">\n          @for (attr of attributes; track attr) {\n            <div class=\"row data-table columns\">\n              <div class=\"col\" style=\"padding-left: 10px;\"><a (click)=\"editAttribute(attr.name)\">{{attr.name}}</a></div>\n              <div class=\"col desktop\">{{attr.identities}}</div>\n              <div class=\"col desktop\">{{attr.services}}</div>\n              <div class=\"col desktop\">{{attr.routers}}</div>\n              <div class=\"col desktop\">{{attr.postureChecks}}</div>\n            </div>\n          }\n        </div>\n      </div>\n    }\n    @if (attributes.length === 0) {\n      <div class=\"nodata\">\n        <span>No</span>\n        <span>Attributes</span>\n        <span>None Defined</span>\n        <span>Attributes</span>.\n      </div>\n    }\n  </div>\n\n  @if (selectedAttribute) {\n    <div id=\"DetailModal\" class=\"details-modal\">\n      <div class=\"center-content-container\">\n        <div class=\"close icon-close\" (click)=\"closeModal()\"></div>\n        <div class=\"title\">\n          <span>View Attribute</span>\n        </div>\n        <div class=\"subtitle\">Attribute Details</div>\n        <label for=\"Name\">Name</label>\n        <div id=\"Name\">{{selectedAttribute.name}}</div>\n        <label for=\"Identities\">Identities</label>\n        <div id=\"Identities\" [innerHTML]=\"getAssociatedItems(identities, selectedAttribute.name) || '-'\"></div>\n        <label for=\"Services\">Services</label>\n        <div id=\"Services\" [innerHTML]=\"getAssociatedItems(services, selectedAttribute.name) || '-'\"></div>\n        <label for=\"Routers\">Routers</label>\n        <div id=\"Routers\" [innerHTML]=\"getAssociatedItems(edgeRouters, selectedAttribute.name) || '-'\"></div>\n        <label for=\"PostureChecks\">Posture Checks</label>\n        <div id=\"PostureChecks\" [innerHTML]=\"getAssociatedItems(postureChecks, selectedAttribute.name) || '-'\"></div>\n      </div>\n    </div>\n  }\n</div>\n","import {Component, EventEmitter, Inject, Input, OnInit, OnDestroy} from '@angular/core';\nimport {Router, NavigationEnd} from '@angular/router';\nimport { CommonModule } from '@angular/common';\nimport {FormsModule} from '@angular/forms';\nimport {defer} from 'lodash-es';\nimport {ZITI_NAVIGATOR} from \"../../ziti-console.constants\";\nimport {Subscription} from 'rxjs';\nimport {filter} from 'rxjs/operators';\nimport {HAControllerService} from '../../services/ha-controller.service';\n\n@Component({\n  selector: 'lib-side-navigator',\n  templateUrl: './side-navigator.component.html',\n  styleUrls: ['./side-navigator.component.scss'],\n  standalone: false\n})\nexport class SideNavigatorComponent implements OnInit, OnDestroy {\n\n  @Input() version = '';\n  currentNetwork: any = {};\n\n  navExpanded = true;\n  navHidden = false;\n  hideMenuNavBar = false;\n  betaFeaturesEnabled = false;\n  isHAEnabled = false;\n\n  private routerSubscription?: Subscription;\n  private haSubscription?: Subscription;\n  private selectedNavItem: any = null;\n\n  constructor(\n      private router: Router,\n      @Inject(ZITI_NAVIGATOR) public currentNav: any,\n      private haControllerService: HAControllerService\n  ) {}\n\n  ngOnInit() {\n    // Set initial selected nav item based on current route\n    this.updateSelectedNavItem(this.router.url);\n\n    // Subscribe to router navigation events\n    this.routerSubscription = this.router.events.pipe(\n      filter((event): event is NavigationEnd => event instanceof NavigationEnd)\n    ).subscribe((event) => {\n      this.updateSelectedNavItem(event.urlAfterRedirects);\n    });\n\n    // Subscribe to HA cluster status\n    this.haSubscription = this.haControllerService.clusterStatus$.subscribe((status) => {\n      this.isHAEnabled = status.enabled;\n    });\n  }\n\n  ngOnDestroy() {\n    if (this.routerSubscription) {\n      this.routerSubscription.unsubscribe();\n    }\n    if (this.haSubscription) {\n      this.haSubscription.unsubscribe();\n    }\n  }\n\n  private updateSelectedNavItem(url: string) {\n    let bestMatch: any = null;\n    let bestMatchScore = -1;\n\n    for (const group of this.currentNav.groups) {\n      for (const item of group.menuItems) {\n        const matchScore = this.getRouteMatchScore(url, item);\n        if (matchScore > bestMatchScore) {\n          bestMatchScore = matchScore;\n          bestMatch = item;\n        }\n      }\n    }\n\n    this.selectedNavItem = bestMatch;\n  }\n\n  private getRouteMatchScore(currentUrl: string, navItem: any): number {\n    if (!navItem.route) {\n      return -1;\n    }\n\n    let highestScore = -1;\n\n    if (navItem.selectedRoutes && Array.isArray(navItem.selectedRoutes)) {\n      for (const route of navItem.selectedRoutes) {\n        const score = this.calculateMatchScore(currentUrl, route);\n        if (score > highestScore) {\n          highestScore = score;\n        }\n      }\n    } else {\n      highestScore = this.calculateMatchScore(currentUrl, navItem.route);\n    }\n\n    return highestScore;\n  }\n\n  private calculateMatchScore(currentUrl: string, navRoute: string): number {\n    const cleanUrl = currentUrl.split('?')[0].split('#')[0];\n\n    const normalizedUrl = cleanUrl.replace(/^\\/|\\/$/g, '');\n    const normalizedRoute = navRoute.replace(/^\\/|\\/$/g, '');\n\n    const urlSegments = normalizedUrl.split('/');\n    const routeSegments = normalizedRoute.split('/');\n\n    if (routeSegments.length > urlSegments.length) {\n      return -1;\n    }\n\n    const allSegmentsMatch = routeSegments.every((segment, index) => segment === urlSegments[index]);\n\n    if (!allSegmentsMatch) {\n      return -1; // No match\n    }\n\n    return routeSegments.length;\n  }\n\n\n  navItemSelected(navItem: any): boolean {\n    return this.selectedNavItem === navItem;\n  }\n\n  isNavItemDisabled(navItem: any) {\n\n  }\n\n  doNavAction(event, navItem: any) {\n    const isCommandOrCtrl = event.metaKey || event.ctrlKey;\n\n    if (isCommandOrCtrl) {\n      // No-Op allow the native browser behavior (ie. open in new window)\n    } else {\n      this.router.navigate([navItem.route]);\n      event.preventDefault();\n    }\n  }\n\n  showExpandCollapseIcon = false;\n  showExpandCollapseIconChange: EventEmitter<boolean> = new EventEmitter();\n  showExpandCollapse(event: any) {\n    defer(() => {\n      this.showExpandCollapseIcon = true;\n      this.showExpandCollapseIconChange.emit(this.showExpandCollapseIcon);\n    })\n  }\n\n  hideExpandCollapse(event: any) {\n    this.showExpandCollapseIcon = false;\n    this.showExpandCollapseIconChange.emit(this.showExpandCollapseIcon);\n  }\n\n  toggleNavigationExpanded(event: any) {\n    this.navExpanded = !this.navExpanded;\n  }\n\n  get expandCollapseIconVisible() {\n    return this.showExpandCollapseIcon || !this.navExpanded;\n  }\n}\n","<div class=\"side-navigator-wrapper\">\n  <div [ngClass]=\"{ 'nav-expanded': navExpanded, 'nav-hiddnen': navHidden }\" class=\"side-navigator-container\" (mouseenter)=\"showExpandCollapse($event)\" (mouseleave)=\"hideExpandCollapse($event)\">\n    <div cdkScrollable class=\"side-navigator-menu-container\" [ngClass]=\"{'hide-menu-nav-bar': hideMenuNavBar}\">\n      @for (group of currentNav.groups; track group) {\n        <div class=\"side-navigator-menu-group\">\n          <span class=\"side-navigator-menu-group-label\">{{ group.label }}</span>\n          @if (group.headerBuffer) {\n            <div class=\"side-navigator-header-buffer\"></div>\n          }\n          @for (item of group.menuItems; track item) {\n            <div class=\"{{item.class}}\">\n              @if ((!item.isBetaFeature || (item.isBetaFeature && betaFeaturesEnabled))) {\n                <a\n                  class=\"side-navigator-menu-item {{ item.className }}\"\n                  (click)=\"doNavAction($event, item)\"\n            [ngClass]=\"{\n              selected: navItemSelected(item),\n              disabled: isNavItemDisabled(item)\n            }\"\n                  [title]=\"item.tooltip\"\n                  [href]=\"'./'+item.route\"\n                  >\n                  <div class=\"side-navigator-menu-item-icon\">\n                    <div class=\"image\" class=\"{{ item.iconClass }}\"></div>\n                    @if (item.badgeCount) {\n                      <span class=\"counterBadge\">{{ item.badgeCount }}</span>\n                    }\n                  </div>\n                  <span class=\"side-navigator-menu-item-label\">\n                    {{ item.label }}\n                    <span class=\"side-navigator-menu-item-sublabel\">{{ item.sublabel }}</span>\n                  </span>\n                </a>\n              }\n            </div>\n          }\n        </div>\n      }\n    </div>\n    <div class=\"side-navigator-footer-container\">\n      <div class=\"side-navigator-version-container\">\n        <div style=\"font-size: .875rem;\" class=\"networkInfo\" id=\"NetworkVersion\">\n          <span class=\"network-semver\">{{ version }}</span>\n        </div>\n        @if (isHAEnabled) {\n          <div class=\"ha-enabled-text\">\n            <span class=\"ha-badge\">HA</span> Enabled\n          </div>\n        }\n      </div>\n    </div>\n  </div>\n  <div class=\"expand-collapse-hitbox-container\" [ngClass]=\"{'expand-collapse-container-closed': !navExpanded}\" (mouseenter)=\"showExpandCollapse($event)\" (mouseleave)=\"hideExpandCollapse($event)\">\n    <div class=\"expand-collapse-icon icon-prev\" [ngClass]=\"{'expand-collapse-icon-visible': expandCollapseIconVisible}\" (click)=\"toggleNavigationExpanded($event)\"></div>\n  </div>\n</div>\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Component, Inject} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef} from \"@angular/material/dialog\";\nimport {Router} from \"@angular/router\";\n\n@Component({\n  selector: 'lib-quick-add',\n  templateUrl: './quick-add.component.html',\n  styleUrls: ['./quick-add.component.scss'],\n  standalone: false\n})\nexport class QuickAddComponent {\n\n  constructor(\n    private dialogRef: MatDialogRef<QuickAddComponent>,\n    @Inject(MAT_DIALOG_DATA) public data: any,\n    private router: Router,\n  ) {\n\n  }\n\n  identityLinkClicked(event) {\n    this.router.navigateByUrl('/identities/create');\n    event.preventDefault();\n    this.close()\n  }\n\n  serviceLinkClicked(event) {\n    this.router.navigateByUrl('/services/simple');\n    event.preventDefault();\n    this.close()\n  }\n\n  close() {\n    this.dialogRef.close();\n  }\n}\n","<div class=\"quick-add-modal-container\">\n  <div class=\"close icon-close\" (click)=\"close()\"></div>\n  <div class=\"quick-add-modal-body\">\n    <div class=\"quick-add-modal-content\">\n      <div class=\"quick-add-title-container\">\n        <span class=\"quick-add-title\">Quick Add</span>\n        <span class=\"quick-add-subtitle\">Select the entity type you would like to create</span>\n      </div>\n    </div>\n    <div class=\"quick-add-options-container\">\n      <a href=\"./identities/create\" class=\"add-identity-button quick-add-button\" (click)=\"identityLinkClicked($event)\">\n        <div class=\"option-icon icon-identity\"></div>\n        <div class=\"option-label\">Add Identity</div>\n      </a>\n      <a href=\"./services/simple\" class=\"add-service-button quick-add-button\" (click)=\"serviceLinkClicked($event)\">\n        <div class=\"option-icon icon-services\"></div>\n        <div class=\"option-label\">Add Service</div>\n      </a>\n    </div>\n  </div>\n</div>\n","import {Component, Inject, Input} from '@angular/core';\nimport {ActivatedRoute, ActivatedRouteSnapshot, Router, UrlSegmentGroup} from '@angular/router';\nimport {ConfirmComponent} from \"../confirm/confirm.component\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {LoginServiceClass, ZAC_LOGIN_SERVICE} from \"../../services/login-service.class\";\nimport {QuickAddComponent} from \"../quick-add/quick-add.component\";\n\n@Component({\n  selector: 'lib-header-bar',\n  templateUrl: './header-bar.component.html',\n  styleUrls: ['./header-bar.component.scss'],\n  standalone: false\n})\nexport class HeaderBarComponent {\n\n  @Input() headerTitle = '';\n\n  alertsOpen = false;\n  supportOpen = false;\n  profileOpen = false;\n  profilePhoto = '';\n  username = '';\n\n  dialogRef: any = {};\n  constructor(\n    private router: Router,\n    private dialogForm: MatDialog,\n    @Inject(ZAC_LOGIN_SERVICE) private loginService: LoginServiceClass,\n    private route: ActivatedRoute,\n  ) {\n  }\n\n  openQuickAdd() {\n    const data = {};\n    this.dialogRef = this.dialogForm.open(QuickAddComponent, {\n      data: data,\n    });\n    this.dialogRef.afterClosed().subscribe((result: any) => {\n      const type = result?.type;\n      switch (type) {\n        case 'identity':\n          break;\n        default:\n          break;\n      }\n    });\n  }\n\n  openAlerts() {}\n\n  openSupport() {\n    const currentSnapshot = this.route.snapshot;\n    const routeParamId = currentSnapshot.params['id'];\n\n    const primaryPathSegment = this.getPrimaryPathSegmentReliably();\n\n    let url = '';\n    switch (primaryPathSegment) {\n      default:\n        break;\n    }\n    //window.open(url, '_blank');\n  }\n\n  getPrimaryPathSegmentReliably(): string {\n    // 1. Get the current URL as a UrlTree\n    const urlTree = this.router.parseUrl(this.router.url);\n\n    // 2. Access the primary segment group (always exists)\n    const primaryGroup: UrlSegmentGroup = urlTree.root.children['primary'];\n\n    if (!primaryGroup || primaryGroup.segments.length === 0) {\n      return 'root'; // Handles the base URL case ('/')\n    }\n\n    // 3. Extract the path of the first segment\n    return '/' + primaryGroup.segments[0].path;\n  }\n\n  openProfileMenu() {\n    this.profileOpen = true;\n  }\n\n  closeProfileMenu() {\n    this.profileOpen = false;\n  }\n\n  confirmLogout() {\n    const data = {\n      appendId: 'Logout',\n      title: 'Logging out',\n      message: `Are you sure you want to logout?`,\n      confirmLabel: 'Yes',\n      cancelLabel: 'Oops, no get me out of here',\n      imageUrl: 'assets/svgs/Icon_Log_Logout.svg',\n      showCancelLink: true\n    };\n    this.dialogRef = this.dialogForm.open(ConfirmComponent, {\n      data: data,\n      autoFocus: false,\n    });\n    this.dialogRef.afterClosed().subscribe((result: any) => {\n      if (result?.confirmed) {\n        this.loginService.logout();\n      }\n    });\n  }\n\n  goToDashboard() {\n    this.router.navigate(['/dashboard']);\n  }\n}\n","<header>\n  <div class=\"overlay\"></div>\n  <div class=\"left-side-buttons\">\n    <div class=\"apps-button clickable\" mattooltip=\"Select Application\" mattooltipposition=\"below\" mattooltipshowdelay=\"500\" (click)=\"goToDashboard()\">\n      <div class=\"icon\"></div>\n    </div>\n    <div class=\"divider-line\"></div>\n    <div class=\"header-title-wrapper\">\n      <div class=\"header-title-container\" (click)=\"goToDashboard()\">\n        <div class=\"header-title-label\">{{headerTitle}}</div>\n        <div class=\"title-text-row title-bottom-text\">By <a class=\"nf-name-text\" href=\"https://netfoundry.io\" target=\"_blank\">NetFoundry</a></div>\n      </div>\n    </div>\n  </div>\n  <div class=\"right-side-buttons\">\n    <div\n      (click)=\"openQuickAdd()\"\n      [ngClass]=\"{ open: supportOpen }\"\n      class=\"clickable\"\n      id=\"QuickAddButton\"\n      matTooltip=\"Support\"\n      matTooltipPosition=\"below\"\n      matTooltipShowDelay=\"500\"\n      >\n      <div class=\"clicked\"></div>\n      <div class=\"circle\"></div>\n      <div class=\"icon icon-Icon_Add\"></div>\n    </div>\n    <div\n      class=\"clickable\"\n      id=\"AttributesButton\"\n      matTooltip=\"Attributes Explorer\"\n      matTooltipPosition=\"below\"\n      matTooltipShowDelay=\"500\"\n      routerLink=\"/attributes/\"\n      >\n      <div class=\"circle\"></div>\n      <div class=\"icon icon-hash\"></div>\n    </div>\n    <div\n      (click)=\"openAlerts()\"\n      class=\"clickable\"\n      id=\"RecentAlertsButton\"\n      matTooltip=\"Recent Alerts\"\n      matTooltipPosition=\"below\"\n      matTooltipShowDelay=\"500\"\n      >\n      <div class=\"circle\"></div>\n      <div class=\"icon icon-Bell\"></div>\n    </div>\n    <div\n      class=\"clickable main\"\n      id=\"UserButton\"\n      (clickOutside)=\"closeProfileMenu()\"\n      (click)=\"openProfileMenu()\"\n      >\n      <div class=\"main clickable\"></div>\n      <div class=\"circle\"></div>\n      <div\n        [ngStyle]=\"{ 'background-image': 'url(' + profilePhoto + ')' }\"\n        class=\"icon icon-profile\"\n      ></div>\n      <div [ngClass]=\"{ open: profileOpen }\" class=\"header-menu\" id=\"UserMenu\">\n        @if (profileOpen) {\n          <div class=\"menutitle\">{{ username }}</div>\n        }\n        @if (profileOpen) {\n          <div\n            class=\"link\"\n            id=\"EditProfile\"\n            routerLink=\"/profile/\"\n            >\n            Edit Profile\n          </div>\n        }\n        @if (profileOpen) {\n          <div\n            class=\"link\"\n            id=\"PersonalSettings\"\n            routerLink=\"/settings/\"\n            >\n            Personal Settings\n          </div>\n        }\n        @if (profileOpen) {\n          <div (click)=\"confirmLogout()\" class=\"link\" id=\"LogoutButton\">Logout</div>\n        }\n      </div>\n    </div>\n  </div>\n</header>\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { InjectionToken, Injector, NgModule, inject, provideAppInitializer } from '@angular/core';\nimport {SafePipe} from \"./safe.pipe\";\nimport { HttpClient, provideHttpClient, withInterceptorsFromDi } from \"@angular/common/http\";\nimport {CommonModule} from \"@angular/common\";\nimport {FormsModule} from \"@angular/forms\";\nimport {ZacRoutingModule} from \"./zac-routing.module\";\nimport {ExtendableComponent} from \"./features/extendable/extendable.component\";\nimport {ExtensionsNoopService, SHAREDZ_EXTENSION} from \"./features/extendable/extensions-noop.service\";\nimport {StringInputComponent} from './features/dynamic-widgets/string/string-input.component';\nimport {NumberInputComponent} from './features/dynamic-widgets/number/number-input.component';\nimport {BooleanToggleInputComponent} from './features/dynamic-widgets/boolean/boolean-toggle-input.component';\nimport {ObjectComponent} from './features/dynamic-widgets/object/object.component';\nimport {SelectorInputComponent} from './features/dynamic-widgets/selector/selector-input.component';\nimport {CheckboxListInputComponent} from './features/dynamic-widgets/checkbox-list/checkbox-list-input.component';\nimport {TextListInputComponent} from \"./features/dynamic-widgets/text-list/text-list-input.component\";\nimport { ChipsInputComponent } from './features/chips-input/chips-input.component';\nimport {QRCodeComponent} from 'angularx-qrcode';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport {\n    ProtocolAddressPortInputComponent\n} from './features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component';\nimport {SideNavbarComponent} from './features/sidebars/side-navbar/side-navbar.component';\nimport {PasswordInputComponent} from './features/dynamic-widgets/password/password-input.component';\nimport {ConfigurationsPageComponent} from './pages/configurations/configurations-page.component';\nimport {ListPageHeaderComponent} from './features/list-page-features/list-page-header/list-page-header.component';\nimport {MatDialogModule} from \"@angular/material/dialog\";\nimport {MatRadioModule} from '@angular/material/radio';\nimport {TerminatorFormComponent} from \"./features/projectable-forms/terminator/terminator-form.component\";\nimport {ListPageFormComponent} from './features/list-page-features/list-page-form/list-page-form.component';\nimport {DataTableComponent} from \"./features/data-table/data-table.component\";\nimport {TableCellSelectComponent} from \"./features/data-table/cells/table-cell-select/table-cell-select.component\";\nimport {TableColumnSelectComponent} from \"./features/data-table/column-headers/table-column-select/table-column-select.component\";\nimport {TableCellMenuComponent} from \"./features/data-table/cells/table-cell-menu/table-cell-menu.component\";\nimport {TableColumnMenuComponent} from \"./features/data-table/column-headers/table-column-menu/table-column-menu.component\";\nimport {TableColumnDefaultComponent} from \"./features/data-table/column-headers/table-column-default/table-column-default.component\";\nimport {TableColumnFilterComponent} from \"./features/data-table/column-headers/table-column-filter/table-column-filter.component\";\nimport {HiddenColumnsBarComponent} from \"./features/data-table/table-hidden-columns-bar/hidden-columns-bar.component\";\nimport {FilterBarComponent} from \"./features/data-table/table-filter-bar/filter-bar.component\";\nimport {AgGridModule} from \"ag-grid-angular\";\nimport {IdentitiesPageComponent} from \"./pages/identities/identities-page.component\";\nimport {EdgeRoutersPageComponent} from \"./pages/edge-routers/edge-routers-page.component\";\nimport {TransitRoutersPageComponent} from \"./pages/transit-routers/transit-routers-page.component\";\nimport {ServicesPageComponent} from \"./pages/services/services-page.component\";\nimport {ZITI_NAVIGATOR} from \"./ziti-console.constants\";\nimport { GrowlerComponent } from './features/messaging/growler.component';\nimport { ConfirmComponent } from './features/confirm/confirm.component';\nimport {onAppInit} from \"./app.initializer\";\nimport {ClickOutsideModule} from \"ng-click-outside\";\nimport {NgJsonEditorModule} from \"ang-jsoneditor\";\nimport { LottieComponent, provideLottieOptions } from \"ngx-lottie\";\nimport { NoItemsComponent } from './features/no-items/no-items.component';\nimport { SideModalComponent } from './features/side-modal/side-modal.component';\nimport { IdentityFormComponent } from \"./features/projectable-forms/identity/identity-form.component\";\nimport { FormHeaderComponent } from './features/projectable-forms/form-header/form-header.component';\nimport { FormFieldContainerComponent } from './features/projectable-forms/form-field-container/form-field-container.component';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { PreviewListComponent } from './features/preview-list/preview-list.component';\nimport {LoadingIndicatorComponent} from \"./features/loading-indicator/loading-indicator.component\";\nimport { FormFieldToggleComponent } from './features/projectable-forms/form-field-toggle/form-field-toggle.component';\nimport { JsonViewComponent } from './features/json-view/json-view.component';\nimport { TagSelectorComponent } from './features/tag-selector/tag-selector.component';\nimport { QrCodeComponent } from './features/qr-code/qr-code.component';\nimport { TableCellTokenComponent } from './features/data-table/cells/table-cell-token/table-cell-token.component';\nimport {GrowlerModule} from \"./features/messaging/growler.module\";\nimport {OSTooltipComponent} from './features/data-table/tooltips/os-tooltip.component'\nimport {SDKTooltipComponent} from \"./features/data-table/tooltips/sdk-tooltip.component\";\nimport { OverridesComponent } from './features/overrides/overrides.component';\nimport { ResetEnrollmentComponent } from './features/reset-enrollment/reset-enrollment.component';\nimport {IdentityServicePathComponent} from \"./features/visualizer/identity-service-path/identity-service-path.component\";\nimport {NetworkVisualizerComponent} from \"./features/visualizer/network-visualizer/network-visualizer.component\";\nimport { CustomTagsComponent } from './features/custom-tags/custom-tags.component';\nimport {EdgeRouterFormComponent} from \"./features/projectable-forms/edge-router/edge-router-form.component\";\nimport {TransitRouterFormComponent} from \"./features/projectable-forms/transit-router/transit-router-form.component\";\n\nimport {ServiceFormComponent} from \"./features/projectable-forms/service/service-form.component\";\nimport { PortRangesComponent } from './features/dynamic-widgets/port-ranges/port-ranges.component';\nimport { ForwardingConfigComponent } from './features/dynamic-widgets/forwarding-config/forwarding-config.component';\nimport { CardListComponent } from './features/card-list/card-list.component';\nimport { SimpleServiceComponent } from './features/projectable-forms/service/simple-service/simple-service.component';\nimport { CardComponent } from './features/card/card.component';\nimport { CreationSummaryDialogComponent } from './features/creation-summary-dialog/creation-summary-dialog.component';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { ConfigEditorComponent } from './features/config-editor/config-editor.component';\nimport { EdgeRouterPoliciesPageComponent } from './pages/edge-router-policies/edge-router-policies-page.component';\nimport { ServicePoliciesPageComponent } from './pages/service-policies/service-policies-page.component';\nimport { ServicePolicyFormComponent } from './features/projectable-forms/service-policy/service-policy-form.component';\nimport { EdgeRouterPolicyFormComponent } from './features/projectable-forms/edge-router-policy/edge-router-policy-form.component';\nimport { MultiActionButtonComponent } from './features/multi-action-button/multi-action-button.component';\nimport { TableCellNameComponent } from './features/data-table/cells/table-cell-name/table-cell-name.component';\nimport { ServiceEdgeRouterPoliciesPageComponent } from './pages/service-edge-router-policies/service-edge-router-policies-page.component';\nimport { ServiceEdgeRouterPolicyFormComponent } from './features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component';\nimport {TerminatorsPageComponent} from \"./pages/terminators/terminators-page.component\";\nimport {ConfigurationFormComponent} from \"./features/projectable-forms/configuration/configuration-form.component\";\nimport {JwtSignersPageComponent} from \"./pages/jwt-signers/jwt-signers-page.component\";\nimport {JwtSignerFormComponent} from \"./features/projectable-forms/jwt-signer/jwt-signer-form.component\";\nimport {AuthPoliciesPageComponent} from \"./pages/auth-policies/auth-policies-page.component\";\nimport {AuthPolicyFormComponent} from \"./features/projectable-forms/auth-policy/auth-policy-form.component\";\nimport {CertificateAuthoritiesPageComponent} from \"./pages/certificate-authorities/certificate-authorities-page.component\";\nimport {PreviewSelectionsComponent} from \"./features/preview-selections/preview-selections.component\";\nimport {CertificateAuthorityFormComponent} from \"./features/projectable-forms/certificate-authority/certificate-authority-form.component\";\nimport {\n    VerifyCertificateComponent\n} from \"./features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component\";\nimport {LoginDialogComponent} from \"./features/login/login-dialog.component\";\nimport {ConfigTypesPageComponent} from \"./pages/config-types/config-types-page.component\";\nimport {ConfigTypeFormComponent} from \"./features/projectable-forms/config-type/config-type-form.component\";\nimport {PostureChecksPageComponent} from \"./pages/posture-checks/posture-checks-page.component\";\nimport {PostureCheckFormComponent} from \"./features/projectable-forms/posture-check/posture-check-form.component\";\nimport {SessionsPageComponent} from \"./pages/sessions/sessions-page.component\";\nimport {SessionFormComponent} from \"./features/projectable-forms/session/session-form.component\";\nimport {APISessionsPageComponent} from \"./pages/api-sessions/api-sessions-page.component\";\nimport {APISessionFormComponent} from \"./features/projectable-forms/api-session/api-session-form.component\";\nimport {CallbackComponent} from \"./pages/callback/callback.component\";\nimport {ProgressMeterComponent} from \"./features/progress-meter/progress-meter.component\";\nimport {ProgressWizardComponent} from \"./features/progress-wizard/progress-wizard.component\";\nimport { SettingsComponent } from './pages/settings/settings.component';\nimport { ProfileComponent } from './pages/profile/profile.component';\nimport { GeolocateComponent } from './pages/geolocate/geolocate.component';\nimport { MapLegendComponent } from './pages/geolocate/components/map-legend/map-legend.component';\nimport { EntityCountLegendComponent } from './pages/geolocate/components/entity-count-legend/entity-count-legend.component';\nimport { CircuitHopsTableComponent } from './pages/geolocate/components/circuit-hops-table/circuit-hops-table.component';\nimport { RouterPathTableComponent } from './pages/geolocate/components/router-path-table/router-path-table.component';\nimport { GeolocateFilterBarComponent } from './pages/geolocate/components/filter-bar/filter-bar.component';\nimport { SidePanelContainerComponent } from './pages/geolocate/components/side-panel-container/side-panel-container.component';\nimport { MarkerPanelComponent } from './pages/geolocate/components/marker-panel/marker-panel.component';\nimport { LinkPanelComponent } from './pages/geolocate/components/link-panel/link-panel.component';\nimport { CircuitPanelComponent } from './pages/geolocate/components/circuit-panel/circuit-panel.component';\nimport { EntityListPanelComponent } from './pages/geolocate/components/entity-list-panel/entity-list-panel.component';\nimport { UnlocatedPanelComponent } from './pages/geolocate/components/unlocated-panel/unlocated-panel.component';\nimport { ServicesWithCircuitsPanelComponent } from './pages/geolocate/components/services-with-circuits-panel/services-with-circuits-panel.component';\nimport { HaStatusIndicatorComponent } from './pages/geolocate/components/ha-status-indicator/ha-status-indicator.component';\nimport { AttributesComponent } from './pages/attributes/attributes.component';\nimport {SideNavigatorComponent} from \"./features/side-navigator/side-navigator.component\";\nimport {HeaderBarComponent} from \"./features/header-bar/header-bar.component\";\nimport {QuickAddComponent} from \"./features/quick-add/quick-add.component\";\nimport { DateRangeQuickHeaderComponent } from './features/date-range-quick-header/date-range-quick-header.component';\nimport { DateTimePickerComponent } from './features/date-time-picker/date-time-picker.component';\nimport { FilterSelectComponent } from './features/filter-select/filter-select.component';\nimport {\n    FilterSelectOptionTemplateDirective,\n    FilterSelectTriggerTemplateDirective\n} from './features/filter-select/filter-select-templates.directive';\n\nexport function playerFactory() {\n    return import(/* webpackChunkName: 'lottie-web' */ 'lottie-web');\n}\n\n@NgModule({ declarations: [\n        SafePipe,\n        ExtendableComponent,\n        StringInputComponent,\n        NumberInputComponent,\n        BooleanToggleInputComponent,\n        ObjectComponent,\n        SelectorInputComponent,\n        TextListInputComponent,\n        ChipsInputComponent,\n        CheckboxListInputComponent,\n        ProtocolAddressPortInputComponent,\n        SideNavbarComponent,\n        PasswordInputComponent,\n        TerminatorFormComponent,\n        ConfigurationsPageComponent,\n        ConfigTypesPageComponent,\n        ConfigTypeFormComponent,\n        ListPageHeaderComponent,\n        FilterBarComponent,\n        ListPageFormComponent,\n        IdentitiesPageComponent,\n        EdgeRoutersPageComponent,\n        TransitRoutersPageComponent,\n        DataTableComponent,\n        TableCellSelectComponent,\n        TableColumnSelectComponent,\n        TableCellMenuComponent,\n        TableColumnMenuComponent,\n        TableColumnDefaultComponent,\n        TableColumnFilterComponent,\n        IdentityFormComponent,\n        EdgeRouterFormComponent,\n        TransitRouterFormComponent,\n        HiddenColumnsBarComponent,\n        ConfirmComponent,\n        NoItemsComponent,\n        SideModalComponent,\n        FormHeaderComponent,\n        FormFieldContainerComponent,\n        PreviewListComponent,\n        LoadingIndicatorComponent,\n        FormFieldToggleComponent,\n        JsonViewComponent,\n        TagSelectorComponent,\n        QrCodeComponent,\n        TableCellTokenComponent,\n        OSTooltipComponent,\n        SDKTooltipComponent,\n        OverridesComponent,\n        ResetEnrollmentComponent,\n        IdentityServicePathComponent,\n        NetworkVisualizerComponent,\n        CustomTagsComponent,\n        ServicesPageComponent,\n        ServiceFormComponent,\n        PortRangesComponent,\n        ForwardingConfigComponent,\n        CardListComponent,\n        SimpleServiceComponent,\n        CardComponent,\n        CreationSummaryDialogComponent,\n        ConfigEditorComponent,\n        ServicePoliciesPageComponent,\n        ServicePolicyFormComponent,\n        EdgeRouterPoliciesPageComponent,\n        EdgeRouterPolicyFormComponent,\n        MultiActionButtonComponent,\n        TableCellNameComponent,\n        ServiceEdgeRouterPoliciesPageComponent,\n        ServiceEdgeRouterPolicyFormComponent,\n        TerminatorsPageComponent,\n        ConfigurationFormComponent,\n        JwtSignersPageComponent,\n        JwtSignerFormComponent,\n        AuthPoliciesPageComponent,\n        AuthPolicyFormComponent,\n        PreviewSelectionsComponent,\n        CertificateAuthoritiesPageComponent,\n        CertificateAuthorityFormComponent,\n        VerifyCertificateComponent,\n        LoginDialogComponent,\n        PostureChecksPageComponent,\n        PostureCheckFormComponent,\n        SessionsPageComponent,\n        SessionFormComponent,\n        APISessionsPageComponent,\n        APISessionFormComponent,\n        CallbackComponent,\n        ProgressMeterComponent,\n        ProgressWizardComponent,\n        SettingsComponent,\n        ProfileComponent,\n        GeolocateComponent,\n        MapLegendComponent,\n        EntityCountLegendComponent,\n        CircuitHopsTableComponent,\n        RouterPathTableComponent,\n        GeolocateFilterBarComponent,\n        SidePanelContainerComponent,\n        MarkerPanelComponent,\n        LinkPanelComponent,\n        CircuitPanelComponent,\n        EntityListPanelComponent,\n        UnlocatedPanelComponent,\n        ServicesWithCircuitsPanelComponent,\n        HaStatusIndicatorComponent,\n        AttributesComponent,\n        SideNavigatorComponent,\n        HeaderBarComponent,\n        QuickAddComponent,\n        DateRangeQuickHeaderComponent,\n        FilterSelectComponent,\n        FilterSelectOptionTemplateDirective,\n        FilterSelectTriggerTemplateDirective\n    ],\n    exports: [\n        ExtendableComponent,\n        SideNavbarComponent,\n        StringInputComponent,\n        SelectorInputComponent,\n        PasswordInputComponent,\n        NumberInputComponent,\n        BooleanToggleInputComponent,\n        ObjectComponent,\n        TextListInputComponent,\n        ChipsInputComponent,\n        IdentityServicePathComponent,\n        NetworkVisualizerComponent,\n        CheckboxListInputComponent,\n        ProtocolAddressPortInputComponent,\n        ConfigurationsPageComponent,\n        ConfigurationFormComponent,\n        ConfigTypesPageComponent,\n        ConfigTypeFormComponent,\n        EdgeRouterFormComponent,\n        TransitRouterFormComponent,\n        IdentitiesPageComponent,\n        EdgeRoutersPageComponent,\n        TransitRoutersPageComponent,\n        ServicesPageComponent,\n        ZacRoutingModule,\n        SideModalComponent,\n        IdentityFormComponent,\n        LoadingIndicatorComponent,\n        GrowlerModule,\n        FormFieldContainerComponent,\n        FormFieldToggleComponent,\n        ServiceFormComponent,\n        ServicePoliciesPageComponent,\n        ServicePolicyFormComponent,\n        EdgeRouterPoliciesPageComponent,\n        TerminatorsPageComponent,\n        TerminatorFormComponent,\n        JwtSignersPageComponent,\n        JwtSignerFormComponent,\n        AuthPoliciesPageComponent,\n        AuthPolicyFormComponent,\n        LoginDialogComponent,\n        PostureChecksPageComponent,\n        PostureCheckFormComponent,\n        SessionsPageComponent,\n        SessionFormComponent,\n        APISessionsPageComponent,\n        APISessionFormComponent,\n        CallbackComponent,\n        FormHeaderComponent,\n        JsonViewComponent,\n        PreviewListComponent,\n        TagSelectorComponent,\n        ProgressMeterComponent,\n        ProgressWizardComponent,\n        ConfigEditorComponent,\n        SettingsComponent,\n        ProfileComponent,\n        GeolocateComponent,\n        AttributesComponent,\n        HeaderBarComponent,\n        SideNavigatorComponent,\n        FilterSelectComponent,\n        FilterSelectOptionTemplateDirective,\n        FilterSelectTriggerTemplateDirective\n    ], imports: [\n        CommonModule,\n        FormsModule,\n        MatDialogModule,\n        MatRadioModule,\n        ZacRoutingModule,\n        MatDatepickerModule,\n        MatNativeDateModule,\n        MatFormFieldModule,\n        MatInputModule,\n        MatSelectModule,\n        MatButtonModule,\n        MatIconModule,\n        OverlayModule,\n        AgGridModule,\n        QRCodeComponent,\n        ClickOutsideModule,\n        NgJsonEditorModule,\n        MatTooltipModule,\n        MatAutocompleteModule,\n        LottieComponent,\n        DateTimePickerComponent], providers: [\n        { provide: SHAREDZ_EXTENSION, useClass: ExtensionsNoopService },\n        { provide: ZITI_NAVIGATOR, useValue: {} },\n        provideLottieOptions({\n            player: playerFactory\n          }),\n        provideAppInitializer(() => {\n            const initializerFn = (onAppInit)(inject(Injector));\n        return initializerFn();\n      }),\n        provideHttpClient(withInterceptorsFromDi()),\n    ] })\nexport class OpenZitiConsoleLibModule {\n}\n","import {Injectable, Inject} from '@angular/core';\nimport { HttpClient } from \"@angular/common/http\";\nimport { Router } from \"@angular/router\";\nimport {LoginServiceClass} from \"./login-service.class\";\nimport {SETTINGS_SERVICE} from \"./settings.service\";\nimport {SettingsServiceClass} from \"./settings-service.class\";\nimport {GrowlerService} from \"../features/messaging/growler.service\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class NoopLoginService extends LoginServiceClass {\n\n    constructor(\n        override httpClient: HttpClient,\n        @Inject(SETTINGS_SERVICE) override settingsService: SettingsServiceClass,\n        override router: Router,\n        override growlerService: GrowlerService\n    ) {\n        super(httpClient, settingsService, router, growlerService);\n    }\n\n    override init() {}\n\n    clearSession() {\n    }\n\n    login(prefix: string, url: string, username: string, password: string, isTest?) {\n    }\n\n    logout() {\n    }\n\n    observeLogin(serviceUrl: string, username: string, password: string, isTest?) {\n    }\n\n    checkOriginForController(): Promise<any> {\n        return Promise.resolve(true);\n    }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Inject, Injectable} from '@angular/core';\nimport { Router } from \"@angular/router\";\nimport {LoggerService} from \"../features/messaging/logger.service\";\nimport {GrowlerService} from \"../features/messaging/growler.service\";\nimport {SETTINGS_SERVICE, SettingsService} from \"./settings.service\";\nimport {firstValueFrom, map} from \"rxjs\";\nimport {catchError} from \"rxjs/operators\";\nimport { HttpClient } from \"@angular/common/http\";\nimport {FilterObj} from \"../features/data-table/data-table-filter.service\";\nimport {isEmpty, get, isArray, isNumber, set, isBoolean} from \"lodash\";\nimport {ZitiDataService} from \"./ziti-data.service\";\nimport {Resolver} from \"@stoplight/json-ref-resolver\";\nimport moment from \"moment\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class NodeDataService extends ZitiDataService {\n\n    override dataServiceType = ZitiDataService.NODE_DATA_SERVICE_TYPE;\n\n    constructor(override logger: LoggerService,\n                override growler: GrowlerService,\n                @Inject(SETTINGS_SERVICE) override settingsService: SettingsService,\n                override httpClient: HttpClient,\n                override router: Router\n    ) {\n        super(logger, growler, settingsService, httpClient, router)\n    }\n\n    post(type, model, chained = false) {\n        let clientSub;\n        const nodeServerURL = window.location.origin;\n        const serviceUrl = nodeServerURL + '/api/dataSave';\n        const body = {paging: this.DEFAULT_PAGING, type: type, save: model, chained: chained};\n\n        return firstValueFrom(this.httpClient.post(serviceUrl,body,{}).pipe(\n                catchError((err: any) => {\n                    const error = \"Server Not Accessible\";\n                    if (err.code !== \"ECONNREFUSED\") throw(err);\n                    throw({error: error});\n                }),\n                map((results: any) => {\n                    if(!isEmpty(results.error)) {\n                        throw({error: results.error});\n                    }\n                    return results;\n                })\n            )\n        );\n    }\n\n    put(type, model, id, chained = false) {\n        let clientSub;\n        const nodeServerURL = window.location.origin;\n        const serviceUrl = nodeServerURL + '/api/dataSave';\n        const body = {paging: this.DEFAULT_PAGING, type: type, save: model, id: id, chained: chained};\n\n        return firstValueFrom(this.httpClient.post(serviceUrl,body,{}).pipe(\n                catchError((err: any) => {\n                    const error = \"Server Not Accessible\";\n                    if (err.code !== \"ECONNREFUSED\") throw(err);\n                    throw({error: error});\n                }),\n                map((results: any) => {\n                    if(!isEmpty(results.error)) {\n                        throw({error: results.error});\n                    }\n                    return results;\n                })\n            )\n        );\n    }\n\n    patch(type, model, id, chained = false) {\n        let clientSub;\n        const nodeServerURL = window.location.origin;\n        const serviceUrl = nodeServerURL + '/api/dataSave';\n        const body = {paging: this.DEFAULT_PAGING, type: type, save: model, id: id, chained: chained};\n\n        return firstValueFrom(this.httpClient.post(serviceUrl,body,{}).pipe(\n                catchError((err: any) => {\n                    const error = \"Server Not Accessible\";\n                    if (err.code !== \"ECONNREFUSED\") throw(err);\n                    throw({error: error});\n                }),\n                map((results: any) => {\n                    if(!isEmpty(results.error)) {\n                        throw({error: results.error});\n                    }\n                    return results;\n                })\n            )\n        );\n    }\n\n    doGet(type: string, paging: any, filters: FilterObj[] = [], url?, useClient?) {\n        const nodeServerURL = window.location.origin;\n        const serviceUrl = nodeServerURL + '/api/data';\n        const urlFilter = this.getUrlFilter(paging, filters);\n        paging.filter = urlFilter;\n        const body: any = {paging: paging, type: type, url: url};\n        if (useClient) {\n            // Fetch the public client API unauthenticated (pre-login) via the selected\n            // controller, not the session-scoped mgmt API. See openziti/ziti-console#915.\n            body.useClient = true;\n            body.controllerUrl = this.settingsService?.settings?.selectedEdgeController;\n        }\n\n        return firstValueFrom(this.httpClient.post(serviceUrl,body,{}).pipe(\n                catchError((err: any) => {\n                    const error = \"Server Not Accessible\";\n                    if (err.code != \"ECONNREFUSED\") throw({error: err.code});\n                    throw({error: error});\n                }),\n                map((results: any) => {\n                    if (results.error) {\n                        this.handleError(results)\n                    }\n                    return results;\n                })\n            )\n        );\n    }\n\n    doGetSubdata(entityType: string, id: any, dataType: string) {\n        const nodeServerURL = window.location.origin;\n        const serviceUrl = nodeServerURL + '/api/subdata';\n        const body = {url:`./${entityType}/${id}/${dataType}`, name: entityType, type: dataType };\n        return firstValueFrom(this.httpClient.post(serviceUrl, body, {}).pipe(\n                catchError((err: any) => {\n                    const error = \"Server Not Accessible\";\n                    if (err.code != \"ECONNREFUSED\") throw({error: err.code});\n                    throw({error: error});\n                }),\n                map((results: any) => {\n                    if(!isEmpty(results.error)) {\n                        throw({error: results.error});\n                    } else if (results.error) {\n                        this.handleError(results)\n                    }\n                    if (results && !results?.data) {\n                        results.data = {};\n                    }\n                    return results;\n                })\n            )\n        );\n    }\n\n    override saveSubdata(entityType: string, id: any, dataType: string, data: any): Promise<any> {\n        const nodeServerURL = window.location.origin;\n        const serviceUrl = nodeServerURL + '/api/subSave';\n        const body = {\n            type: dataType,\n            parentType: entityType,\n            id: id,\n            doing: \"POST\",\n            save: data\n        }\n        return firstValueFrom(this.httpClient.post(serviceUrl, body, {}).pipe(\n                catchError((err: any) => {\n                    const error = \"Server Not Accessible\";\n                    if (err.code != \"ECONNREFUSED\") throw({error: err.code});\n                    throw({error: error});\n                }),\n                map((results: any) => {\n                    if(!isEmpty(results.error)) {\n                        throw({error: results.error});\n                    }\n                    return results;\n                })\n            )\n        );\n    }\n\n    override resetEnrollment(id: string, date: any): Promise<any> {\n        const nodeServerURL = window.location.origin;\n        const serviceUrl = nodeServerURL + '/api/resetEnroll';\n        const dateStr = moment(date).format(\"M/D/YYYY hh:mm A\");\n        const body = {\n            date: dateStr,\n            id: id\n        }\n        return firstValueFrom(this.httpClient.post(serviceUrl, body, {}).pipe(\n                catchError((err: any) => {\n                    const error = \"Server Not Accessible\";\n                    if (err.code != \"ECONNREFUSED\") throw({error: err.code});\n                    throw({error: error});\n                }),\n                map((results: any) => {\n                    if(!isEmpty(results.error)) {\n                        throw({error: results.error});\n                    }\n                    return results;\n                })\n            )\n        );\n    }\n\n    override deleteEnrollment(enrollmentId: string): Promise<any> {\n      const nodeServerURL = window.location.origin;\n      const serviceUrl = nodeServerURL + '/api/deleteEnrollment';\n      const body = {\n        id: enrollmentId\n      }\n      return firstValueFrom(this.httpClient.post(serviceUrl, body, {}).pipe(\n          catchError((err: any) => {\n            const error = \"Server Not Accessible\";\n            if (err.code != \"ECONNREFUSED\") throw({error: err.code});\n            throw({error: error});\n          }),\n          map((results: any) => {\n            if(!isEmpty(results.error)) {\n              throw({error: results.error});\n            }\n            return results;\n          })\n        )\n      );\n    }\n\n    override reissueEnrollment(id: string, date: string): Promise<any> {\n        const nodeServerURL = window.location.origin;\n        const serviceUrl = nodeServerURL + '/api/reissueEnroll';\n        const dateStr = moment(date).format(\"M/D/YYYY hh:mm A\");\n        const body = {\n            date: dateStr,\n            id: id\n        }\n        return firstValueFrom(this.httpClient.post(serviceUrl, body, {}).pipe(\n                catchError((err: any) => {\n                    const error = \"Server Not Accessible\";\n                    if (err.code != \"ECONNREFUSED\") throw({error: err.code});\n                    throw({error: error});\n                }),\n                map((results: any) => {\n                    if(!isEmpty(results.error)) {\n                        throw({error: results.error});\n                    }\n                    return results;\n                })\n            )\n        );\n    }\n\n    resetMFA(id) {\n        const nodeServerURL = window.location.origin;\n        const serviceUrl = nodeServerURL + '/api/mfa';\n        const options = {\n            body: {\n                id: id\n            }\n        };\n        return firstValueFrom(this.httpClient.delete(serviceUrl, options).pipe(\n                catchError((err: any) => {\n                    const error = \"Server Not Accessible\";\n                    if (err.code != \"ECONNREFUSED\") throw({error: err.code});\n                    throw({error: error});\n                }),\n                map((results: any) => {\n                    if(!isEmpty(results.error)) {\n                        throw({error: results.error});\n                    }\n                    return results;\n                })\n            )\n        );\n    }\n\n    resetPassword(oldPass, newPass, confirmPass) {\n        const nodeServerURL = window.location.origin;\n        const serviceUrl = nodeServerURL + '/api/reset';\n        const options = {\n            body: {\n                password: oldPass,\n                newpassword: newPass,\n                confirm: confirmPass\n            }\n        };\n        return firstValueFrom(this.httpClient.delete(serviceUrl, options).pipe(\n                catchError((err: any) => {\n                    const error = \"Server Not Accessible\";\n                    if (err.code != \"ECONNREFUSED\") throw({error: err.code});\n                    throw({error: error});\n                }),\n                map((results: any) => {\n                    if(!isEmpty(results.error)) {\n                        throw({error: results.error});\n                    }\n                    return results;\n                })\n            )\n        );\n    }\n\n    override deleteSubdata(entityType: string, id: any, dataType: string, data: any): Promise<any> {\n        const nodeServerURL = window.location.origin;\n        const serviceUrl = nodeServerURL + '/api/subSave';\n        const body = {\n            type: dataType,\n            parentType: entityType,\n            id: id,\n            doing: \"DELETE\",\n            save: data\n        }\n        return firstValueFrom(this.httpClient.post(serviceUrl, body, {}).pipe(\n                catchError((err: any) => {\n                    const error = \"Server Not Accessible\";\n                    if (err.code != \"ECONNREFUSED\") throw({error: err.code});\n                    throw({error: error});\n                }),\n                map((results: any) => {\n                    if(!isEmpty(results.error)) {\n                        throw({error: results.error});\n                    }\n                    return results;\n                })\n            )\n        );\n    }\n\n    delete(type: string, id: string) {\n        const nodeServerURL = window.location.origin;\n        const serviceUrl = nodeServerURL + '/api/delete';\n        const body = {paging: this.DEFAULT_PAGING, type: type, ids: [id]};\n\n        return firstValueFrom(this.httpClient.post(serviceUrl,body,{}).pipe(\n                catchError((err: any) => {\n                    const error = \"Server Not Accessible\";\n                    if (err.code != \"ECONNREFUSED\") throw({error: err.code});\n                    throw({error: error});\n                }),\n                map((results: any) => {\n                    if(!isEmpty(results.error)) {\n                        throw({error: results.error});\n                    }\n                    return results;\n                })\n            )\n        );\n    }\n\n    call(url, prefix?: string) {\n        const nodeServerURL = window.location.origin;\n        const serviceUrl = nodeServerURL + '/api/call';\n        const body = {url: url};\n\n        return firstValueFrom(this.httpClient.post(serviceUrl,body,{}).pipe(\n                catchError((err: any) => {\n                    const error = \"Server Not Accessible\";\n                    if (err.code != \"ECONNREFUSED\") throw({error: err.code});\n                    throw({error: error});\n                }),\n                map((results: any) => {\n                    if(!isEmpty(results.error)) {\n                        throw({error: results.error});\n                    }\n                    return results;\n                })\n            )\n        );\n    }\n\n    /**\n     * NodeDataService doesn't support HA, so just fall back to regular call()\n     */\n    callHAControllers(url: string, prefix?: string): Promise<any> {\n        return this.call(url, prefix);\n    }\n\n    schema(data: any): Promise<any> {\n        const resolver = new Resolver();\n        return resolver.resolve(data).then((schema) => {\n            return schema.result\n        });\n    }\n\n    private getUrlFilter(paging, filters: any[]) {\n        let urlFilter = '';\n        let toSearchOn = \"name\";\n        let noSearch = filters?.length <= 0;\n        if (isEmpty(paging)) {\n            paging = {};\n        }\n        if (paging && paging.sort != null) {\n            if (paging.searchOn) toSearchOn = paging.searchOn;\n            if (paging.noSearch) noSearch = true;\n            if (!paging.filter) paging.filter = \"\";\n            if (!isArray(paging.filter) && isNaN(paging.filter)) {\n                paging.filter = paging.filter.split('#').join('');\n            }\n        }\n        filters.forEach((filter, index) => {\n            let filterVal = '';\n            switch (filter.type) {\n                case 'TEXTINPUT':\n                    const verb = filter.verb ? filter.verb : 'contains';\n                    filterVal = `${filter.columnId} ${verb} \"${filter.value}\"`;\n                    if (filter.rawFilter) {\n                        paging.rawFilter = true;\n                    }\n                    break;\n                case 'SELECT':\n                case 'COMBO':\n                    const val = isNumber(filter.value) || isBoolean(filter.value) ? `${filter.value}` : `\"${filter.value}\"`;\n                    filterVal = `${filter.columnId} = ${val}`;\n                    break;\n                case 'DATETIME':\n                    paging.rawFilter = true;\n                    filterVal = `${filter.columnId} >= datetime(${filter.value[0]}) and ${filter.columnId} <= datetime(${filter.value[1]})`;\n                    break;\n                case 'ATTRIBUTE':\n                    paging.rawFilter = true;\n                    filterVal = this.getAttributeFilter(filter.value, filter.columnId);\n                    break;\n                default:\n                    filterVal = `${filter.columnId} contains \"${filter.value}\"`;\n                    break;\n            }\n            if (index <= 0) {\n                urlFilter = `${filterVal}`;\n            } else {\n                urlFilter += ` and ${filterVal}`\n            }\n        });\n\n        return urlFilter;\n    }\n\n    getAttributeFilter(val, columnId) {\n        let filter = '';\n        if (isArray(val)) {\n            val.forEach((attr, index) => {\n                if (index > 0) {\n                    filter += ' or ';\n                }\n                filter += `anyOf(${columnId}) = \"${attr}\"`;\n            });\n        } else {\n            filter = `anyOf(${columnId}) = \"${val}\"`;\n        }\n        return filter;\n    }\n\n    handleError(results) {\n        this.logger.error(results?.error)\n    }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { Injectable, Inject } from '@angular/core';\nimport { Router } from \"@angular/router\";\nimport {LoggerService} from \"../features/messaging/logger.service\";\nimport {GrowlerService} from \"../features/messaging/growler.service\";\nimport {SETTINGS_SERVICE, SettingsService} from \"./settings.service\";\nimport {firstValueFrom, map, Observable} from \"rxjs\";\nimport {catchError} from \"rxjs/operators\";\nimport { HttpClient } from \"@angular/common/http\";\nimport {FilterObj} from \"../features/data-table/data-table-filter.service\";\nimport {ZitiDataService} from \"./ziti-data.service\";\nimport {isEmpty, isArray, isNumber, isBoolean} from \"lodash\";\nimport {Resolver} from \"@stoplight/json-ref-resolver\";\nimport moment from \"moment\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class ZitiControllerDataService extends ZitiDataService {\n\n    constructor(override logger: LoggerService,\n                override growler: GrowlerService,\n                @Inject(SETTINGS_SERVICE) settingsService: SettingsService,\n                override httpClient: HttpClient,\n                override router: Router\n    ) {\n        super(logger, growler, settingsService, httpClient, router);\n    }\n\n    post(type, model, chained = false, contentType?): Promise<any> {\n        const apiVersions = this.settingsService.apiVersions || {};\n        const prefix = apiVersions[\"edge-management\"]?.v1?.path || '/edge/management/v1';\n        const url = this.settingsService.settings.selectedEdgeController;\n        const serviceUrl = url + prefix + \"/\" + type;\n        let options = {};\n        if (contentType) {\n            const headers = {\n                'Content-Type': contentType\n            }\n            options = { headers };\n        }\n        return firstValueFrom(this.httpClient.post(serviceUrl, model, options).pipe(\n                catchError((err: any) => {\n                    const error = \"Server Not Accessible\";\n                    if (err.code !== \"ECONNREFUSED\") throw(err);\n                    throw({error: error});\n                }),\n                map((result: any) => {\n                    return result;\n                })\n            )\n        );\n    }\n\n    put(type, model, id, chained = false): Promise<any> {\n        const apiVersions = this.settingsService.apiVersions || {};\n        const prefix = apiVersions[\"edge-management\"]?.v1?.path || '/edge/management/v1';\n        const url = this.settingsService.settings.selectedEdgeController;\n        const serviceUrl = url + prefix + \"/\" + type + '/' + id;\n        this.httpClient.patch(serviceUrl, model, {});\n\n        return firstValueFrom(this.httpClient.put(serviceUrl, model, {}).pipe(\n                catchError((err: any) => {\n                    const error = \"Server Not Accessible\";\n                    if (err.code !== \"ECONNREFUSED\") throw(err);\n                    throw({error: error});\n                }),\n                map((result: any) => {\n                    return result;\n                })\n            )\n        );\n    }\n\n    patch(type, model, id, chained = false): Promise<any> {\n        const apiVersions = this.settingsService.apiVersions || {};\n        const prefix = apiVersions[\"edge-management\"]?.v1?.path || '/edge/management/v1';\n        const url = this.settingsService.settings.selectedEdgeController;\n        const serviceUrl = url + prefix + \"/\" + type + '/' + id;\n        this.httpClient.patch(serviceUrl, model, {});\n\n        return firstValueFrom(this.httpClient.patch(serviceUrl, model, {}).pipe(\n                catchError((err: any) => {\n                    const error = \"Server Not Accessible\";\n                    if (err.code !== \"ECONNREFUSED\") throw(err);\n                    throw({error: error});\n                }),\n                map((result: any) => {\n                    return result;\n                })\n            )\n        );\n    }\n\n    doGet(type: string, paging: any, filters: FilterObj[] = [], url?, useClient?): Promise<any> {\n        const apiVersions = this.settingsService.apiVersions || {};\n        const managementUrl = apiVersions[\"edge-management\"]?.v1?.path || '/edge/management/v1';\n        const clientUrl = '/edge/client/v1';\n        const prefix = useClient ? clientUrl : managementUrl;\n        url = this.settingsService.settings.selectedEdgeController;\n        const urlFilter = this.getUrlFilter(paging, filters);\n        const serviceUrl = url + prefix + \"/\" + type + urlFilter;\n\n        return firstValueFrom(this.httpClient.get(serviceUrl,{}).pipe(\n                catchError((err: any) => {\n                    const error = \"Server Not Accessible\";\n                    if (err.code != \"ECONNREFUSED\") throw({error: err.code});\n                    throw({error: error});\n                }),\n                map((results: any) => {\n                    return results;\n                })\n            )\n        );\n    }\n\n    doGetSubdata(entityType: string, id: any, dataType: string, paging?: any, contentType?: any, filters: any[] = []): Promise<any> {\n        const apiVersions = this.settingsService.apiVersions || {};\n        const prefix = apiVersions[\"edge-management\"]?.v1?.path || '/edge/management/v1';\n\n        let urlFilter = '';\n        if (!isEmpty(paging)) {\n            urlFilter = this.getUrlFilter(paging, filters);\n        }\n        const url = this.settingsService.settings.selectedEdgeController + `${prefix}/${entityType}/${id}/${dataType}/${urlFilter}`;\n\n        let options: any = {};\n        if (contentType) {\n            const headers = {\n                'Accept': contentType,\n                'Content-Type': contentType\n            }\n            options = { headers };\n            if (contentType.indexOf('application/jwt') >= 0) {\n                options.responseType = 'text';\n            }\n        }\n\n        return firstValueFrom(this.httpClient.get(url, options).pipe(\n                catchError((err: any) => {\n                    const error = \"Server Not Accessible\";\n                    if (err.code != \"ECONNREFUSED\") throw({error: err.code});\n                    throw({error: error});\n                })\n            )\n        );\n    }\n\n    saveSubdata(entityType: string, id: any, dataType: string, params: any): Promise<any> {\n        const apiVersions = this.settingsService.apiVersions || {};\n        const prefix = apiVersions[\"edge-management\"]?.v1?.path || '/edge/management/v1';\n        const url = this.settingsService.settings.selectedEdgeController + `${prefix}/${entityType}/${id}/${dataType}`;\n\n        return firstValueFrom(this.httpClient.post(url, params, {}).pipe(\n                catchError((err: any) => {\n                    const error = \"Server Not Accessible\";\n                    if (err.code != \"ECONNREFUSED\") throw({error: err.code});\n                    throw({error: error});\n                })\n            )\n        );\n    }\n\n    deleteSubdata(entityType: string, id: any, dataType: string, params: any): Promise<any> {\n        const apiVersions = this.settingsService.apiVersions || {};\n        const prefix = apiVersions[\"edge-management\"]?.v1?.path || '/edge/management/v1';\n        const url = this.settingsService.settings.selectedEdgeController + `${prefix}/${entityType}/${id}/${dataType}`;\n\n        return firstValueFrom(this.httpClient.delete(url, {body: params}).pipe(\n                catchError((err: any) => {\n                    const error = \"Server Not Accessible\";\n                    if (err.code != \"ECONNREFUSED\") throw({error: err.code});\n                    throw({error: error});\n                })\n            )\n        );\n    }\n\n    override resetEnrollment(id: string, date: any): Promise<any> {\n        const apiVersions = this.settingsService.apiVersions || {};\n        const prefix = apiVersions[\"edge-management\"]?.v1?.path || '/edge/management/v1';\n        const url = this.settingsService.settings.selectedEdgeController + `${prefix}/authenticators/${id.trim()}/re-enroll`;\n        const expiresAt = moment(date).utc().toISOString();\n        const body = { expiresAt: expiresAt };\n        return firstValueFrom(this.httpClient.post(url, body).pipe(\n                catchError((err: any) => {\n                    const error = \"Server Not Accessible\";\n                    if (err.code != \"ECONNREFUSED\") throw({error: err.code});\n                    throw({error: error});\n                })\n            )\n        );\n    }\n\n    override deleteEnrollment(enrollmentId: string): Promise<any> {\n      const apiVersions = this.settingsService.apiVersions || {};\n      const prefix = apiVersions[\"edge-management\"]?.v1?.path || '/edge/management/v1';\n      const url = this.settingsService.settings.selectedEdgeController + `${prefix}/enrollments/${enrollmentId}`;\n      return firstValueFrom(this.httpClient.delete(url).pipe(\n          catchError((err: any) => {\n            const error = \"Server Not Accessible\";\n            if (err.code != \"ECONNREFUSED\") throw({error: err.code});\n            throw({error: error});\n          })\n        )\n      );\n    }\n\n    override reissueEnrollment(id: string, date): Promise<any> {\n        const apiVersions = this.settingsService.apiVersions || {};\n        const prefix = apiVersions[\"edge-management\"]?.v1?.path || '/edge/management/v1';\n        const url = this.settingsService.settings.selectedEdgeController + `${prefix}/enrollments/${id}/refresh`;\n        const expiresAt = moment(date).utc().toISOString();\n        const body = { expiresAt: expiresAt };\n        return firstValueFrom(this.httpClient.post(url, body).pipe(\n                catchError((err: any) => {\n                    const error = \"Server Not Accessible\";\n                    if (err.code != \"ECONNREFUSED\") throw({error: err.code});\n                    throw({error: error});\n                })\n            )\n        );\n    }\n\n    resetMFA(id) {\n        const apiVersions = this.settingsService.apiVersions || {};\n        const prefix = apiVersions[\"edge-management\"]?.v1?.path || '/edge/management/v1';\n        const url = this.settingsService.settings.selectedEdgeController + `${prefix}/identities/${id}/mfa`;\n        return firstValueFrom(this.httpClient.delete(url).pipe(\n                catchError((err: any) => {\n                    const error = \"Server Not Accessible\";\n                    if (err.code != \"ECONNREFUSED\") throw({error: err.code});\n                    throw({error: error});\n                })\n            )\n        );\n    }\n\n    resetPassword(oldPass, newPass, confirmPass) {\n        const apiVersions = this.settingsService.apiVersions || {};\n        const prefix = apiVersions[\"edge-management\"]?.v1?.path || '/edge/management/v1';\n        const authenticatorsUrl = this.settingsService.settings.selectedEdgeController + `${prefix}/current-identity/authenticators?filter=method=\\\"updb\\\"`;\n        return firstValueFrom(this.httpClient.get(authenticatorsUrl)).then((authenticatorResult: any) => {\n            const id = authenticatorResult?.data[0].id;\n            const username = authenticatorResult.data[0].username;\n            const params = {\n                currentPassword: oldPass,\n                password: newPass,\n                username: username\n            }\n            const resetUrl = this.settingsService.settings.selectedEdgeController + `${prefix}/current-identity/authenticators/${id}`;\n            return firstValueFrom(this.httpClient.put(resetUrl, params));\n        });\n    }\n\n    delete(type: string, id: string): Promise<any> {\n        const apiVersions = this.settingsService.apiVersions || {};\n        const prefix = apiVersions[\"edge-management\"]?.v1?.path || '/edge/management/v1';\n        const url = this.settingsService.settings.selectedEdgeController;\n        const serviceUrl = url + prefix + \"/\" + type + '/' + id;\n\n        return firstValueFrom(this.httpClient.delete(serviceUrl, {}).pipe(\n                catchError((err: any) => {\n                    const error = \"Server Not Accessible\";\n                    if (err.code != \"ECONNREFUSED\") throw err;\n                    throw({error: error});\n                }),\n                map((results: any) => {\n                    return results;\n                })\n            )\n        );\n    }\n\n    call(callUrl, prefix?) {\n        const apiVersions = this.settingsService.apiVersions || {};\n        prefix = prefix || apiVersions[\"edge-management\"]?.v1?.path || '/edge/management/v1';\n        const url = this.settingsService.settings.selectedEdgeController;\n        const serviceUrl = url + prefix + \"/\" + callUrl;\n\n        return firstValueFrom(this.httpClient.get(serviceUrl, {}).pipe(\n                catchError((err: any) => {\n                    const error = \"Server Not Accessible\";\n                    if (err.code != \"ECONNREFUSED\") throw({error: err.code});\n                    throw({error: error});\n                }),\n                map((results: any) => {\n                    return results;\n                })\n            )\n        );\n    }\n\n    /**\n     * Call HA controllers in parallel and merge responses\n     * @param callUrl The API endpoint path\n     * @param prefix The API prefix (e.g., '/fabric/v1')\n     * @returns Promise with merged data and metadata about controller responses\n     */\n    async callHAControllers(callUrl: string, prefix?: string): Promise<any> {\n        // Check if HA is enabled\n        if (!this.settingsService.isHAEnabled()) {\n            // Fallback to single controller call\n            return this.call(callUrl, prefix);\n        }\n\n        // Check if we have JWT authentication (required for HA fabric calls)\n        const hasValidJwt = this.settingsService.hasValidJwtToken();\n        if (!hasValidJwt) {\n            // Fallback to single controller call (primary only)\n            return this.call(callUrl, prefix);\n        }\n\n        const apiVersions = this.settingsService.apiVersions || {};\n        prefix = prefix || apiVersions[\"edge-management\"]?.v1?.path || '/edge/management/v1';\n\n        // Get all HA controllers\n        const haControllers = this.settingsService.getHAControllers();\n\n        // Get JWT token (preferred) or fall back to individual sessions\n        const jwtToken = this.settingsService.getJwtToken();\n        const controllerSessions = this.settingsService.getActiveSessions();\n\n        // Filter to only online controllers\n        // With JWT, we don't need individual sessions - the JWT works across all controllers\n        const controllersToQuery = haControllers.filter((controller: any) => {\n            return controller.isOnline !== false;\n        });\n\n        if (controllersToQuery.length === 0) {\n            // No valid controllers, fallback to single controller\n            return this.call(callUrl, prefix);\n        }\n\n        // Create parallel requests to all controllers\n        const requests = controllersToQuery.map((controller: any) => {\n            const controllerUrl = controller.url;\n            const serviceUrl = controllerUrl + prefix + \"/\" + callUrl;\n\n            // Build headers - JWT auth is handled by the interceptor\n            // Since we validated JWT at the start of this method, we know it's valid\n            let headers: any = {};\n\n            // Let the HTTP interceptor add the JWT token\n            // This ensures proper error handling and token refresh\n\n            return firstValueFrom(\n                this.httpClient.get(serviceUrl, { headers }).pipe(\n                    map((results: any) => ({\n                        success: true,\n                        url: controller.url,\n                        data: results,\n                        error: null\n                    })),\n                    catchError((err: any) => {\n                        return Promise.resolve({\n                            success: false,\n                            url: controller.url,\n                            data: null,\n                            error: err.message || 'Request failed'\n                        });\n                    })\n                )\n            );\n        });\n\n        // Wait for all requests to complete\n        const results = await Promise.all(requests);\n\n        // Separate successful and failed responses\n        const successful = results.filter(r => r.success);\n        const failed = results.filter(r => !r.success);\n\n        if (successful.length === 0) {\n            // All controllers failed\n            throw new Error('All HA controllers failed to respond');\n        }\n\n        // Merge data from successful responses\n        const mergedData = this.mergeHAResponses(successful.map(r => r.data));\n\n        // Return merged data with metadata\n        return {\n            ...mergedData,\n            _haMetadata: {\n                totalControllers: controllersToQuery.length,\n                successfulControllers: successful.length,\n                failedControllers: failed.length,\n                controllers: results.map(r => ({\n                    url: r.url,\n                    success: r.success,\n                    error: r.error\n                }))\n            }\n        };\n    }\n\n    /**\n     * Merge responses from multiple HA controllers\n     * @param responses Array of response objects from different controllers\n     * @returns Merged response object\n     */\n    private mergeHAResponses(responses: any[]): any {\n        if (responses.length === 0) {\n            return { data: [] };\n        }\n\n        if (responses.length === 1) {\n            return responses[0];\n        }\n\n        // Merge data arrays from all responses\n        const allData: any[] = [];\n        const seenIds = new Set<string>();\n\n        responses.forEach(response => {\n            const data = response?.data || [];\n            if (Array.isArray(data)) {\n                data.forEach((item: any) => {\n                    // Deduplicate by ID if present\n                    if (item.id) {\n                        if (!seenIds.has(item.id)) {\n                            seenIds.add(item.id);\n                            allData.push(item);\n                        }\n                    } else {\n                        // No ID, include anyway (shouldn't deduplicate)\n                        allData.push(item);\n                    }\n                });\n            }\n        });\n\n        // Merge meta information from first successful response\n        const firstResponse = responses[0];\n        const meta = firstResponse?.meta || {};\n\n        return {\n            data: allData,\n            meta: {\n                ...meta,\n                pagination: {\n                    ...meta.pagination,\n                    totalCount: allData.length\n                }\n            }\n        };\n    }\n\n    private getUrlFilter(paging, filters: any[]) {\n        let urlFilter = '';\n        let toSearchOn = \"name\";\n        let noSearch = filters?.length <= 0;\n        if (isEmpty(paging)) {\n            paging = this.DEFAULT_PAGING;\n        }\n        if (paging && paging.sort != null) {\n            if (paging.searchOn) toSearchOn = paging.searchOn;\n            if (paging.noSearch) noSearch = true;\n            if (!paging.filter) paging.filter = \"\";\n            if (!isArray(paging.filter) && isNaN(paging.filter)) {\n                paging.filter = paging.filter.split('#').join('');\n            }\n        }\n        filters.forEach((filter, index) => {\n            let filterVal = '';\n            switch (filter.type) {\n                case 'TEXTINPUT':\n                    const verb = filter.verb ? filter.verb : 'icontains';\n                    filterVal = `${filter.columnId} ${verb} \"${filter.value}\"`;\n                    break;\n                case 'SELECT':\n                case 'COMBO':\n                    const val = (isNumber(filter.value) || isBoolean(filter.value)) ? `${filter.value}` : `\"${filter.value}\"`;\n                    filterVal = `${filter.columnId} = ${val}`;\n                    break;\n                case 'DATETIME':\n                    filterVal = `${filter.columnId} >= datetime(${filter.value[0]}) and ${filter.columnId} <= datetime(${filter.value[1]})`;\n                    break;\n                case 'ATTRIBUTE':\n                    filterVal = this.getAttributeFilter(filter.value, filter.columnId, filter.semantic);\n                    break;\n                case 'BOOLEAN':\n                    filterVal = `${filter.columnId}=${filter.value}`;\n                    break;\n                default:\n                    filterVal = `${filter.columnId} icontains \"${filter.value}\"`;\n                    break;\n            }\n            if (index <= 0) {\n                urlFilter = `?filter= ${filterVal}`;\n            } else {\n                urlFilter += ` and ${filterVal}`\n            }\n        });\n        if (noSearch) {\n            if (paging.page !== -1) urlFilter = \"?limit=\" + paging.total + \"&offset=\" + ((paging.page - 1) * paging.total)  + \"&sort=\" + paging.sort + \" \" + paging.order;\n        } else {\n            urlFilter += `&limit=${paging.total}&offset=${((paging.page - 1) * paging.total)}&sort=${paging.sort}  ${paging.order}`\n        }\n        return urlFilter;\n    }\n\n    override schema(data): Promise<any> {\n        return Promise.resolve(this.dereferenceJSONSchema(data));\n    }\n\n    async dereferenceJSONSchema(data: any) {\n        const resolver = new Resolver();\n        const schema = await resolver.resolve(data);\n        return schema.result;\n    }\n\n    getAttributeFilter(val, columnId, semantic = 'AnyOf') {\n        let filter = '';\n        if (isArray(val)) {\n            val.forEach((attr, index) => {\n                if (index > 0) {\n                    filter += ` ${semantic === 'AllOf' ? 'and' : 'or'} `;\n                }\n                filter += `anyOf(${columnId}) = \"${attr}\"`;\n            });\n        } else {\n            filter = `anyOf(${columnId}) = \"${val}\"`;\n        }\n        return filter;\n    }\n}\n","import {InjectionToken} from '@angular/core';\nimport {BehaviorSubject} from \"rxjs\";\nexport const ZITI_DOMAIN_CONTROLLER = new InjectionToken<any>('ZITI_DOMAIN_CONTROLLER');\n\nexport type ZitiSessionData = {\n    zitiDomain: any,\n    zitiSessionId: any,\n    expiresAt: any\n}\nexport interface ZitiDomainControllerService {\n    zitiSettings: BehaviorSubject<ZitiSessionData>;\n    handleUnauthorized();\n}\n","import {Injectable, InjectionToken} from '@angular/core';\nimport { CanDeactivate } from '@angular/router';\nimport { Observable } from 'rxjs';\n\nexport const DEACTIVATE_GUARD = new InjectionToken<DeactivateGuardService>('DEACTIVATE_GUARD');\n\nexport interface CanComponentDeactivate {\n    canDeactivate: () => Observable<boolean> | Promise<boolean> | boolean;\n}\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class DeactivateGuardService implements  CanDeactivate<CanComponentDeactivate>{\n\n    canDeactivate(component: CanComponentDeactivate) {\n        return component.canDeactivate ? component.canDeactivate() : true;\n    }\n}","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nexport class InsecureContextError extends Error {\n    constructor() {\n        super('crypto.subtle is unavailable - PKCE requires a secure context (https or localhost)');\n        this.name = 'InsecureContextError';\n    }\n}\n\nfunction base64UrlEncode(bytes: Uint8Array): string {\n    let binary = '';\n    bytes.forEach((b) => binary += String.fromCharCode(b));\n    return btoa(binary).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\n\nexport function randomUrlSafeString(byteLen = 32): string {\n    const bytes = new Uint8Array(byteLen);\n    crypto.getRandomValues(bytes);\n    return base64UrlEncode(bytes);\n}\n\nexport async function pkceChallengeS256(verifier: string): Promise<string> {\n    if (!crypto?.subtle) {\n        throw new InsecureContextError();\n    }\n    const digest = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(verifier));\n    return base64UrlEncode(new Uint8Array(digest));\n}\n\nexport function decodeJwtPayload(token: string): any | null {\n    if (!token) {\n        return null;\n    }\n    const parts = token.split('.');\n    if (parts.length !== 3) {\n        return null;\n    }\n    try {\n        const decoded = atob(parts[1].replace(/-/g, '+').replace(/_/g, '/'));\n        return JSON.parse(decoded);\n    } catch (e) {\n        return null;\n    }\n}\n\n// Returns the JWT exp claim in epoch milliseconds, or undefined for opaque/clamless tokens\nexport function jwtExpMs(token: string): number | undefined {\n    const exp = decodeJwtPayload(token)?.exp;\n    return typeof exp === 'number' ? exp * 1000 : undefined;\n}\n\nexport function jwtIatMs(token: string): number | undefined {\n    const iat = decodeJwtPayload(token)?.iat;\n    return typeof iat === 'number' ? iat * 1000 : undefined;\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Injectable} from '@angular/core';\nimport {randomUrlSafeString, pkceChallengeS256, jwtExpMs} from './oidc-utils';\n\nexport const OIDC_CLIENT_ID = 'openziti';\n// back-compat client registered on older controllers; removal planned upstream post-HA-GA\nexport const OIDC_CLIENT_ID_LEGACY = 'native';\n\nexport interface OidcTokenSet {\n    accessToken: string;\n    refreshToken?: string;\n    idToken?: string;\n    expiresAt: number;\n    refreshExpiresAt?: number;\n    clientId: string;\n}\n\nexport interface OidcAuthContext {\n    controllerUrl: string;\n    oidcBase: string;\n    authRequestId: string;\n    state: string;\n    nonce: string;\n    codeVerifier: string;\n    redirectUri: string;\n    clientId: string;\n}\n\nexport type OidcLoginStep =\n    | { status: 'code'; code: string }\n    | { status: 'totpRequired'; authQueries: any[] }\n    | { status: 'error'; error: any };\n\n// The OIDC flow could not even be attempted (no /oidc API, unregistered redirect URI,\n// insecure context, network failure). Callers fall back to legacy authentication.\nexport class OidcEnvironmentalError extends Error {\n    constructor(message: string, public causedBy?: any) {\n        super(message);\n        this.name = 'OidcEnvironmentalError';\n    }\n}\n\n// The controller has explicitly rejected the refresh token - the session cannot be renewed.\nexport class OidcSessionUnrecoverableError extends Error {\n    constructor(message: string, public reason?: string) {\n        super(message);\n        this.name = 'OidcSessionUnrecoverableError';\n    }\n}\n\n/**\n * Drives the ziti controller's native OIDC provider (auth code + PKCE) programmatically,\n * the same way the ziti SDKs do, so the console keeps its own login UI.\n *\n * Uses fetch rather than HttpClient: the auth request id and authorization code must be\n * parsed from Response.url after redirect-following (the controller's CORS config does not\n * expose the auth-request-id/totp-required headers cross-origin), and these requests must\n * bypass the app's HTTP interceptors.\n */\n@Injectable({\n    providedIn: 'root'\n})\nexport class ZitiOidcService {\n\n    private inflightRefresh: Promise<OidcTokenSet> | null = null;\n\n    buildRedirectUri(): string {\n        // Always the origin ROOT /auth/callback, ignoring any base href (e.g. /zac/):\n        // the controller's default registered redirect URIs are http(s)://localhost:*/auth/callback\n        // and the 127.0.0.1 equivalents - port wildcarded but the path is fixed. The redirect\n        // target never needs to serve content; the auth code is read from Response.url after\n        // fetch follows the redirect chain, so a 404 at this path is fine. This lets a console\n        // browsed via a loopback address (ng serve, server-edge, or controller-hosted ZAC at\n        // https://localhost:<port>/zac/) work against a stock controller config. Non-loopback\n        // hosts need this URI registered in the controller's edge-oidc options.redirectURIs.\n        return `${window.location.origin}/auth/callback`;\n    }\n\n    async startAuthRequest(controllerUrl: string, options?: { redirectUri?: string, oidcPath?: string }): Promise<OidcAuthContext> {\n        const oidcBase = this.normalizeUrl(controllerUrl) + (options?.oidcPath || '/oidc');\n        const redirectUri = options?.redirectUri || this.buildRedirectUri();\n        const state = randomUrlSafeString();\n        const nonce = randomUrlSafeString();\n        const codeVerifier = randomUrlSafeString(48);\n        const codeChallenge = await pkceChallengeS256(codeVerifier).catch((err) => {\n            throw new OidcEnvironmentalError(err.message, err);\n        });\n\n        const ctx: OidcAuthContext = {\n            controllerUrl: this.normalizeUrl(controllerUrl),\n            oidcBase,\n            authRequestId: '',\n            state,\n            nonce,\n            codeVerifier,\n            redirectUri,\n            clientId: OIDC_CLIENT_ID\n        };\n\n        let lastError: any;\n        for (const clientId of [OIDC_CLIENT_ID, OIDC_CLIENT_ID_LEGACY]) {\n            try {\n                const authRequestId = await this.authorize(oidcBase, clientId, ctx);\n                if (authRequestId) {\n                    ctx.authRequestId = authRequestId;\n                    ctx.clientId = clientId;\n                    return ctx;\n                }\n            } catch (err) {\n                lastError = err;\n            }\n        }\n        throw new OidcEnvironmentalError(\n            `Unable to start an OIDC auth request with the controller. Verify the redirect URI \"${redirectUri}\" is registered in the controller's edge-oidc configuration.`,\n            lastError\n        );\n    }\n\n    private async authorize(oidcBase: string, clientId: string, ctx: OidcAuthContext): Promise<string | null> {\n        const params = new URLSearchParams({\n            client_id: clientId,\n            response_type: 'code',\n            scope: 'openid offline_access',\n            state: ctx.state,\n            nonce: ctx.nonce,\n            code_challenge: await pkceChallengeS256(ctx.codeVerifier),\n            code_challenge_method: 'S256',\n            redirect_uri: ctx.redirectUri\n        });\n        const resp = await fetch(`${oidcBase}/authorize?${params.toString()}`, {\n            method: 'GET',\n            mode: 'cors',\n            credentials: 'omit',\n            redirect: 'follow',\n            headers: {accept: 'application/json'}\n        });\n        // success redirects to the controller's login page: /oidc/login/username?authRequestID=<id>\n        const finalUrl = new URL(resp.url);\n        const fromUrl = finalUrl.searchParams.get('authRequestID') || finalUrl.searchParams.get('id');\n        // header is only readable same-origin (controller CORS exposes no custom headers)\n        return fromUrl || resp.headers.get('auth-request-id');\n    }\n\n    loginWithPassword(ctx: OidcAuthContext, username: string, password: string): Promise<OidcLoginStep> {\n        return this.submitLogin(ctx, `${ctx.oidcBase}/login/username`, {id: ctx.authRequestId, username, password});\n    }\n\n    loginWithExtJwt(ctx: OidcAuthContext, extToken: string): Promise<OidcLoginStep> {\n        return this.submitLogin(ctx, `${ctx.oidcBase}/login/ext-jwt`, {id: ctx.authRequestId}, {Authorization: `Bearer ${extToken}`});\n    }\n\n    loginWithCert(ctx: OidcAuthContext): Promise<OidcLoginStep> {\n        return this.submitLogin(ctx, `${ctx.oidcBase}/login/cert`, {id: ctx.authRequestId});\n    }\n\n    submitTotp(ctx: OidcAuthContext, code: string): Promise<OidcLoginStep> {\n        return this.submitLogin(ctx, `${ctx.oidcBase}/login/totp`, {id: ctx.authRequestId, code});\n    }\n\n    private async submitLogin(ctx: OidcAuthContext, url: string, fields: any, extraHeaders: any = {}): Promise<OidcLoginStep> {\n        let resp: Response;\n        try {\n            resp = await fetch(url, {\n                method: 'POST',\n                mode: 'cors',\n                credentials: 'omit',\n                redirect: 'follow',\n                headers: {accept: 'application/json', ...extraHeaders},\n                body: new URLSearchParams(fields)\n            });\n        } catch (err: any) {\n            return {status: 'error', error: {message: err?.message || 'network error contacting controller'}};\n        }\n\n        // On success the controller 302s through /oidc/authorize/callback to the redirect URI\n        // with the auth code. Check the final URL before resp.ok - the terminal GET of the\n        // redirect URI may legitimately 404 on strict static hosts.\n        if (resp.url && resp.url.startsWith(ctx.redirectUri)) {\n            const finalUrl = new URL(resp.url);\n            const error = finalUrl.searchParams.get('error');\n            if (error) {\n                return {status: 'error', error: {message: finalUrl.searchParams.get('error_description') || error}};\n            }\n            const state = finalUrl.searchParams.get('state');\n            if (state !== ctx.state) {\n                return {status: 'error', error: {message: 'OIDC state mismatch in login redirect'}};\n            }\n            const code = finalUrl.searchParams.get('code');\n            if (!code) {\n                return {status: 'error', error: {message: 'no authorization code in login redirect'}};\n            }\n            return {status: 'code', code};\n        }\n\n        let body: any = null;\n        try {\n            body = await resp.json();\n        } catch (e) {\n            // non-JSON body, fall through to the generic error below\n        }\n\n        // secondary auth pending - detected from the body since the totp-required header\n        // is not readable cross-origin\n        if (resp.ok && body?.authQueries?.length) {\n            return {status: 'totpRequired', authQueries: body.authQueries};\n        }\n\n        if (resp.status === 400 && url.endsWith('/login/totp')) {\n            return {status: 'error', error: {invalidCode: true, message: 'invalid TOTP code'}};\n        }\n\n        const message = body?.error?.message || body?.error_description || body?.message\n            || `login failed with status ${resp.status}`;\n        return {status: 'error', error: {...(body?.error || body || {}), message, status: resp.status}};\n    }\n\n    async exchangeCode(ctx: OidcAuthContext, code: string): Promise<OidcTokenSet> {\n        const resp = await fetch(`${ctx.oidcBase}/oauth/token`, {\n            method: 'POST',\n            mode: 'cors',\n            credentials: 'omit',\n            headers: {accept: 'application/json'},\n            body: new URLSearchParams({\n                grant_type: 'authorization_code',\n                client_id: ctx.clientId,\n                code,\n                code_verifier: ctx.codeVerifier,\n                redirect_uri: ctx.redirectUri\n            })\n        });\n        const body = await resp.json().catch(() => null);\n        if (!resp.ok || !body?.access_token) {\n            throw new Error(body?.error_description || body?.error || `token exchange failed with status ${resp.status}`);\n        }\n        return this.toTokenSet(body, ctx.clientId);\n    }\n\n    refreshTokens(controllerUrl: string, refreshToken: string, clientId = OIDC_CLIENT_ID, oidcPath = '/oidc'): Promise<OidcTokenSet> {\n        if (this.inflightRefresh) {\n            return this.inflightRefresh;\n        }\n        this.inflightRefresh = this.doRefresh(controllerUrl, refreshToken, clientId, oidcPath)\n            .finally(() => {\n                this.inflightRefresh = null;\n            });\n        return this.inflightRefresh;\n    }\n\n    private async doRefresh(controllerUrl: string, refreshToken: string, clientId: string, oidcPath: string): Promise<OidcTokenSet> {\n        // If a controller version rejects this grant for the registered native clients, switch\n        // to the token-exchange grant the go SDK uses: grant_type=urn:ietf:params:oauth:grant-type:token-exchange\n        // with subject_token=<refreshToken>, subject_token_type=urn:ietf:params:oauth:token-type:refresh_token,\n        // requested_token_type=urn:ietf:params:oauth:token-type:refresh_token\n        const resp = await fetch(`${this.normalizeUrl(controllerUrl)}${oidcPath}/oauth/token`, {\n            method: 'POST',\n            mode: 'cors',\n            credentials: 'omit',\n            headers: {accept: 'application/json'},\n            body: new URLSearchParams({\n                grant_type: 'refresh_token',\n                client_id: clientId,\n                refresh_token: refreshToken\n            })\n        });\n        const body = await resp.json().catch(() => null);\n        if (resp.ok && body?.access_token) {\n            const tokens = this.toTokenSet(body, clientId);\n            if (!tokens.refreshToken) {\n                // controller did not rotate the refresh token; keep using the current one\n                tokens.refreshToken = refreshToken;\n                tokens.refreshExpiresAt = jwtExpMs(refreshToken);\n            }\n            return tokens;\n        }\n        if (resp.status === 400 || resp.status === 401 || resp.status === 403) {\n            throw new OidcSessionUnrecoverableError(\n                body?.error_description || 'session refresh token was rejected by the controller',\n                body?.error || `http ${resp.status}`\n            );\n        }\n        throw new Error(body?.error_description || body?.error || `token refresh failed with status ${resp.status}`);\n    }\n\n    async revokeToken(controllerUrl: string, token: string, hint: 'refresh_token' | 'access_token', clientId = OIDC_CLIENT_ID, oidcPath = '/oidc'): Promise<void> {\n        try {\n            await fetch(`${this.normalizeUrl(controllerUrl)}${oidcPath}/oauth/revoke`, {\n                method: 'POST',\n                mode: 'cors',\n                credentials: 'omit',\n                headers: {accept: 'application/json'},\n                body: new URLSearchParams({token, token_type_hint: hint, client_id: clientId})\n            });\n        } catch (e) {\n            // best-effort - locally dropping the tokens is sufficient for logout\n        }\n    }\n\n    private toTokenSet(body: any, clientId: string): OidcTokenSet {\n        const expFromJwt = jwtExpMs(body.access_token);\n        return {\n            accessToken: body.access_token,\n            refreshToken: body.refresh_token || undefined,\n            idToken: body.id_token || undefined,\n            expiresAt: expFromJwt || (Date.now() + (body.expires_in || 1800) * 1000),\n            refreshExpiresAt: body.refresh_token ? jwtExpMs(body.refresh_token) : undefined,\n            clientId\n        };\n    }\n\n    private normalizeUrl(url: string): string {\n        return url?.replace(/\\/+$/, '');\n    }\n}\n","/*\n    Copyright NetFoundry Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Inject, Injectable, Injector} from '@angular/core';\nimport {SETTINGS_SERVICE} from './settings.service';\nimport {SettingsServiceClass} from './settings-service.class';\nimport {ZitiOidcService, OidcSessionUnrecoverableError} from './ziti-oidc.service';\nimport {ZAC_LOGIN_SERVICE} from './login-service.class';\nimport {GrowlerService} from '../features/messaging/growler.service';\nimport {GrowlerModel} from '../features/messaging/growler.model';\nimport {jwtExpMs, jwtIatMs} from './oidc-utils';\n\nconst DEFAULT_ACCESS_TOKEN_LIFETIME_MS = 30 * 60 * 1000;\nconst MIN_REFRESH_LEAD_MS = 60 * 1000;\nconst MIN_SCHEDULE_DELAY_MS = 5 * 1000;\nconst MONITOR_INTERVAL_MS = 60 * 1000;\nconst INITIAL_RETRY_MS = 30 * 1000;\nconst MAX_RETRY_MS = 5 * 60 * 1000;\n\n/**\n * Keeps OIDC sessions alive by refreshing the access token before it expires, and\n * self-monitors for sessions that can no longer be renewed (refresh token expired or\n * revoked), logging the user out and returning them to the login page.\n */\n@Injectable({\n    providedIn: 'root'\n})\nexport class SessionRefreshService {\n\n    private refreshTimer: any = null;\n    private monitorInterval: any = null;\n    private retryDelayMs = INITIAL_RETRY_MS;\n    private running = false;\n\n    private readonly onWake = () => {\n        if (document.visibilityState === 'visible') {\n            this.checkSessionState();\n        }\n    };\n    private readonly onStorage = (event: StorageEvent) => {\n        if (event.key !== 'ziti.settings') {\n            return;\n        }\n        this.settingsService.get();\n        if (this.hasOidcSession()) {\n            this.scheduleNextRefresh();\n        } else {\n            this.stop();\n        }\n    };\n\n    constructor(\n        @Inject(SETTINGS_SERVICE) private settingsService: SettingsServiceClass,\n        private oidcService: ZitiOidcService,\n        private growlerService: GrowlerService,\n        private injector: Injector\n    ) {}\n\n    start(): void {\n        // Skip the monitor on /callback so a stale expired session can't redirect to /login\n        // before the code exchange completes. See openziti/ziti-console#915.\n        if (window.location.pathname.endsWith('/callback')) {\n            return;\n        }\n        if (!this.hasOidcSession()) {\n            return;\n        }\n        if (!this.running) {\n            this.running = true;\n            document.addEventListener('visibilitychange', this.onWake);\n            window.addEventListener('focus', this.onWake);\n            window.addEventListener('storage', this.onStorage);\n            this.monitorInterval = setInterval(() => this.checkSessionState(), MONITOR_INTERVAL_MS);\n        }\n        this.checkSessionState();\n        this.scheduleNextRefresh();\n    }\n\n    stop(): void {\n        this.running = false;\n        clearTimeout(this.refreshTimer);\n        this.refreshTimer = null;\n        clearInterval(this.monitorInterval);\n        this.monitorInterval = null;\n        this.retryDelayMs = INITIAL_RETRY_MS;\n        document.removeEventListener('visibilitychange', this.onWake);\n        window.removeEventListener('focus', this.onWake);\n        window.removeEventListener('storage', this.onStorage);\n    }\n\n    async refreshNow(): Promise<boolean> {\n        const session = this.settingsService.settings?.session;\n        if (session?.authMode !== 'oidc' || !session?.refreshToken) {\n            return false;\n        }\n        const usedRefreshToken = session.refreshToken;\n        try {\n            const tokens = await this.oidcService.refreshTokens(\n                session.controllerDomain,\n                usedRefreshToken,\n                session.oidcClientId,\n                this.settingsService.edgeOidcPath || '/oidc'\n            );\n            this.persistTokens(tokens);\n            this.retryDelayMs = INITIAL_RETRY_MS;\n            this.scheduleNextRefresh();\n            return true;\n        } catch (err) {\n            if (err instanceof OidcSessionUnrecoverableError) {\n                // another tab may have rotated the refresh token already - adopt its session\n                // before declaring the session dead\n                this.settingsService.get();\n                const latest = this.settingsService.settings?.session;\n                if (latest?.refreshToken && latest.refreshToken !== usedRefreshToken\n                    && (jwtExpMs(this.settingsService.getJwtToken()) || 0) > Date.now()) {\n                    this.scheduleNextRefresh();\n                    return true;\n                }\n                this.handleUnrecoverable();\n                return false;\n            }\n            // transient failure (network/5xx) - keep the session and retry with backoff\n            this.scheduleRetry();\n            return false;\n        }\n    }\n\n    private persistTokens(tokens: any): void {\n        const settings = this.settingsService.settings;\n        settings.session = {\n            ...settings.session,\n            id: tokens.accessToken,\n            expiresAt: new Date(tokens.expiresAt).toISOString(),\n            refreshToken: tokens.refreshToken,\n            refreshExpiresAt: tokens.refreshExpiresAt,\n            oidcClientId: tokens.clientId\n        };\n        this.settingsService.set(settings);\n        this.settingsService.setJwtToken(tokens.accessToken);\n    }\n\n    private scheduleNextRefresh(): void {\n        clearTimeout(this.refreshTimer);\n        if (!this.running || !this.hasOidcSession()) {\n            return;\n        }\n        const token = this.settingsService.getJwtToken();\n        const exp = jwtExpMs(token);\n        const iat = jwtIatMs(token);\n        const lifetime = exp && iat ? exp - iat : DEFAULT_ACCESS_TOKEN_LIFETIME_MS;\n        const refreshAt = exp ? exp - Math.max(lifetime * 0.25, MIN_REFRESH_LEAD_MS) : Date.now();\n        const delay = Math.max(refreshAt - Date.now(), MIN_SCHEDULE_DELAY_MS);\n        this.refreshTimer = setTimeout(() => this.refreshNow(), delay);\n    }\n\n    private scheduleRetry(): void {\n        clearTimeout(this.refreshTimer);\n        if (!this.running) {\n            return;\n        }\n        this.refreshTimer = setTimeout(() => this.refreshNow(), this.retryDelayMs);\n        this.retryDelayMs = Math.min(this.retryDelayMs * 2, MAX_RETRY_MS);\n    }\n\n    private checkSessionState(): void {\n        if (!this.running || !this.hasOidcSession()) {\n            return;\n        }\n        const session = this.settingsService.settings.session;\n        const refreshExp = session.refreshExpiresAt ?? jwtExpMs(session.refreshToken);\n        if (refreshExp && refreshExp <= Date.now()) {\n            this.handleUnrecoverable();\n            return;\n        }\n        const accessExp = jwtExpMs(this.settingsService.getJwtToken());\n        if (!accessExp || accessExp - Date.now() < MIN_REFRESH_LEAD_MS) {\n            this.refreshNow();\n        }\n    }\n\n    private hasOidcSession(): boolean {\n        const session = this.settingsService.settings?.session;\n        return session?.authMode === 'oidc' && !!session?.refreshToken;\n    }\n\n    private handleUnrecoverable(): void {\n        this.stop();\n        this.growlerService.show(new GrowlerModel(\n            'warning',\n            'Session Expired',\n            'Session Expired',\n            'Please log in again.'\n        ));\n        this.injector.get(ZAC_LOGIN_SERVICE).logout();\n    }\n}\n","export const ZAC_VERSION = {\n    \"version\": \"4.5.2\"\n};\n","/*\n * Public API Surface of ziti-console-lib\n */\n\nexport * from './lib/ziti-console-lib.module';\nexport * from './lib/zac-routing.module';\nexport * from './lib/pages/identities/identities-page.component';\nexport * from './lib/pages/identities/identities-page.service';\nexport * from './lib/pages/edge-routers/edge-routers-page.component';\nexport * from './lib/pages/edge-routers/edge-routers-page.service';\nexport * from './lib/pages/transit-routers/transit-routers-page.component';\nexport * from './lib/pages/transit-routers/transit-routers-page.service';\nexport * from './lib/pages/edge-router-policies/edge-router-policies-page.component';\nexport * from './lib/pages/edge-router-policies/edge-router-policies-page.service';\nexport * from './lib/pages/service-edge-router-policies/service-edge-router-policies-page.component';\nexport * from './lib/pages/service-edge-router-policies/service-edge-router-policies-page.service';\nexport * from './lib/pages/services/services-page.component';\nexport * from './lib/pages/services/services-page.service';\nexport * from './lib/pages/service-policies/service-policies-page.component';\nexport * from './lib/pages/service-policies/service-policies-page.service';\nexport * from './lib/pages/jwt-signers/jwt-signers-page.component';\nexport * from './lib/pages/jwt-signers/jwt-signers-page.service';\nexport * from './lib/pages/auth-policies/auth-policies-page.component';\nexport * from './lib/pages/auth-policies/auth-policies-page.service';\nexport * from './lib/pages/certificate-authorities/certificate-authorities-page.component';\nexport * from './lib/pages/certificate-authorities/certificate-authorities-page.service';\nexport * from './lib/pages/sessions/sessions-page.component';\nexport * from './lib/pages/sessions/sessions-page.service';\nexport * from './lib/pages/api-sessions/api-sessions-page.component';\nexport * from './lib/pages/api-sessions/api-sessions-page.service';\nexport * from './lib/pages/callback/callback.component';\nexport * from './lib/pages/settings/settings.component';\nexport * from './lib/pages/profile/profile.component';\nexport * from './lib/pages/geolocate/geolocate.component';\nexport * from './lib/pages/geolocate/components/ha-status-indicator/ha-status-indicator.component';\nexport * from './lib/pages/attributes/attributes.component';\nexport * from './lib/services/login-service.class';\nexport * from './lib/services/noop-login.service';\nexport * from './lib/services/settings-service.class';\nexport * from './lib/services/settings.service';\nexport * from './lib/services/management-permissions.service';\nexport * from './lib/services/ha-controller.service';\nexport * from './lib/services/tab-name.service';\nexport * from './lib/services/ziti-data.service';\nexport * from './lib/services/node-data.service';\nexport * from './lib/services/ziti-controller-data.service';\nexport * from './lib/services/ziti-domain-controller.service';\nexport * from './lib/services/deactivate-guard.service';\nexport * from './lib/services/csv-download.service';\nexport * from './lib/services/auth.service';\nexport * from './lib/services/validation.service';\nexport * from './lib/services/oidc-utils';\nexport * from './lib/services/ziti-oidc.service';\nexport * from './lib/services/session-refresh.service';\nexport * from './lib/features/projectable-forms/configuration/configuration.service';\nexport * from './lib/features/projectable-forms/configuration/configuration-form.component';\nexport * from './lib/features/extendable/extendable.component';\nexport * from './lib/features/data-table/data-table-filter.service';\nexport * from './lib/features/card-list/card-list.component';\nexport * from './lib/features/preview-list/preview-list.component';\nexport * from './lib/features/login/login-dialog.component';\nexport * from './lib/features/sidebars/side-navbar/side-navbar.component';\nexport * from './lib/features/dynamic-widgets/string/string-input.component';\nexport * from './lib/features/dynamic-widgets/number/number-input.component';\nexport * from './lib/features/dynamic-widgets/selector/selector-input.component';\nexport * from './lib/features/dynamic-widgets/password/password-input.component';\nexport * from './lib/features/dynamic-widgets/boolean/boolean-toggle-input.component';\nexport * from './lib/features/dynamic-widgets/checkbox-list/checkbox-list-input.component';\nexport * from './lib/features/dynamic-widgets/object/object.component';\nexport * from './lib/features/dynamic-widgets/text-list/text-list-input.component';\nexport * from './lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component';\nexport * from './lib/features/chips-input/chips-input.component';\nexport * from './lib/features/filter-select/filter-select.component';\nexport * from './lib/features/filter-select/filter-select-templates.directive';\nexport * from './lib/features/projectable-forms/projectable-form.class';\nexport * from './lib/features/messaging/growler.component';\nexport * from './lib/features/messaging/growler.service';\nexport * from './lib/features/messaging/growler.model';\nexport * from './lib/features/messaging/logger.service';\nexport * from './lib/features/tag-selector/tag-selector.component';\nexport * from './lib/features/side-navigator/side-navigator.component';\nexport * from './lib/features/header-bar/header-bar.component';\nexport * from './lib/features/quick-add/quick-add.component';\nexport * from './lib/pages/configurations/configurations-page.component';\nexport * from './lib/pages/config-types/config-types-page.component';\nexport * from './lib/pages/posture-checks/posture-checks-page.component';\nexport * from './lib/pages/posture-checks/posture-checks-page.service';\nexport * from './lib/pages/terminators/terminators-page.component';\nexport * from './lib/pages/terminators/terminators-page.service';\nexport * from './lib/ziti-console.constants';\nexport * from './lib/features/json-view/json-view.component';\nexport * from './lib/features/side-modal/side-modal.component';\nexport * from './lib/features/projectable-forms/identity/identity-form.component';\nexport * from './lib/features/projectable-forms/identity/identity-form.service';\nexport * from './lib/features/projectable-forms/edge-router/edge-router-form.component';\nexport * from './lib/features/projectable-forms/edge-router/edge-router-form.service';\nexport * from './lib/features/projectable-forms/transit-router/transit-router-form.component';\nexport * from './lib/features/projectable-forms/transit-router/transit-router-form.service';\nexport * from './lib/features/projectable-forms/service/service-form.component';\nexport * from './lib/features/projectable-forms/service/service-form.service';\nexport * from './lib/features/projectable-forms/service/simple-service/simple-service.component';\nexport * from './lib/features/projectable-forms/service-policy/service-policy-form.service';\nexport * from './lib/features/projectable-forms/service-policy/service-policy-form.component';\nexport * from './lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service';\nexport * from './lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component';\nexport * from './lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service';\nexport * from './lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component';\nexport * from './lib/features/projectable-forms/terminator/terminator-form.service';\nexport * from './lib/features/projectable-forms/terminator/terminator-form.component';\nexport * from './lib/features/projectable-forms/jwt-signer/jwt-signer-form.service';\nexport * from './lib/features/projectable-forms/jwt-signer/jwt-signer-form.component';\nexport * from './lib/features/projectable-forms/auth-policy/auth-policy-form.service';\nexport * from './lib/features/projectable-forms/auth-policy/auth-policy-form.component';\nexport * from './lib/features/projectable-forms/certificate-authority/certificate-authority-form.service';\nexport * from './lib/features/projectable-forms/certificate-authority/certificate-authority-form.component';\nexport * from './lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component';\nexport * from './lib/features/projectable-forms/config-type/config-type-form.component';\nexport * from './lib/features/projectable-forms/posture-check/posture-check-form.component';\nexport * from './lib/features/projectable-forms/session/session-form.component';\nexport * from './lib/features/projectable-forms/api-session/api-session-form.component';\nexport * from './lib/features/progress-meter/progress-meter.component';\nexport * from './lib/features/progress-wizard/progress-wizard.component';\nexport * from './lib/features/config-editor/config-editor.component';\nexport * from './lib/features/reset-enrollment/reset-enrollment.service';\nexport * from './lib/features/extendable/extensions-noop.service';\nexport * from './lib/features/projectable-forms/form-header/form-header.component';\nexport * from './lib/features/loading-indicator/loading-indicator.component';\nexport * from './lib/models/identity';\nexport * from './lib/models/edge-router';\nexport * from './lib/models/session';\nexport * from './lib/features/messaging/growler.module';\nexport * from './lib/shared/list-page-component.class';\nexport * from './lib/shared/list-page-service.class';\nexport * from './lib/features/projectable-forms/form-field-container/form-field-container.component';\nexport * from './lib/features/projectable-forms/form-field-toggle/form-field-toggle.component';\nexport * from './lib/ZAC_VERSION';\nexport * from './lib/features/visualizer/visualizer-service.class';\nexport * from './lib/features/visualizer/identity-service-path/identity-service-path.component';\nexport * from './lib/features/visualizer/network-visualizer/network-visualizer.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3.ChipsInputComponent","isNaN","i1.ValidationService","i3.StringInputComponent","i4.NumberInputComponent","i5.SelectorInputComponent","i1.LoggerService","DEFAULTS","i2.GrowlerService","i3.SettingsServiceClass","i4","i5","map","i1.DataTableFilterService","i3","i4.TableColumnFilterComponent","i1.ForwardingConfigService","i2.ValidationService","i4.BooleanToggleInputComponent","i5.TextListInputComponent","i6.CheckboxListInputComponent","i7.ProtocolAddressPortInputComponent","i1.GrowlerService","Service","i1.SchemaService","i2.DataTableFilterService","i3.CsvDownloadService","i3.DateRangeQuickHeaderService","moment","i1.ResetEnrollmentService","i4.DateTimePickerComponent","Identity","i2.IdentitiesPageService","i3.EdgeRoutersPageService","i6","i1.DataTableService","i9","i10.FilterBarComponent","i11.HiddenColumnsBarComponent","i12.NoItemsComponent","i13.TagSelectorComponent","i6.ListPageHeaderComponent","i7.DataTableComponent","i4.MultiActionButtonComponent","i3.MultiActionButtonComponent","i1.TerminatorFormService","i2.SchemaService","i3.GrowlerService","i7.FormHeaderComponent","i8.FormFieldContainerComponent","i9.LoadingIndicatorComponent","i10.JsonViewComponent","i1.IdentityServicePathHelper","i2.MapDataService","i8","i10.LoadingIndicatorComponent","i1.ConsoleEventsService","i1.OverridesService","i5.FilterSelectComponent","i7.ListPageHeaderComponent","i8.DataTableComponent","i9.SideModalComponent","i11.OverridesComponent","i8.LoadingIndicatorComponent","i3.ValidationService","ServicePolicy","i6.ServicePolicyFormService","i2.ServicesPageService","i6.FormFieldContainerComponent","i7.PreviewListComponent","i1.ServicesPageService","i4.TabNameService","i5.ConsoleEventsService","i6.GrowlerService","i1.IdentityFormService","i7","i8.DateTimePickerComponent","i9.FormHeaderComponent","i10.FormFieldContainerComponent","i11.PreviewListComponent","i12.LoadingIndicatorComponent","i13.FormFieldToggleComponent","i14.JsonViewComponent","i15.TagSelectorComponent","i16.QrCodeComponent","i17.CustomTagsComponent","i18.SafePipe","Config","i2.LoggerService","i3.TreeNodeProcessor","i4.NetworkVisualizerHelper","i1.EdgeRouterFormService","i8.FormHeaderComponent","i9.FormFieldContainerComponent","i10.PreviewListComponent","i11.LoadingIndicatorComponent","i12.FormFieldToggleComponent","i13.JsonViewComponent","i14.TagSelectorComponent","i15.QrCodeComponent","i16.CustomTagsComponent","i1.TransitRouterFormService","i6.FormHeaderComponent","i7.FormFieldContainerComponent","i9.FormFieldToggleComponent","i11.QrCodeComponent","i12.CustomTagsComponent","i4.JsonViewComponent","i1.ServiceFormService","i9.PreviewListComponent","i11.FormFieldToggleComponent","i12.JsonViewComponent","i14.CustomTagsComponent","i15.ConfigEditorComponent","i16.FilterSelectComponent","i5.CardComponent","i4.FormFieldContainerComponent","i4.ValidationService","i5.ServicesPageService","i10.FormHeaderComponent","i11.FormFieldContainerComponent","i1.ServicePolicyFormService","i1.EdgeRouterPolicyFormService","i1.ServiceEdgeRouterPolicyFormService","i1.ConfigurationService","i13.CustomTagsComponent","i14.ConfigEditorComponent","i10","i11","i12","i13.ChipsInputComponent","i14.SideModalComponent","i15.FormHeaderComponent","i16.FormFieldContainerComponent","i17.LoadingIndicatorComponent","i18.FormFieldToggleComponent","i19.JsonViewComponent","i20.CustomTagsComponent","i1.AuthPolicyFormService","i6.ValidationService","i15.CustomTagsComponent","i1.CertificateAuthorityFormService","i1.VerifyCertificateService","i1.ConfigTypeFormService","i1.PostureCheckFormService","i10.ChipsInputComponent","i11.FormHeaderComponent","i12.FormFieldContainerComponent","i13.LoadingIndicatorComponent","i14.FormFieldToggleComponent","i15.JsonViewComponent","i16.TagSelectorComponent","i18.FilterSelectComponent","i19.FilterSelectOptionTemplateDirective","i19.FilterSelectTriggerTemplateDirective","i1.SessionFormService","i5.FormHeaderComponent","i9.JsonViewComponent","i1.APISessionFormService","i7.LoadingIndicatorComponent","i8.JsonViewComponent","i4.LoadingIndicatorComponent","i1.GeolocationService","i1.CircuitCalculationService","i2.CircuitPathBuilderService","i4.TagSelectorComponent","i2.CircuitHopsTableComponent","i3.RouterPathTableComponent","i2.FormFieldContainerComponent","i3.MarkerPanelComponent","i4.LinkPanelComponent","i5.CircuitPanelComponent","i6.EntityListPanelComponent","i7.UnlocatedPanelComponent","i8.ServicesWithCircuitsPanelComponent","filter","defer","i4.GeolocationService","i5.MapDataService","i6.CircuitCalculationService","i7.CircuitPathBuilderService","i8.CircuitFilterService","i9.MapMarkerService","i10.MapRenderingService","i11.MapStateService","i13.FormFieldContainerComponent","i14.LoadingIndicatorComponent","i15.MapLegendComponent","i16.EntityCountLegendComponent","i17.GeolocateFilterBarComponent","i18.SidePanelContainerComponent","i1.HAControllerService","i2.HAControllerService","i1.ZitiOidcService"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAuBa,QAAQ,CAAA;AACnB,IAAA,WAAA,CAAoB,SAAuB,EAAA;QAAvB,IAAA,CAAA,SAAS,GAAT,SAAS;IAAiB;AAE9C,IAAA,SAAS,CAAC,KAAa,EAAA;QACrB,OAAO,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,KAAK,CAAC;IACtD;+GALW,QAAQ,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAR,QAAQ,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,CAAA;;4FAAR,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAJpB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACtBD;;;;;;;;;;;;;;AAcE;AAKF,MAAM,MAAM,GAAW,EAAE;MAOZ,gBAAgB,CAAA;+GAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,wCAHf,YAAY,CAAA,EAAA,CAAA,CAAA;gHAGb,gBAAgB,EAAA,OAAA,EAAA,CAFf,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAD7B,YAAY,CAAA,EAAA,CAAA,CAAA;;4FAGb,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAL5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,YAAY,EAAE,EAAE;oBAChB,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC3C,iBAAA;;;ACzBD;;;;;;;;;;;;;;AAcE;MAKW,iBAAiB,GAAG,IAAI,cAAc,CAAM,mBAAmB;MAuC/D,qBAAqB,CAAA;AAShC,IAAA,WAAA,GAAA;QAPA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAAM,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC;AAC3D,QAAA,IAAA,CAAA,MAAM,GAAsB,IAAI,YAAY,EAAO;AACnD,QAAA,IAAA,CAAA,sBAAsB,GAAsB,IAAI,YAAY,EAAO;QACnE,IAAA,CAAA,cAAc,GAAG,IAAI;QACrB,IAAA,CAAA,WAAW,GAAG,EAAE;QAChB,IAAA,CAAA,kBAAkB,GAAG,EAAE;IAEP;IAEhB,MAAM,SAAS,CAAiB,KAAqC,EAAA;AACnE,QAAA,OAAO,SAAS;IAClB;IAEA,YAAY,GAAA;IACZ;AAEA,IAAA,oBAAoB,CAAC,eAAoB,EAAA;IACzC;AAEA,IAAA,cAAc,CAAC,IAAS,EAAA;IACxB;AAEA,IAAA,aAAa,CAAC,IAAS,EAAA;AACrB,QAAA,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;IAC9B;IAEA,YAAY,GAAA;AACV,QAAA,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;IAC9B;AAEA,IAAA,mBAAmB,CAAC,YAAiB,EAAA;AACnC,QAAA,OAAO,YAAY;IACrB;+GAlCW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA,CAAA;;4FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACzDD;;;;;;;;;;;;;;AAcE;MASW,mBAAmB,CAAA;AAQ9B,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;IACzC;IAEA,eAAe,GAAA;AACb,QAAA,MAAM,IAAI,GAAG;YACX,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,cAAc,EAAE,IAAI,CAAC;SACtB;AACD,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC;QACxC;IACF;+GAtBW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAnB,mBAAmB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,cAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EACM,gBAAgB,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EACjB,gBAAgB,8GACb,gBAAgB,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EACjB,gBAAgB,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAPzC,CAAA,CAAA,CAAG,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;;4FAGJ,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAJ/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,CAAA,CAAA,CAAG;AACb,oBAAA,UAAU,EAAE;AACf,iBAAA;;sBAEE,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,gBAAgB,EAAE,EAAC,IAAI,EAAE,gBAAgB,EAAC;;sBACpD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAC,IAAI,EAAE,gBAAgB,EAAC;;sBACnD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,kBAAkB,EAAE,EAAC,IAAI,EAAE,gBAAgB,EAAC;;sBACtD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,iBAAiB,EAAE,EAAC,IAAI,EAAE,gBAAgB,EAAC;;;MCM3C,oBAAoB,CAAA;AA7BjC,IAAA,WAAA,GAAA;QA8BI,IAAA,CAAA,UAAU,GAAG,aAAa;QAC1B,IAAA,CAAA,OAAO,GAAG,WAAW;QAMZ,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,WAAW,GAAG,EAAE;QAChB,IAAA,CAAA,SAAS,GAAa,EAAE;QACxB,IAAA,CAAA,UAAU,GAAG,SAAS;QACtB,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,KAAK,GAAG,EAAE;QACV,IAAA,CAAA,YAAY,GAAG,EAAE;QACjB,IAAA,CAAA,QAAQ,GAAG,KAAK;AACf,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAU;AACvD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAW;QAEpC,IAAA,CAAA,QAAQ,GAAG,IAAI;AASf,QAAA,IAAA,CAAA,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC;AAKlE,IAAA;IA9BG,IAAa,SAAS,CAAC,IAAY,EAAA;AAC/B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE;IACxD;AAcO,IAAA,UAAU,CAAE,OAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;IAC3B;IAEA,OAAO,GAAA;QACH,IAAI,CAAC,mBAAmB,EAAE;IAC9B;IAGA,UAAU,GAAA;QACN,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;QAC3C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;IAC1C;+GAhCS,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA3BnB;;;;;;;;;;;;;;;;;;;;;;;AAuBP,MAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,iUAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAIM,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBA7BhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAAA,QAAA,EAClB;;;;;;;;;;;;;;;;;;;;;;;AAuBP,MAAA,CAAA,EAAA,UAAA,EAES,KAAK,EAAA,MAAA,EAAA,CAAA,iUAAA,CAAA,EAAA;;sBAKhB;;sBAIA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;MClBQ,oBAAoB,CAAA;IAG/B,IAAa,SAAS,CAAC,IAAY,EAAA;AACjC,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE;IACtD;AAcA,IAAA,WAAA,GAAA;QAnBA,IAAA,CAAA,UAAU,GAAG,aAAa;QAC1B,IAAA,CAAA,OAAO,GAAG,WAAW;QAOZ,IAAA,CAAA,WAAW,GAAG,EAAE;QAChB,IAAA,CAAA,SAAS,GAAa,EAAE;QACxB,IAAA,CAAA,UAAU,GAAG,SAAS;QACtB,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,KAAK,GAAG,EAAE;AACT,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAqB;AAClE,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAsB;QAE/C,IAAA,CAAA,QAAQ,GAAG,IAAI;AAIb,QAAA,IAAI,CAAC,oBAAoB,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC;IACvE;AAEO,IAAA,UAAU,CAAC,OAAO,EAAA;AACvB,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;IACzB;IAEA,OAAO,GAAA;QACL,IAAI,CAAC,oBAAoB,EAAE;IAC7B;IAEA,UAAU,GAAA;QACR,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;QAC3C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;IACxC;+GAnCW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAzBnB;;;;;;;;;;;;;;;;;;;;;AAqBT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,qUAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAIQ,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBA3BhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAAA,QAAA,EAClB;;;;;;;;;;;;;;;;;;;;;AAqBT,IAAA,CAAA,EAAA,UAAA,EAEW,KAAK,EAAA,MAAA,EAAA,CAAA,qUAAA,CAAA,EAAA;;sBAKlB;;sBAIA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;MCtBU,2BAA2B,CAAA;AAnBxC,IAAA,WAAA,GAAA;QAoBE,IAAA,CAAA,UAAU,GAAG,aAAa;QAC1B,IAAA,CAAA,OAAO,GAAG,WAAW;QAKZ,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,SAAS,GAAa,EAAE;QACxB,IAAA,CAAA,UAAU,GAAG,SAAS;QACtB,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,KAAK,GAAG,EAAE;AACT,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAW;AACxD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAY;AAUtC,IAAA;IApBC,IAAa,SAAS,CAAC,IAAY,EAAA;AACjC,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE;IACtD;IASA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU;QAClC,QAAQ,CAAC,MAAK;YACZ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;YAC3C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,QAAA,CAAC,EAAE,GAAG,CAAC,EAAE;IACX;+GArBW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjB1B;;;;;;;;;;;;;AAaT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,oLAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAIQ,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAnBvC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,EAAA,QAAA,EAC1B;;;;;;;;;;;;;AAaT,IAAA,CAAA,EAAA,UAAA,EAEW,KAAK,EAAA,MAAA,EAAA,CAAA,oLAAA,CAAA,EAAA;;sBAKlB;;sBAIA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;MCCU,eAAe,CAAA;IAI1B,IAAa,SAAS,CAAC,IAAY,EAAA;AACjC,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE;IACtD;AAYA,IAAA,WAAA,GAAA;QAjBA,IAAA,CAAA,UAAU,GAAG,aAAa;QAC1B,IAAA,CAAA,OAAO,GAAG,WAAW;QAMZ,IAAA,CAAA,SAAS,GAAa,EAAE;QACxB,IAAA,CAAA,MAAM,GAAG,SAAS;QAClB,IAAA,CAAA,UAAU,GAAG,SAAS;QACtB,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,IAAI,GAAG,KAAK;AACX,QAAA,IAAA,CAAA,SAAS,GAA0B,IAAI,YAAY,EAAW;AAC9D,QAAA,IAAA,CAAA,YAAY,GAAsB,IAAI,YAAY,EAAO;AACzD,QAAA,IAAA,CAAA,WAAW,GAAsB,IAAI,YAAY,EAAO;IAGlE;IACA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;IAC3B;IAEA,WAAW,CAAC,IAAI,EAAE,KAAK,EAAA;AACrB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9B;IAEA,UAAU,CAAC,KAAK,EAAE,MAAM,EAAA;QACtB,IAAI,IAAI,CAAC,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE;YACrC;QACF;aAAO,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,MAAM,KAAK,QAAQ,EAAE;YAC5C;QACF;AACA,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI;QACtB,KAAK,CAAC,eAAe,EAAE;IACzB;IAEA,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAA;AAC3B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,SAAS,KAAI;YAChE,OAAO,KAAK,KAAK,SAAS;AAC5B,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B;+GA5CW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAf,eAAe,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EACW,gBAAgB,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjCzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,o9DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAIQ,eAAe,EAAA,UAAA,EAAA,CAAA;kBAlC3B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,QAAA,EACZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BT,IAAA,CAAA,EAAA,UAAA,EAEW,KAAK,EAAA,MAAA,EAAA,CAAA,o9DAAA,CAAA,EAAA;;sBAGlB,SAAS;uBAAC,iBAAiB,EAAE,EAAC,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAC;;sBAGnE;;sBAIA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;MCKU,sBAAsB,CAAA;AAtDnC,IAAA,WAAA,GAAA;QAuDE,IAAA,CAAA,UAAU,GAAG,aAAa;QAC1B,IAAA,CAAA,OAAO,GAAG,WAAW;QACrB,IAAA,CAAA,UAAU,GAAU,EAAE;QACtB,IAAA,CAAA,YAAY,GAAG,KAAK;QACpB,IAAA,CAAA,UAAU,GAAG,KAAK;QAeT,IAAA,CAAA,WAAW,GAAG,EAAE;QAChB,IAAA,CAAA,SAAS,GAAa,EAAE;QAcxB,IAAA,CAAA,UAAU,GAAG,SAAS;QACtB,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,KAAK,GAAG,EAAE;AACT,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAU;AACvD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAW;QAEpC,IAAA,CAAA,QAAQ,GAAG,IAAI;AAqBhB,IAAA;IAvDC,IAAa,SAAS,CAAC,IAAY,EAAA;AACjC,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE;IACtD;IAEA,IAAa,UAAU,CAAC,GAAW,EAAA;AACjC,QAAA,IAAI,CAAC,WAAW,GAAG,GAAG;IACxB;AACA,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW;IACzB;IAKA,IAAa,SAAS,CAAC,IAAW,EAAA;AAChC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,EAAE,MAAM,GAAG,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ;AACnE,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,QAAQ;AACZ,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,IAAG;AAClB,YAAA,IAAG,IAAI,CAAC,OAAO,EAAE;AACf,gBAAA,QAAQ,GAAG,IAAI,CAAC,KAAK;YACvB;AACF,QAAA,CAAC,CAAC;AACF,QAAA,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC,UAAU;QACtC,IAAI,CAAC,YAAY,EAAE;IACrB;;AASO,IAAA,UAAU,CAAE,OAAO,EAAA;AACxB,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;IACzB;IAEA,QAAQ,GAAA;QACN,QAAQ,CAAC,MAAK;AACZ,YAAA,IAAI,IAAI,CAAC,UAAU,KAAK,WAAW,EAAE;AACnC,gBAAA,IAAI,CAAC,UAAU,GAAG,SAAS;YAC7B;YACA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;YAC3C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,QAAA,CAAC,EAAE,GAAG,CAAC,EAAE;IACX;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;QACtB,KAAK,CAAC,MAAK;AACT,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACzB,QAAA,CAAC,CAAC;IACJ;+GA7DW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApDrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgDT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,yUAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAIQ,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAtDlC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,QAAA,EACpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgDT,IAAA,CAAA,EAAA,UAAA,EAEW,KAAK,EAAA,MAAA,EAAA,CAAA,yUAAA,CAAA,EAAA;;sBASlB;;sBAKA;;sBAOA;;sBACA;;sBACA;;sBACA;;sBAaA;;sBACA;;sBACA;;sBACA;;;AChGH;;;;;;;;;;;;;;AAcE;MA4BW,0BAA0B,CAAA;AAtBvC,IAAA,WAAA,GAAA;QAuBE,IAAA,CAAA,KAAK,GAAU,EAAE;QACjB,IAAA,CAAA,UAAU,GAAG,aAAa;QAC1B,IAAA,CAAA,OAAO,GAAG,WAAW;QAKrB,IAAA,CAAA,WAAW,GAAa,EAAE;QAQjB,IAAA,CAAA,WAAW,GAAG,EAAE;QAChB,IAAA,CAAA,SAAS,GAAa,EAAE;QAIxB,IAAA,CAAA,UAAU,GAAG,SAAS;QACtB,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,KAAK,GAAG,EAAE;AACT,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAY;AACzD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAa;QAoCtC,IAAA,CAAA,QAAQ,GAAG,IAAI;AAIhB,IAAA;IA7DC,IAAa,SAAS,CAAC,IAAY,EAAA;AACjC,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE;IACtD;IAEA,IAAa,UAAU,CAAC,IAAI,EAAA;AAC1B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACvB,IAAI,CAAC,kBAAkB,EAAE;IAC3B;AACA,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW;IACzB;IAGA,IAAa,SAAS,CAAC,IAAc,EAAA;AACnC,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;IAChC;IAOA,kBAAkB,GAAA;AAChB,QAAA,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YAC7B;QACF;QACA,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,KAAI;YAC3B,IAAI,OAAO,GAAG,KAAK;YACnB,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,GAAG,KAAI;AAChC,gBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE;oBACrB,OAAO,GAAG,IAAI;gBAChB;AACF,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACxB,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,mBAAmB,CAAC,IAAc,EAAA;QAChC,MAAM,KAAK,GAAU,EAAE;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,IAAG;AACf,YAAA,KAAK,CAAC,IAAI,CAAE,EAAC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAC,CAAC;AACxC,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;IACpB;IAEA,cAAc,GAAA;QACZ,KAAK,CAAC,MAAK;AACT,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE;AACrB,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;gBACxB,IAAG,IAAI,CAAC,OAAO;oBAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACnD,YAAA,CAAC,CAAC;YACF,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;YAC5C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,QAAA,CAAC,CAAC;IACJ;AAGO,IAAA,UAAU,CAAC,OAAO,EAAA;AACvB,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;IACzB;+GAhEW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApBzB;;;;;;;;;;;;;;;;AAgBT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,0oBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAIQ,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAtBtC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,EAAA,QAAA,EACzB;;;;;;;;;;;;;;;;AAgBT,IAAA,CAAA,EAAA,UAAA,EAEW,KAAK,EAAA,MAAA,EAAA,CAAA,0oBAAA,CAAA,EAAA;;sBAMlB;;sBAKA;;sBAOA;;sBACA;;sBACA;;sBAGA;;sBACA;;sBACA;;sBACA;;;MCpCU,mBAAmB,CAAA;AAnBhC,IAAA,WAAA,GAAA;QAoBW,IAAA,CAAA,WAAW,GAAG,EAAE;QAEhB,IAAA,CAAA,SAAS,GAAG,IAAI;QAChB,IAAA,CAAA,cAAc,GAAG,KAAK;QACtB,IAAA,CAAA,SAAS,GAAG,GAAG;QACf,IAAA,CAAA,OAAO,GAAG,KAAK;AAEd,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,YAAY,EAAO;AAC/B,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAO;AAClC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAY;AAC5C,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAc;AACvC,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,YAAY,EAAiB;QAInD,IAAA,CAAA,KAAK,GAAa,EAAE;QACpB,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,OAAO,GAAG,KAAK;AAEP,QAAA,IAAA,CAAA,QAAQ,GAA8B,MAAK,EAAE,CAAC;AAC9C,QAAA,IAAA,CAAA,SAAS,GAAe,MAAK,EAAE,CAAC;AA2IzC,IAAA;AAzIC,IAAA,UAAU,CAAC,GAAQ,EAAA;QACjB,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;YACf;QACF;AACA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACtB,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC;YACrB;QACF;;AAEA,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChD;AAEA,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;IAC5B;IAEA,UAAU,GAAA;QACR,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE;IACxC;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;IACrB;AAEA,IAAA,UAAU,CAAC,KAAkB,EAAA;AAC3B,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;QACpB,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,eAAe,EAAE;QACxB;AACA,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAY,CAAC;IAChC;AAEA,IAAA,OAAO,CAAC,KAAqB,EAAA;QAC3B,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE;AACvD,QAAA,IAAI,CAAC,IAAI;YAAE;QACX,KAAK,CAAC,cAAc,EAAE;QACtB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,EAAE;IACnB;AAEA,IAAA,SAAS,CAAC,KAAoB,EAAA;QAC5B,IAAI,IAAI,CAAC,QAAQ;YAAE;AAEnB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,aAAa;AAC3C,QAAA,MAAM,OAAO,GAAG,KAAK,EAAE,KAAK,IAAI,EAAE;QAClC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE;AAEpC,QAAA,IAAI,GAAG,KAAK,WAAW,IAAI,CAAC,OAAO,EAAE;AACnC,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACrB,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,CAAC;YAClD;YACA;QACF;AAEA,QAAA,MAAM,cAAc,GAClB,GAAG,KAAK,OAAO;AACf,YAAA,GAAG,KAAK,GAAG;aACV,IAAI,CAAC,SAAS,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,CAAC;aACtC,IAAI,CAAC,SAAS,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,CAAC;QAEzC,IAAI,cAAc,EAAE;YAClB,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;YACvB,IAAI,CAAC,eAAe,EAAE;QACxB;IACF;IAEA,aAAa,CAAC,KAAa,EAAE,KAAa,EAAA;QACxC,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,KAAK,EAAE,cAAc,IAAI;AACzB,QAAA,KAAK,EAAE,eAAe,IAAI;QAE1B,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC;QACrD,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC7C,IAAI,CAAC,UAAU,EAAE;IACnB;IAEQ,eAAe,GAAA;AACrB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,aAAa;AAC3C,QAAA,MAAM,GAAG,GAAG,KAAK,EAAE,KAAK,IAAI,EAAE;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;AACxC,QAAA,IAAI,MAAM,CAAC,MAAM,EAAE;AACjB,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QACxB;QACA,IAAI,CAAC,UAAU,EAAE;IACnB;AAEQ,IAAA,SAAS,CAAC,MAAgB,EAAA;QAChC,MAAM,KAAK,GAAa,EAAE;AAC1B,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AAC1B,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE;AAC5B,YAAA,IAAI,CAAC,OAAO;gBAAE;AACd,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE;YAC1D,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC;AACrC,YAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;QACrB;AACA,QAAA,IAAI,KAAK,CAAC,MAAM,EAAE;YAChB,IAAI,CAAC,cAAc,EAAE;;YAErB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC;QACnE;IACF;IAEQ,cAAc,GAAA;QACpB,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACnB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;IAC/B;IAEQ,UAAU,GAAA;AAChB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,aAAa;AAC3C,QAAA,IAAI,KAAK;AAAE,YAAA,KAAK,CAAC,KAAK,GAAG,EAAE;IAC7B;AAEQ,IAAA,eAAe,CAAC,IAAY,EAAA;AAClC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE;;AAEpB,QAAA,OAAO;aACJ,KAAK,CAAC,SAAS;aACf,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;aACnB,MAAM,CAAC,OAAO,CAAC;IACpB;+GA/JW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,eAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,sBAAA,EAAA,aAAA,EAAA,SAAA,EAAA,4BAAA,EAAA,UAAA,EAAA,EAAA,cAAA,EAAA,qCAAA,EAAA,EAAA,SAAA,EAfnB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC;AAClD,gBAAA,KAAK,EAAE;AACR;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrBH,isCA0CA,EAAA,MAAA,EAAA,CAAA,k0EAAA,CAAA,EAAA,CAAA,CAAA;;4FDZa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAnB/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,SAAA,EAGhB;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,yBAAyB,CAAC;AAClD,4BAAA,KAAK,EAAE;AACR;qBACF,EAAA,IAAA,EACK;AACJ,wBAAA,KAAK,EAAE,qCAAqC;AAC5C,wBAAA,iBAAiB,EAAE,sBAAsB;AACzC,wBAAA,eAAe,EAAE,SAAS;AAC1B,wBAAA,8BAA8B,EAAE,UAAU;AAC3C,qBAAA,EAAA,UAAA,EACW,KAAK,EAAA,QAAA,EAAA,isCAAA,EAAA,MAAA,EAAA,CAAA,k0EAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;;AE5C3C;;;;;;;;;;;;;;AAcE;MAgCW,sBAAsB,CAAA;AA1BnC,IAAA,WAAA,GAAA;QA2BE,IAAA,CAAA,UAAU,GAAG,aAAa;QAC1B,IAAA,CAAA,OAAO,GAAG,WAAW;QAMrB,IAAA,CAAA,WAAW,GAAQ,EAAE;QAWZ,IAAA,CAAA,WAAW,GAAG,EAAE;QAChB,IAAA,CAAA,SAAS,GAAa,EAAE;QACxB,IAAA,CAAA,UAAU,GAAG,SAAS;QACtB,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,KAAK,GAAG,EAAE;AACT,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAU;AACvD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAW;AAcpC,QAAA,IAAA,CAAA,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC;QAS/D,IAAA,CAAA,QAAQ,GAAG,IAAI;AAKhB,IAAA;IAlDC,IAAa,SAAS,CAAC,IAAY,EAAA;AACjC,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE;IACtD;IAGA,IACI,UAAU,CAAC,GAAG,EAAA;AAChB,QAAA,IAAI,CAAC,WAAW,GAAG,GAAG;IACxB;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,WAAW;AACpE,QAAA,OAAO,GAAG;IACZ;AAUA,IAAA,OAAO,CAAC,KAAU,EAAA;QAChB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE;QACpC,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,OAAO,EAAE;YAClC,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;AACvB,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,MAAqB;YAC3C,OAAO,CAAC,IAAI,EAAE;YACd,OAAO,CAAC,KAAK,EAAE;QACjB;QACA,IAAI,CAAC,mBAAmB,EAAE;IAC5B;IAGA,UAAU,GAAA;AACR,QAAA,IAAG,IAAI,CAAC,WAAW,EAAE;AACnB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/D;QACA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;QAC3C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;IACxC;AAGO,IAAA,UAAU,CAAC,OAAO,EAAA;AACvB,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;IACzB;+GAnDW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAxBrB;;;;;;;;;;;;;;;;;;;;AAoBT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAIQ,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBA1BlC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EAAA,QAAA,EACrB;;;;;;;;;;;;;;;;;;;;AAoBT,IAAA,CAAA,EAAA,UAAA,EAEW,KAAK,EAAA;;sBAKlB;;sBAMA,KAAK;uBAAC,YAAY;;sBAUlB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;MChEU,iBAAiB,CAAA;AAE1B,IAAA,gBAAgB,CAAC,QAAa,EAAA;QAC1B,MAAM,MAAM,GAAG,EAAE;AACjB,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACxB,YAAA,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI;QACzB;AACA,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;AAChC,YAAA,MAAM,CAAC,cAAc,CAAC,GAAG,IAAI;QACjC;AACA,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;AAC/B,QAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE;IAC9B;AAEA,IAAA,aAAa,CAAC,iBAAiB,EAAA;QAC3B,IAAI,CAAC,iBAAiB,EAAE;AACpB,YAAA,OAAO,SAAS;QACpB;QACA,MAAM,MAAM,GAAG,EAAE;AACjB,QAAA,iBAAiB,CAAC,OAAO,CAAC,CAAC,GAAW,KAAI;YACtC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;AAC3B,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACnB,gBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC;AAC1B,gBAAA,MAAM,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAC,CAAC;YACxC;AAAO,iBAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC1B,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/B,gBAAA,MAAM,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAC,CAAC;YAC1C;iBAAO;;YAEP;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,MAAM;IACjB;AAEA,IAAA,iBAAiB,CAAC,iBAAiB,EAAA;QAC/B,MAAM,GAAG,GAAG,EAAE;QACd,IAAI,CAAC,iBAAiB,EAAE;AACpB,YAAA,OAAO,GAAG;QACd;AACA,QAAA,iBAAiB,CAAC,OAAO,CAAC,CAAC,KAAU,KAAI;YACrC,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,IAAI,EAAE;gBAC1B,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC;YAC5B;iBAAO;AACH,gBAAA,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC;YAC1C;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,GAAG;IACd;AAEA,IAAA,eAAe,CAAC,UAAU,EAAA;QACtB,MAAM,gBAAgB,GAAG,EAAE;QAC3B,IAAI,CAAC,UAAU,EAAE;AACb,YAAA,OAAO,gBAAgB;QAC3B;AACA,QAAA,UAAU,CAAC,OAAO,CAAC,CAAC,GAAW,KAAI;YAC/B,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;AAC3B,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACnB,gBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC;gBAC1B,gBAAgB,CAAC,IAAI,CAAC;AAClB,oBAAA,GAAG,EAAE,IAAI;AACT,oBAAA,IAAI,EAAE;AACT,iBAAA,CAAC;YACN;AAAO,iBAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC1B,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC/B,gBAAgB,CAAC,IAAI,CAAC;AAClB,oBAAA,GAAG,EAAE,KAAK;AACV,oBAAA,IAAI,EAAE;AACT,iBAAA,CAAC;YACN;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,gBAAgB;IAC3B;AAEA,IAAA,kBAAkB,CAAC,UAAU,EAAA;QACzB,IAAI,OAAO,GAAG,KAAK;QACnB,IAAI,CAAC,UAAU,EAAE;AACb,YAAA,OAAO,OAAO;QAClB;AACA,QAAA,UAAU,CAAC,OAAO,CAAC,CAAC,KAAU,KAAI;YAC9B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;gBAC/D,OAAO,GAAG,IAAI;gBACd;YACJ;iBAAO,IAAI,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE;gBAC/B,OAAO,GAAG,IAAI;gBACd;YACJ;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,OAAO;IAClB;AAEA,IAAA,WAAW,CAAC,IAAI,EAAA;AACZ,QAAA,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK;IACvE;AAEA,IAAA,oBAAoB,CAAC,OAAO,EAAA;AACxB,QAAA,OAAO,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACjC;AAEA,IAAA,UAAU,CAAC,IAAI,EAAA;QACX,MAAM,QAAQ,GAAG,6EAA6E;AAC9F,QAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IAChD;AAEA,IAAA,UAAU,CAAC,GAAG,EAAA;AACV,QAAA,IAAI;AACA,YAAA,IAAI,GAAG,CAAC,GAAG,CAAC;AACZ,YAAA,OAAO,IAAI;QACf;QAAE,OAAO,CAAC,EAAE;AACR,YAAA,OAAO,KAAK;QAChB;IACJ;AAEA,IAAA,WAAW,CAAC,GAAG,EAAA;AACX,QAAA,IAAI;YACA,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;YAEtC,OAAO,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,EAAE;QAC9D;QAAE,OAAO,CAAC,EAAE;AACR,YAAA,OAAO,KAAK;QAChB;IACJ;AAEA,IAAA,cAAc,CAAC,GAAG,EAAA;AACd,QAAA,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE;AAClB,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,IAAE,CAAC,EAAE;AACjD,gBAAA,OAAO,GAAG,CAAC,IAAI,CAAC;YACpB;iBAAO;gBACH,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,IAAE,CAAC,EAAE;AAC7D,oBAAA,OAAO,GAAG,CAAC,IAAI,CAAC;gBACpB;qBAAO,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE;AACzB,oBAAA,OAAO,GAAG,CAAC,IAAI,CAAC;gBACpB;qBAAO;oBACH,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE;AAC/B,wBAAA,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC1C,wBAAA,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,IAAE,CAAC,EAAE;AAClC,4BAAA,OAAO,GAAG,CAAC,IAAI,CAAC;wBACpB;oBACJ;gBACJ;YACJ;QACJ;AACA,QAAA,OAAO,GAAG;IACd;+GAhJS,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFd,MAAM,EAAA,CAAA,CAAA;;4FAET,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACLD;;;;;;;;;;;;;;AAcE;MAaW,iCAAiC,CAAA;AA0C5C,IAAA,WAAA,CAAoB,iBAAoC,EAAA;QAApC,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QAxC5B,IAAA,CAAA,YAAY,GAAG,IAAI;QACnB,IAAA,CAAA,WAAW,GAAG,IAAI;QAClB,IAAA,CAAA,YAAY,GAAG,IAAI;QACnB,IAAA,CAAA,QAAQ,GAAG,IAAI;QACf,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,cAAc,GAAG,KAAK;QACtB,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,WAAW,GAAG,KAAK;QAKnB,IAAA,CAAA,SAAS,GAAa,EAAE;QACxB,IAAA,CAAA,UAAU,GAAG,SAAS;QACtB,IAAA,CAAA,WAAW,GAAG,EAAE;QAChB,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,KAAK,GAAG,EAAE;AACT,QAAA,IAAA,CAAA,gBAAgB,GAAsB,IAAI,YAAY,EAAO;AAC7D,QAAA,IAAA,CAAA,UAAU,GAAyB,IAAI,YAAY,EAAU;AAC7D,QAAA,IAAA,CAAA,aAAa,GAAyB,IAAI,YAAY,EAAU;AAChE,QAAA,IAAA,CAAA,cAAc,GAAyB,IAAI,YAAY,EAAU;AACjE,QAAA,IAAA,CAAA,cAAc,GAAyB,IAAI,YAAY,EAAU;AAC3E,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAQ;QAEjC,IAAA,CAAA,iBAAiB,GAAG,UAAU;QAC9B,IAAA,CAAA,gBAAgB,GAAG,SAAS;QAC5B,IAAA,CAAA,iBAAiB,GAAG,WAAW;QAC/B,IAAA,CAAA,aAAa,GAAG,MAAM;AAEtB,QAAA,IAAA,CAAA,qBAAqB,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,EAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC;QAEvF,IAAA,CAAA,MAAM,GAAG,EAAE;AAEX,QAAA,IAAA,CAAA,KAAK,GAAG;AACN,YAAA,EAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAC;AACnC,YAAA,EAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAC;AAClC,YAAA,EAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAC;AACnC,YAAA,EAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS;SAC/B;QAYD,IAAA,CAAA,eAAe,GAAG,KAAK;IATvB;IACA,QAAQ,GAAA;IAER;IAEA,SAAS,GAAA;QACP,IAAI,CAAC,qBAAqB,EAAE;IAC9B;IAIA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC;QAClE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IACvC;IAEA,MAAM,GAAA;QACJ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QACrC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QACvC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IACzC;AAEA,IAAA,IAAI,SAAS,GAAA;QACX,IAAI,SAAS,GAAG,aAAa;QAC7B,IAAI,CAAC,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,EAAE;YACpF,SAAS,GAAG,gBAAgB;QAC9B;aAAO,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE;YAC1F,SAAS,GAAG,cAAc;QAC5B;AACA,QAAA,OAAO,SAAS;IAClB;IAEA,aAAa,GAAA;AACX,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,QAAQ;AACnE,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,OAAO;AAChE,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,QAAQ;AACnE,QAAA,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI;QAEzD,IAAI,CAAC,KAAK,GAAG;AACX,YAAA,EAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAC;AAClC,YAAA,EAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI;SAC1B;AACD,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAC,CAAC;QACnD;AACA,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAC,CAAC;QACrD;QACA,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA,IAAA,mBAAmB,CAAC,YAAY,GAAG,EAAE,EAAE,gBAAuB,EAAA;QAC5D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAC1B,MAAM,kBAAkB,GAAQ,gBAAgB,EAAE,IAAI,CAAC,CAAC,KAAK,KAAI;AAC/D,gBAAA,IAAI,UAAU,GAAG,KAAK,CAAC,YAAY;gBACnC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE;oBAC5C,UAAU,IAAI,GAAG,GAAG,KAAK,EAAE,MAAM,EAAE,eAAe;gBACpD;gBACA,OAAO,UAAU,KAAK,YAAY,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG;AACrD,YAAA,CAAC,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,kBAAkB;AAC5C,QAAA,CAAC,CAAC;IACJ;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;QAChB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AAC5B,YAAA,OAAO,IAAI;QACb;QACA,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AAC9C,YAAA,IAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AACzB,gBAAA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI;YAChC;QACF;QACA,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAC5C,YAAA,IAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACxB,gBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI;YAC/B;QACF;QACA,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AAC9C,YAAA,IAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AACzB,gBAAA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI;YAChC;QACF;QACA,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACtC,YAAA,IAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAIC,OAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACvC,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI;YAC5B;QACF;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IAC7B;AAEA,IAAA,aAAa,CAAC,IAAS,EAAA;AACrB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC7B,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AAC3B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;AACrB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;IAC/B;+GA7IW,iCAAiC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iCAAiC,ivBC3B9C,u+CA2CA,EAAA,MAAA,EAAA,CAAA,kSAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,oBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,OAAA,EAAA,cAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,sBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,YAAA,EAAA,UAAA,EAAA,aAAA,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDhBa,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAN7C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iCAAiC,cAG/B,KAAK,EAAA,QAAA,EAAA,u+CAAA,EAAA,MAAA,EAAA,CAAA,kSAAA,CAAA,EAAA;;sBAGlB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;AElDH;;;;;;;;;;;;;;AAcE;MAIW,SAAS,GAAG,IAAI,cAAc,CAAS,WAAW;MAClD,cAAc,GAAG,IAAI,cAAc,CAAS,gBAAgB;MAC5D,kBAAkB,GAAG,IAAI,cAAc,CAAS,oBAAoB;;ACpBjF;;;;;;;;;;;;;;AAcE;MAYW,mBAAmB,CAAA;IAM5B,WAAA,CACY,MAAc,EACS,UAAe,EAAA;QADtC,IAAA,CAAA,MAAM,GAAN,MAAM;QACiB,IAAA,CAAA,UAAU,GAAV,UAAU;QAPpC,IAAA,CAAA,OAAO,GAAG,EAAE;QACrB,IAAA,CAAA,IAAI,GAAG,IAAI;QACX,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,GAAG,GAAG,EAAE;IAMR;IAEA,QAAQ,GAAA;QACJ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AACnC,YAAA,IAAI,KAAK,YAAY,aAAa,EAAE;AAChC,gBAAA,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACtC;AACJ,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,UAAU,CAAC,KAAU,EAAA;QACjB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ;IAClC;AAvBS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,wCAQhB,cAAc,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AARjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,4GC1BhC,wyCA8BA,EAAA,MAAA,EAAA,CAAA,siMAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDJa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,cAGf,KAAK,EAAA,QAAA,EAAA,wyCAAA,EAAA,MAAA,EAAA,CAAA,siMAAA,CAAA,EAAA;;0BAUZ,MAAM;2BAAC,cAAc;;sBAPzB;;;MEJQ,sBAAsB,CAAA;AAnBnC,IAAA,WAAA,GAAA;QAoBI,IAAA,CAAA,UAAU,GAAG,aAAa;QAC1B,IAAA,CAAA,OAAO,GAAG,WAAW;QAKZ,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,WAAW,GAAG,EAAE;QAChB,IAAA,CAAA,SAAS,GAAa,EAAE;QACxB,IAAA,CAAA,UAAU,GAAG,SAAS;QACtB,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,KAAK,GAAG,EAAE;QACV,IAAA,CAAA,YAAY,GAAG,EAAE;QACjB,IAAA,CAAA,QAAQ,GAAG,KAAK;AACf,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAU;AACvD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAW;AAMpC,QAAA,IAAA,CAAA,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC;AAKlE,IAAA;IAxBG,IAAa,SAAS,CAAC,IAAY,EAAA;AAC/B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE;IACxD;IAYA,OAAO,GAAA;QACH,IAAI,CAAC,mBAAmB,EAAE;IAC9B;IAGA,UAAU,GAAA;QACN,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;QAC3C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;IAC1C;+GA1BS,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjBrB;;;;;;;;;;;;;AAaP,MAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,iCAAA,EAAA,wBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAIM,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAnBlC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,QAAA,EACpB;;;;;;;;;;;;;AAaP,MAAA,CAAA,EAAA,UAAA,EAES,KAAK,EAAA,MAAA,EAAA,CAAA,iCAAA,EAAA,wBAAA,CAAA,EAAA;;sBAKhB;;sBAIA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;ACtCL;;;;;;;;;;;;;;AAcE;MAEW,YAAY,CAAA;AAMrB,IAAA,WAAA,CAAY,KAAK,GAAG,EAAE,EAAE,KAAK,GAAG,EAAE,EAAE,QAAQ,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,EAAA;AAC3D,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;IAC1B;AACH;;ACzBD;AACA,MAAM,WAAW,GAAG;AAChB,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,aAAa,EAAE,KAAK;AACpB,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,mBAAmB,EAAE,EAAE;AACvB,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,OAAO,EAAE,EAAE;AACX,IAAA,IAAI,EAAE,EAAE;CACX;MAGY,aAAa,CAAA;AAMtB,IAAA,WAAA,CAAmB,MAAiB,EAAA;QAAjB,IAAA,CAAA,MAAM,GAAN,MAAM;;AAJjB,QAAA,IAAA,CAAA,WAAW,GAAG,cAAc,CAAC,KAAK;;AAElC,QAAA,IAAA,CAAA,OAAO,GAAG,EAAC,GAAG,WAAW,EAAC;IAGlC;;IAGO,OAAO,CAAC,MAAc,EAAE,aAAsB,EAAA;AACjD,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM;AAC5B,QAAA,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,aAAa;IAC9C;;AAGO,IAAA,MAAM,CAAC,KAAa,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK;IAC9B;;AAGO,IAAA,sBAAsB,CAAC,mBAA2B,EAAA;AACrD,QAAA,IAAI,CAAC,OAAO,CAAC,mBAAmB,GAAG,mBAAmB;IAC1D;;AAGO,IAAA,YAAY,CAAC,SAAiB,EAAA;AACjC,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,SAAS;IACtC;;AAGO,IAAA,QAAQ,CAAC,KAAa,EAAA;AACzB,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK;IAC9B;AAEO,IAAA,mBAAmB,CAAC,GAAW,EAAA;AAClC,QAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,gBAAgB,EAAE,GAAG,EAAC,CAAC;IAC9E;;AAGA,IAAA,cAAc,CAAC,KAAa,EAAA;AACxB,QAAA,QAAQ,KAAK,CAAC,WAAW,EAAE;YACvB,KAAK,OAAO,EAAE;AACV,gBAAA,IAAI,CAAC,WAAW,GAAG,cAAc,CAAC,KAAK;gBACvC;YACJ;YAEA,KAAK,OAAO,EAAE;AACV,gBAAA,IAAI,CAAC,WAAW,GAAG,cAAc,CAAC,KAAK;gBACvC;YACJ;YAEA,KAAK,MAAM,EAAE;AACT,gBAAA,IAAI,CAAC,WAAW,GAAG,cAAc,CAAC,IAAI;gBACtC;YACJ;YAEA,KAAK,KAAK,EAAE;AACR,gBAAA,IAAI,CAAC,WAAW,GAAG,cAAc,CAAC,GAAG;gBACrC;YACJ;YAEA,KAAK,MAAM,EAAE;AACT,gBAAA,IAAI,CAAC,WAAW,GAAG,cAAc,CAAC,IAAI;gBACtC;YACJ;YAEA,KAAK,KAAK,EAAE;AACR,gBAAA,IAAI,CAAC,WAAW,GAAG,cAAc,CAAC,GAAG;gBACrC;YACJ;YAEA,KAAK,OAAO,EAAE;AACV,gBAAA,IAAI,CAAC,WAAW,GAAG,cAAc,CAAC,KAAK;gBACvC;YACJ;;AAGJ,QAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAC,CAAC;IACvD;;AAGO,IAAA,cAAc,CAAC,KAAa,EAAA;AAC/B,QAAA,QAAQ,KAAK,CAAC,WAAW,EAAE;YACvB,KAAK,OAAO,EAAE;AACV,gBAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,cAAc,CAAC,KAAK,EAAC,CAAC;gBACzF;YACJ;YAEA,KAAK,OAAO,EAAE;AACV,gBAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,cAAc,CAAC,KAAK,EAAC,CAAC;gBACzF;YACJ;YAEA,KAAK,MAAM,EAAE;AACT,gBAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,cAAc,CAAC,IAAI,EAAC,CAAC;gBACxF;YACJ;YAEA,KAAK,KAAK,EAAE;AACR,gBAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,cAAc,CAAC,GAAG,EAAC,CAAC;gBACvF;YACJ;YAEA,KAAK,MAAM,EAAE;AACT,gBAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,cAAc,CAAC,IAAI,EAAC,CAAC;gBACxF;YACJ;YAEA,KAAK,KAAK,EAAE;AACR,gBAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,cAAc,CAAC,GAAG,EAAC,CAAC;gBACvF;YACJ;YAEA,KAAK,OAAO,EAAE;AACV,gBAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,cAAc,CAAC,KAAK,EAAC,CAAC;gBACzF;YACJ;;IAER;;IAGO,KAAK,CAAC,OAAe,EAAE,IAAU,EAAA;;QAEpC,MAAM,IAAI,GAAG,EAAC,GAAG,IAAI,CAAC,OAAO,EAAC;QAE9B,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC;IACpC;;IAGO,KAAK,CAAC,OAAe,EAAE,IAAU,EAAA;;QAEpC,MAAM,IAAI,GAAG,EAAC,GAAG,IAAI,CAAC,OAAO,EAAC;QAE9B,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC;IACpC;;IAGO,IAAI,CAAC,OAAe,EAAE,IAAU,EAAA;;QAEnC,MAAM,IAAI,GAAG,EAAC,GAAG,IAAI,CAAC,OAAO,EAAC;QAE9B,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;IACnC;;IAGO,IAAI,CAAC,OAAe,EAAE,IAAU,EAAA;;QAEnC,MAAM,IAAI,GAAG,EAAC,GAAG,IAAI,CAAC,OAAO,EAAC;QAE9B,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;IACnC;;IAGO,GAAG,CAAC,OAAe,EAAE,IAAU,EAAA;;QAElC,MAAM,IAAI,GAAG,EAAC,GAAG,IAAI,CAAC,OAAO,EAAC;QAE9B,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;IACnC;;IAGO,KAAK,CAAC,OAAe,EAAE,IAAU,EAAA;;QAEpC,MAAM,IAAI,GAAG,EAAC,GAAG,IAAI,CAAC,OAAO,EAAC;QAE9B,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC;IACpC;IAEQ,YAAY,GAAA;AAChB,QAAA,IAAI,CAAC,OAAO,GAAG,WAAW;IAC9B;;AAGQ,IAAA,iBAAiB,CAAC,IAAS,EAAE,OAAe,EAAE,IAAU,EAAA;AAC5D,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;QACtB,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QACpB;IACJ;+GAzLS,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cADD,MAAM,EAAA,CAAA,CAAA;;4FAClB,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;ACfhC;;;;;;;;;;;;;;AAcE;AAOF,MAAM,WAAW,GAAG,OAAO;AAE3B,MAAM,oBAAoB,GAAG,eAAe;MAG/B,cAAc,CAAA;AAEvB,IAAA,WAAA,CAAoB,MAAqB,EAAA;QAArB,IAAA,CAAA,MAAM,GAAN,MAAM;QAE1B,IAAA,CAAA,oBAAoB,GAAG,KAAK;AACpB,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,OAAO,EAAgB;AAC1C,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAExB,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,OAAO,EAAW;AACpD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE;AAE/C,QAAA,IAAA,CAAA,oBAAoB,GAAG;AAC3B,YAAA,eAAe,EAAE,EAAE;SACtB;AACO,QAAA,IAAA,CAAA,iBAAiB,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,WAAW,CAAC;IAZ5D;AAc5C,IAAA,IAAI,CAAC,IAAkB,EAAA;;QAEnB,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,WAAW,EAAE;;AAE7F,YAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;;gBAEjE,MAAM,mBAAmB,GAAG,cAAc,CAAC,OAAO,CAAC,oBAAoB,CAAC;AAExE,gBAAA,IAAI,aAAa;AAEjB,gBAAA,IAAI,mBAAmB,KAAK,SAAS,IAAI,mBAAmB,KAAK,IAAI,IAAI,mBAAmB,KAAK,EAAE,EAAE;AACjG,oBAAA,aAAa,GAAG,IAAI,CAAC,oBAAoB;gBAC7C;qBAAO;AACH,oBAAA,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC;gBACnD;AACA,gBAAA,MAAM,cAAc,GAAG;oBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,oBAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;iBACxB;AACD,gBAAA,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC;AAClD,gBAAA,cAAc,CAAC,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YAC/E;QACJ;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QACpB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,aAAA,EAAgB,IAAI,CAAC,KAAK,CAAA,CAAA,EAAI,IAAI,CAAC,KAAK,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAC,OAAO,CAAA,CAAA,CAAG,CAAC;QAC9F,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC;IAC7D;+GA7CS,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAQ,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cADF,MAAM,EAAA,CAAA,CAAA;;4FAClB,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;ACzBhC;;;;;;;;;;;;;;AAcE;AAUF,MAAMC,UAAQ,GAAG;AACb,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,iBAAiB,EAAE,EAAE;AACrB,IAAA,UAAU,EAAE,IAAI;AAChB,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,UAAU,EAAE,SAAS;AACrB,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,MAAM,EAAE,WAAW;AACnB,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,oBAAoB,EAAE,KAAK;AAC3B,IAAA,MAAM,EAAE;AACJ,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,MAAM,EAAE;AACJ,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,MAAM,EAAE;AACX;AACJ,KAAA;AACD,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,IAAI,EAAE,EAAE;CACX;MAKqB,oBAAoB,CAAA;IA0BtC,WAAA,CAAsB,WAAwB,EAAY,cAA8B,EAAA;QAAlE,IAAA,CAAA,WAAW,GAAX,WAAW;QAAyB,IAAA,CAAA,cAAc,GAAd,cAAc;QAxBxE,IAAA,CAAA,IAAI,GAAG,UAAU;QACjB,IAAA,CAAA,QAAQ,GAAQ,EAAE;QAClB,IAAA,CAAA,WAAW,GAAQ,EAAE;AACrB,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,eAAe,CAAM,EAAE,CAAC;QAC7C,IAAA,CAAA,kBAAkB,GAAG,KAAK;AAC1B,QAAA,IAAA,CAAA,IAAI,GAAGA,UAAQ,CAAC,IAAI;AACpB,QAAA,IAAA,CAAA,OAAO,GAAGA,UAAQ,CAAC,OAAO;QAC1B,IAAA,CAAA,WAAW,GAAU,EAAE;QACvB,IAAA,CAAA,YAAY,GAAa,EAAE;QAC3B,IAAA,CAAA,YAAY,GAAkB,IAAI;AAClC,QAAA,IAAA,CAAA,QAAQ,GAAGA,UAAQ,CAAC,QAAQ;AAC5B,QAAA,IAAA,CAAA,IAAI,GAAGA,UAAQ,CAAC,IAAI;QAEpB,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,kBAAkB,GAAG,KAAK;AAEnB,QAAA,IAAA,CAAA,iBAAiB,GAAQ;AAC5B,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,OAAO,EAAE;SACZ;QAGG,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC;IACjD;;IASO,aAAa,GAAA;QAChB,OAAO,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,EAAE,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;IACzF;AAEO,IAAA,mBAAmB,CAAC,WAAgB,EAAA;QACvC,IAAI,CAAC,YAAY,GAAG,WAAW,EAAE,YAAY,IAAI,EAAE;AACnD,QAAA,IAAI,CAAC,YAAY,GAAG,WAAW,EAAE,WAAW,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,IAAI;IACjF;IAEO,qBAAqB,GAAA;AACxB,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;IAC5B;IAUO,GAAG,GAAA;QACN,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC;QACjD,IAAI,GAAG,EAAE;YACL,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QACnC;aAAO;AACH,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAC,GAAGA,UAAQ,EAAC;AAC7B,YAAA,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxE;QACA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC3C;AAEO,IAAA,GAAG,CAAC,IAAS,EAAA;AAChB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC3C;IAEO,OAAO,GAAA;QACV,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC;AACvD,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAC;QAC7D,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC3C;IAEO,cAAc,GAAA;AACjB,QAAA,MAAM,OAAO,GAAQ;AACjB,YAAA,OAAO,EAAE;AACL,gBAAA,MAAM,EAAE,GAAG;AACd,aAAA;AACD,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,YAAY,EAAE,MAAe;SAChC;AACD,QAAA,OAAO,OAAO;IAClB;IAEO,YAAY,CAAC,IAAY,EAAE,GAAW,EAAA;AACzC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE;AAC/B,QAAA,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE;AAC7B,QAAA,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE;YACnD,IAAI,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,uBAAuB,CACxB;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;YACrC,OAAO,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;QAC7D;aAAO;YACH,OAAO,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,UAAU,CAAC;QACvD;IACJ;+GA3GkB,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAT,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAU,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAF1B,MAAM,EAAA,CAAA,CAAA;;4FAEA,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHzC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;AClDD;;;;;;;;;;;;;;AAcE;MAYW,gBAAgB,GAAG,IAAI,cAAc,CAAuB,kBAAkB;AAE3F,MAAM,QAAQ,GAAG;AACb,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,UAAU,EAAE,IAAI;AAChB,IAAA,iBAAiB,EAAE,EAAE;AACrB,IAAA,WAAW,EAAE;AACT,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,aAAa,EAAE;AAClB,KAAA;AACD,IAAA,oBAAoB,EAAE,EAAE;AACxB,IAAA,UAAU,EAAE,IAAI;AAChB,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,UAAU,EAAE,SAAS;AACrB,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,MAAM,EAAE,WAAW;AACnB,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,oBAAoB,EAAE,KAAK;AAC3B,IAAA,MAAM,EAAE;AACJ,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,MAAM,EAAE;AACJ,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,MAAM,EAAE;AACX;AACJ,KAAA;AACD,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,IAAI,EAAE,EAAE;CACX;AAED,MAAM,oBAAoB,GAAQ;AAC9B,IAAA,MAAM,EAAE;AACN,QAAA,IAAI,EAAE;AACJ,YAAA,aAAa,EAAE;gBACb,CAAA,EAAG,MAAM,CAAC,MAAM,CAAA,eAAA;AACjB,aAAA;AACD,YAAA,MAAM,EAAE;AACT;AACF,KAAA;AACD,IAAA,aAAa,EAAE;AACb,QAAA,IAAI,EAAE;AACJ,YAAA,aAAa,EAAE;gBACb,CAAA,EAAG,MAAM,CAAC,MAAM,CAAA,eAAA;AACjB,aAAA;AACD,YAAA,MAAM,EAAE;AACT;AACF,KAAA;AACD,IAAA,iBAAiB,EAAE;AACjB,QAAA,IAAI,EAAE;AACJ,YAAA,aAAa,EAAE;gBACb,CAAA,EAAG,MAAM,CAAC,MAAM,CAAA,mBAAA;AACjB,aAAA;AACD,YAAA,MAAM,EAAE;AACT;AACF;CACF;AAKG,MAAO,eAAgB,SAAQ,oBAAoB,CAAA;IAIrD,WAAA,CAAqB,WAAwB,EAAW,cAA8B,EAAA;AAClF,QAAA,KAAK,CAAC,WAAW,EAAE,cAAc,CAAC;QADjB,IAAA,CAAA,WAAW,GAAX,WAAW;QAAwB,IAAA,CAAA,cAAc,GAAd,cAAc;QAF7D,IAAA,CAAA,kBAAkB,GAAG,IAAI;IAIlC;IAEA,IAAI,GAAA;QACA,IAAI,CAAC,GAAG,EAAE;QACV,IAAI,CAAC,OAAO,EAAE;AAEd,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI;AACpF,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO;AAChG,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YAAE,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB;QAE5I,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE;YAC3D,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QAC9D;AAEA,QAAA,OAAO,OAAO,CAAC,OAAO,EAAE;IAC5B;IAES,YAAY,GAAA;;IAErB;IAES,UAAU,GAAA;AACf,QAAA,MAAM,YAAY,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC;AACzD,QAAA,OAAO,YAAY;IACvB;IAES,cAAc,CAAC,IAAY,EAAE,GAAW,EAAA;QAC7C,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACjD,QAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;AAAE,YAAA,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1D,QAAA,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;AAAE,YAAA,GAAG,GAAG,UAAU,GAAG,GAAG;QACrF,MAAM,OAAO,GAAG,GAAG,GAAG,iDAAiD,GAAG,IAAI,CAAC,kBAAkB;AACjG,QAAA,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAQ,KAAI;AACrE,YAAA,MAAM,8BAA8B,GAAG,GAAG,EAAE,OAAO;QACvD,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAS,KAAI;AACpB,YAAA,IAAI;AACA,gBAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,oBAAA,IAAI,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,2BAA2B,GAAG,IAAI,CAAC,KAAK,CACzC;AACD,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;gBACvC;qBAAO;AACH,oBAAA,IAAI,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,EAAE;wBAC3C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW;AACxC,wBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;wBACnC,IAAI,KAAK,GAAG,KAAK;wBACjB,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,CAAC,EAAE;AAC3C,4BAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC3D,gCAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,EAAE;oCAC7C,KAAK,GAAG,IAAI;oCACZ,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI;oCAC5C,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG;oCAC1C;gCACJ;4BACJ;wBACJ;wBACA,IAAI,CAAC,KAAK,EAAE;4BACR,IAAI,SAAS,GAAG,KAAK;AACrB,4BAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe;AAAE,gCAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,GAAG,EAAE;4BACtE,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,KAAK,CAAC;gCAAE,SAAS,GAAG,IAAI;AACjE,4BAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC;AAC/B,gCAAA,IAAI,EAAE,IAAI;AACV,gCAAA,GAAG,EAAE,GAAG;AACR,gCAAA,OAAO,EAAE;AACZ,6BAAA,CAAC;wBACN;AACA,wBAAA,IAAI,CAAC,QAAQ,CAAC,sBAAsB,GAAG,GAAG;AAC1C,wBAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;oBAE3B;yBAAO;AACL,wBAAA,IAAI,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,2BAA2B,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CACnD;AACD,wBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;oBACvC;gBACJ;YACJ;YAAE,OAAO,CAAC,EAAE;AACR,gBAAA,IAAI,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,2BAA2B,GAAG,CAAC,CAChC;AACD,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;YACzC;AACJ,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAG;AACX,YAAA,IAAI,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,2BAA2B,GAAG,GAAG,CAClC;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,QAAA,CAAC,CAAC;IACN;AAEO,IAAA,eAAe,CAAC,GAAW,EAAA;QAC9B,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACjD,QAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;AAAE,YAAA,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1D,QAAA,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;AAAE,YAAA,GAAG,GAAG,UAAU,GAAG,GAAG;AACrF,QAAA,MAAM,OAAO,GAAG,GAAG,GAAG,sDAAsD;QAC5E,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO;AAC5C,aAAA,IAAI,CACD,GAAG,CAAC,CAAC,IAAS,KAAI;AACd,YAAA,IAAI;AACA,gBAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACZ,oBAAA,IAAI,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,2BAA2B,GAAG,IAAI,CAAC,KAAK,CACzC;AACD,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;gBACzC;qBAAO;oBACH,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW;AACxC,oBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,oBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;oBACtD,MAAM,cAAc,GAAG,CAAA,YAAA,EAAe,IAAI,CAAC,IAAI,EAAE,OAAO,CAAA,CAAE;oBAC1D,YAAY,CAAC,OAAO,CAAC,yBAAyB,EAAE,IAAI,CAAC,UAAU,CAAC;AAChE,oBAAA,YAAY,CAAC,OAAO,CAAC,cAAc,EAAE,cAAc,CAAC;oBACpD,IAAI,CAAC,OAAO,EAAE;gBAClB;YACJ;YAAE,OAAO,CAAC,EAAE;AACR,gBAAA,IAAI,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,2BAA2B,GAAG,IAAI,CACnC;AACD,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;YACzC;AACJ,QAAA,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,GAAQ,KAAI;AACpB,YAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB;YACvC,IAAI,CAAC,qBAAqB,EAAE;AAC5B,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,eAAA,CAAiB,EACjB,CAAA,sCAAA,EAAyC,GAAG,EAAE,OAAO,CAAA,CAAE,CAC1D;YACD,MAAM,GAAG,GAAQ,EAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAC;AACzC,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;AAC/B,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,IAAS,KAAI;AACd,YAAA,OAAO,IAAI,EAAE,IAAI,EAAE,WAAW;QAClC,CAAC,CAAC,CAAC,CAAC;IAChB;AAEA;;AAEG;IACH,eAAe,CAAC,GAAW,EAAE,IAAY,EAAA;AACrC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE;AAChF,QAAA,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;QAEpE,IAAI,CAAC,MAAM,EAAE;AACT,YAAA,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC;gBACvB,GAAG;gBACH,IAAI;AACJ,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,eAAe,EAAE;AACpB,aAAA,CAAC;YACF,SAAS,CAAC,OAAO,GAAG,SAAS,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;AAEpD,YAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,SAAS;AACnC,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC3B;IACJ;AAEA;;AAEG;AACH,IAAA,kBAAkB,CAAC,GAAW,EAAA;AAC1B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE;QAChF,SAAS,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;QAC/E,SAAS,CAAC,OAAO,GAAG,SAAS,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;AAEpD,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,SAAS;;AAGnC,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE;YAC3E,OAAO,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC;QAChD;AAEA,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC3B;AAEA;;AAEG;IACH,iBAAiB,GAAA;AACb,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB;QAC1C,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,IAAI,EAAE;QAEjE,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;AAC1C,YAAA,IAAI,kBAAkB,CAAC,GAAG,CAAC,EAAE;gBACzB,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC;YAC9C;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,QAAQ;IACnB;AAEA;;AAEG;IACH,oBAAoB,CAAC,GAAW,EAAE,YAAoB,EAAA;AAClD,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE;AACnC,YAAA,IAAI,CAAC,QAAQ,CAAC,kBAAkB,GAAG,EAAE;QACzC;QAEA,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,YAAY;AACpD,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC3B;AAEA;;AAEG;AACH,IAAA,oBAAoB,CAAC,GAAW,EAAA;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,IAAI,EAAE;AACvD,QAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI;IAChC;AAEA;;AAEG;IACH,uBAAuB,GAAA;AACnB,QAAA,IAAI,CAAC,QAAQ,CAAC,kBAAkB,GAAG,EAAE;AACrC,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC3B;AAEA;;AAEG;IACH,WAAW,GAAA;AACP,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE;QAChF,OAAO,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;IAChE;AAEA;;AAEG;IACH,gBAAgB,GAAA;AACZ,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE;AAChF,QAAA,OAAO,SAAS,CAAC,WAAW,IAAI,EAAE;IACtC;AAEA;;AAEG;AACH,IAAA,WAAW,CAAC,KAAa,EAAA;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,KAAK;AAC9B,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC3B;AAEA;;AAEG;IACH,WAAW,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,IAAI;IACzC;AAEA;;AAEG;IACH,aAAa,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI;AAC7B,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC3B;AAEA;;AAEG;IACH,gBAAgB,GAAA;AACZ,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ;QACpC,IAAI,CAAC,KAAK,EAAE;AACR,YAAA,OAAO,KAAK;QAChB;AAEA,QAAA,IAAI;;YAEA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;AAC9B,YAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACpB,gBAAA,OAAO,KAAK;YAChB;AAEA,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,YAAA,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG;YAEvB,IAAI,CAAC,GAAG,EAAE;gBACN,OAAO,IAAI,CAAC;YAChB;YAEA,MAAM,OAAO,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE;;AAEvC,YAAA,OAAO,OAAO;QAClB;QAAE,OAAO,CAAC,EAAE;AACR,YAAA,OAAO,KAAK;QAChB;IACJ;+GAjTS,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAV,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAU,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFZ,MAAM,EAAA,CAAA,CAAA;;4FAET,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACvFD;;;;;;;;;;;;;;AAcE;MAeW,iBAAiB,GAAG,IAAI,cAAc,CAAkB,mBAAmB;MAKlE,eAAe,CAAA;aAE5B,IAAA,CAAA,sBAAsB,GAAG,MAAH,CAAU;aAChC,IAAA,CAAA,4BAA4B,GAAG,YAAH,CAAgB;AAInD,IAAA,IAAW,cAAc,GAAA;AACvB,QAAA,OAAO,SAAS,CAAC;AACf,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE;AACR,SAAA,CAAC;IACJ;IAEA,WAAA,CAAsB,MAAqB,EACrB,OAAuB,EACvB,eAAqC,EACrC,UAAsB,EACtB,MAAc,EAAA;QAJd,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,eAAe,GAAf,eAAe;QACf,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,MAAM,GAAN,MAAM;QAlB5B,IAAA,CAAA,eAAe,GAAG,EAAE;AAqBH,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAFzC;;AAIH,IAAA,IAAY,qBAAqB,GAAA;QAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,4BAA4B,CAAC;IAC1D;;aAGwB,IAAA,CAAA,iBAAiB,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAA3E,CAA8E;IAQvH,GAAG,CAAC,IAAY,EAAE,MAAW,EAAE,OAAoB,EAAE,GAAI,EAAE,SAAU,EAAA;QACjE,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC3C,OAAO,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,iBAAiB,CAAC;QAC7D;AACA,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,CAAC;IAC5D;IAEA,UAAU,CAAC,UAAkB,EAAE,EAAO,EAAE,QAAgB,EAAE,MAAY,EAAE,WAAY,EAAE,OAAQ,EAAA;AAC1F,QAAA,MAAM,eAAe,GAAG,QAAQ,IAAI,UAAU;QAC9C,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;YACtD,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QACxC;AACA,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC;IACpF;AAaA,IAAA,aAAa,CAAC,cAAc,EAAE,QAAQ,GAAG,OAAO,EAAA;QAC9C,IAAI,MAAM,GAAG,KAAK;AAClB,QAAA,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC9B,YAAA,IAAI,IAAI,KAAK,KAAK,EAAE;gBAClB,MAAM,GAAG,IAAI;YACf;AACF,QAAA,CAAC,CAAC;QACF,IAAI,OAAO,GAAG,EAAE;QAChB,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,GAAG;AACR,gBAAA;AACE,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,YAAY;AACxB,oBAAA,KAAK,EAAE,EAAE;AACT,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,KAAK,EAAE,cAAc;oBACrB;AACD;aACF;QACH;AACA,QAAA,OAAO,OAAO;IAChB;AAEA,IAAA,eAAe,CAAC,IAAI,EAAA;AAClB,QAAA,IAAI,YAAY;QAEhB,IAAI,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE;YACtC,YAAY,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO;QACnD;aAAO,IAAI,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE;YAC5C,YAAY,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM;QAClD;AAAO,aAAA,IAAI,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE;AAC/B,YAAA,YAAY,GAAG,IAAI,EAAE,KAAK,EAAE,OAAO;QACrC;aAAO,IAAI,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE;YACtC,YAAY,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO;QAC5C;AAAO,aAAA,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;AAChC,YAAA,YAAY,GAAG,IAAI,EAAE,KAAK;QAC5B;aAAO;YACL,YAAY,GAAG,2BAA2B;QAC5C;AACA,QAAA,OAAO,YAAY;IACrB;+GA3GoB,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAF,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFvB,MAAM,EAAA,CAAA,CAAA;;4FAEE,eAAe,EAAA,UAAA,EAAA,CAAA;kBAHpC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACjCD;;;;;;;;;;;;;;AAcE;AAUK,MAAM,iCAAiC,GAAG;AAGjD;AACO,MAAM,iCAAiC,GAA2B;AACrE,IAAA,UAAU,EAAE,UAAU;AACtB,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,cAAc,EAAE,QAAQ;AACxB,IAAA,iBAAiB,EAAE,QAAQ;AAC3B,IAAA,sBAAsB,EAAE,oBAAoB;AAC5C,IAAA,kBAAkB,EAAE,gBAAgB;AACpC,IAAA,8BAA8B,EAAE,4BAA4B;AAC5D,IAAA,WAAW,EAAE,YAAY;AACzB,IAAA,gBAAgB,EAAE,eAAe;AACjC,IAAA,sBAAsB,EAAE,qBAAqB;AAC7C,IAAA,eAAe,EAAE,aAAa;AAC9B,IAAA,OAAO,EAAE,QAAQ;AACjB,IAAA,cAAc,EAAE,aAAa;AAC7B,IAAA,GAAG,EAAE,IAAI;AACT,IAAA,cAAc,EAAE,KAAK;AACrB,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,WAAW,EAAE,YAAY;;MAYhB,4BAA4B,CAAA;IAerC,WAAA,CAC+C,QAA8B,EAC7B,QAAyB,EAAA;QAD1B,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACP,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAhB/C,IAAA,CAAA,iBAAiB,GAAG,iCAAiC;AAE7C,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,GAAG,EAAU;QAC1C,IAAA,CAAA,eAAe,GAAG,KAAK;;QAEvB,IAAA,CAAA,YAAY,GAAG,IAAI;AAEV,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,eAAe,CAAS,CAAC,CAAC;AAEvD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;;QAGnD,IAAA,CAAA,mBAAmB,GAAyB,IAAI;QAMpD,IAAI,CAAC,QAAQ,CAAC;AACT,aAAA,IAAI,CACDC,KAAG,CAAC,OAA2B;YAC3B,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE;YACpD,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,IAAI,EAAE;AACvE,SAAA,CAAC,CAAC,EACH,oBAAoB,CAChB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,cAAc,KAAK,CAAC,CAAC,cAAc,CACjF,EACD,YAAY,CAAC,GAAG,CAAC;aAEpB,SAAS,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC,EAAE;gBACxF,IAAI,CAAC,KAAK,EAAE;gBACZ;YACJ;AACA,YAAA,KAAK,IAAI,CAAC,mBAAmB,EAAE;AACnC,QAAA,CAAC,CAAC;IACV;IAEQ,WAAW,GAAA;AACf,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,CAAC,CAAC;IAC3D;IAEA,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1B,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QACxB,IAAI,CAAC,WAAW,EAAE;IACtB;AAEA,IAAA,MAAM,OAAO,GAAA;AACT,QAAA,MAAM,IAAI,CAAC,mBAAmB,EAAE;IACpC;AAEQ,IAAA,MAAM,mBAAmB,GAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC1B,OAAO,IAAI,CAAC,mBAAmB;QACnC;QACA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC,OAAO,CAAC,MAAK;AAChE,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AACnC,QAAA,CAAC,CAAC;QACF,OAAO,IAAI,CAAC,mBAAmB;IACnC;AAEQ,IAAA,MAAM,oBAAoB,GAAA;AAC9B,QAAA,IAAI;YACA,MAAM,MAAM,GAAQ,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAChE,YAAA,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI;YACzB,IAAI,CAAC,IAAI,EAAE;gBACP,IAAI,CAAC,eAAe,EAAE;gBACtB,IAAI,CAAC,WAAW,EAAE;gBAClB;YACJ;YACA,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,WAAW,GAAG,EAAE;YACxE,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO;YACrC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;gBAChD,IAAI,CAAC,eAAe,EAAE;AACtB,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;gBAC5B,IAAI,CAAC,WAAW,EAAE;gBAClB;YACJ;AACA,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1B,YAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAS,KAAI;gBAC3B,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACvC,oBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC7B;AACJ,YAAA,CAAC,CAAC;QACN;AAAE,QAAA,MAAM;YACJ,IAAI,CAAC,eAAe,EAAE;QAC1B;QACA,IAAI,CAAC,WAAW,EAAE;IACtB;IAEQ,eAAe,GAAA;AACnB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1B,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;IAChC;IAEA,cAAc,GAAA;QACV,OAAO,IAAI,CAAC,YAAY;IAC5B;IAEQ,OAAO,GAAA;QACX,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE;AAC1C,YAAA,OAAO,KAAK;QAChB;AACA,QAAA,OAAO,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC;IAClE;IAEA,eAAe,GAAA;QACX,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,gBAAgB,CAAC;IACnD;;AAGA,IAAA,IAAI,iBAAiB,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,CAAC;IACxC;AAEQ,IAAA,gBAAgB,CAAC,WAAmB,EAAA;AACxC,QAAA,OAAO,iCAAiC,CAAC,WAAW,CAAC,IAAI,IAAI;IACjE;AAEQ,IAAA,cAAc,CAAC,SAAiB,EAAA;QACpC,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC;IAC5C;IAEQ,cAAc,CAAC,SAAiB,EAAE,MAA+C,EAAA;AACrF,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,CAAC;IAC3D;AAEA,IAAA,OAAO,CAAC,WAAmB,EAAA;QACvB,IAAI,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,IAAI;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;AACpD,QAAA,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,IAAI;QAC3B,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE;AAAE,YAAA,OAAO,IAAI;AACzD,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC;IACnF;AAEA,IAAA,SAAS,CAAC,WAAmB,EAAA;QACzB,IAAI,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,IAAI;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;AACpD,QAAA,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,IAAI;QAC3B,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,YAAA,OAAO,IAAI;AAC/B,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC;IACrF;AAEA,IAAA,SAAS,CAAC,WAAmB,EAAA;QACzB,IAAI,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,IAAI;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;AACpD,QAAA,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,IAAI;QAC3B,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,YAAA,OAAO,IAAI;AAC/B,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC;IACrF;AAEA,IAAA,SAAS,CAAC,WAAmB,EAAA;QACzB,IAAI,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,IAAI;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;AACpD,QAAA,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,IAAI;QAC3B,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,YAAA,OAAO,IAAI;AAC/B,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC;IACrF;;IAGA,uBAAuB,CAAC,WAAmB,EAAE,MAAe,EAAA;AACxD,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,YAAA,OAAO,KAAK;QACrD,OAAO,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,MAAM,CAAC;IACnD;IAEA,cAAc,CAAC,WAAmB,EAAE,MAAe,EAAA;AAC/C,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,OAAO,KAAK;QAChB;QACA,OAAO,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;IAC/E;IAEA,mBAAmB,CAAC,WAAmB,EAAE,MAAc,EAAA;AACnD,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,OAAO,IAAI;QACf;QACA,QAAQ,MAAM;AACV,YAAA,KAAK,QAAQ;AACT,gBAAA,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;AACtC,YAAA,KAAK,QAAQ;AACT,gBAAA,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;AACtC,YAAA,KAAK,kBAAkB;AACvB,YAAA,KAAK,oBAAoB;AACzB,YAAA,KAAK,WAAW;AAChB,YAAA,KAAK,UAAU;AACX,gBAAA,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;AACtC,YAAA,KAAK,qBAAqB;AAC1B,YAAA,KAAK,SAAS;AACd,YAAA,KAAK,uBAAuB;AACxB,gBAAA,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AACpC,YAAA;AACI,gBAAA,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;;IAE5C;IAEA,0BAA0B,CAAC,WAAmB,EAAE,MAAc,EAAA;AAC1D,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,YAAA,OAAO,IAAI;QACpD,QAAQ,MAAM;AACV,YAAA,KAAK,cAAc;AACnB,YAAA,KAAK,mBAAmB;AACpB,gBAAA,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AACpC,YAAA;AACI,gBAAA,OAAO,IAAI;;IAEvB;+GAjNS,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAgBzB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAChB,iBAAiB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAjBpB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4BAA4B,cAFzB,MAAM,EAAA,CAAA,CAAA;;4FAET,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAHxC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA;;0BAiBQ,MAAM;2BAAC,gBAAgB;;0BACvB,MAAM;2BAAC,iBAAiB;;;AC1EjC;;;;;;;;;;;;;;AAcE;MAcW,gBAAgB,CAAA;IAuB3B,WAAA,CAAoB,SAAyC,EAAkC,IAAS,EAAA;QAApF,IAAA,CAAA,SAAS,GAAT,SAAS;QAAkE,IAAA,CAAA,IAAI,GAAJ,IAAI;AArBnG,QAAA,IAAA,CAAA,OAAO,GAAG;AACR,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,YAAY,EAAE,EAAE;AAChB,YAAA,eAAe,EAAE,SAAS;AAC1B,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,gBAAgB,EAAE,KAAK;AACvB,YAAA,cAAc,EAAE,KAAK;AACrB,YAAA,oBAAoB,EAAE,KAAK;AAC3B,YAAA,qBAAqB,EAAE,EAAE;AACzB,YAAA,kBAAkB,EAAE,KAAK;AACzB,YAAA,oBAAoB,EAAE,SAAS;AAC/B,YAAA,kBAAkB,EAAE,SAAS;AAC7B,YAAA,eAAe,EAAE,SAAS;AAC1B,YAAA,QAAQ,EAAE;SACX;AAGC,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE;AAC1E,YAAA,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,6BAA6B;QAC1D;IACF;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAC,SAAS,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAC,CAAC;IAC9F;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;YACjC;QACF;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;IAChC;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAC,SAAS,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAC,CAAC;IACrE;AAEA,IAAA,eAAe,CAAC,KAAK,EAAA;QACnB,IAAI,CAAC,OAAO,CAAC,kBAAkB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB;IACpE;AA/CW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,8CAuB4C,eAAe,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAvB3E,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,wEC5B7B,89EAwDA,EAAA,MAAA,EAAA,CAAA,whHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAb,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FD5Ba,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,cAGX,KAAK,EAAA,QAAA,EAAA,89EAAA,EAAA,MAAA,EAAA,CAAA,whHAAA,CAAA,EAAA;;0BAyB6C,MAAM;2BAAC,eAAe;;;ME/B3E,sBAAsB,CAAA;AAW/B,IAAA,WAAA,CAAoB,QAAkB,EAAU,MAAc,EAAU,cAA8B,EAAA;QAAlF,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAAoB,IAAA,CAAA,MAAM,GAAN,MAAM;QAAkB,IAAA,CAAA,cAAc,GAAd,cAAc;QATtF,IAAA,CAAA,OAAO,GAAgB,EAAE;QACzB,IAAA,CAAA,WAAW,GAAG,CAAC;QACf,IAAA,CAAA,cAAc,GAAG,IAAI,eAAe,CAAc,IAAI,CAAC,OAAO,CAAC;AACxD,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;QAEtD,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAM,IAAI,CAAC,WAAW,CAAC;QAExD,IAAA,CAAA,kBAAkB,GAAG,EAAE;IAGvB;AAEA,IAAA,YAAY,CAAC,SAAoB,EAAA;QAC7B,IAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,KAAK,KAAK,EAAE,CAAC;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;aAC1G;YACD,IAAI,OAAO,GAAG,KAAK;AACnB,YAAA,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;AAChD,gBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ,EAAE;AACnD,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS;oBAC7B,OAAO,GAAG,IAAI;oBACd;gBACJ;YACJ;YACA,IAAI,CAAC,OAAO,EAAE;AACV,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;YAChC;QACJ;QACA,IAAI,CAAC,mBAAmB,EAAE;QAC1B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IAC1C;AAEA,IAAA,YAAY,CAAC,SAAoB,EAAA;AAC7B,QAAA,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;AAChD,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ,EAAE;gBACnD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC3B;YACJ;QACJ;AACA,QAAA,IAAI,CAAC,mBAAmB,CAAC,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IAC1C;AAEA,IAAA,eAAe,CAAC,GAAW,EAAA;QACvB,IAAI,KAAK,GAAG,EAAE;AACd,QAAA,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YAChD,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,GAAG,EAAE;gBACpC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK;gBAC/B;YACJ;QACJ;AACA,QAAA,OAAO,KAAK;IAChB;AAEA,IAAA,UAAU,CAAC,IAAS,EAAA;AAChB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC/B;IAEA,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;QACjB,IAAI,CAAC,mBAAmB,EAAE;QAC1B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IAC1C;IAEA,YAAY,GAAA;AACR,QAAA,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxE;IAEA,gBAAgB,GAAA;QACZ,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC;AAC1D,QAAA,MAAM,OAAO,GAAG,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;AAC1D,QAAA,OAAO,OAAO;IAClB;IAEA,mBAAmB,CAAC,kBAAyB,EAAE,EAAA;AAC3C,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAC7C,QAAA,IAAI,MAAM,GAAe,IAAI,UAAU,EAAE;AACzC,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,IAAG;AAC1B,YAAA,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM;AAC3C,QAAA,CAAC,CAAC;QACF,MAAM,UAAU,GAAG,EAAE;QACrB,OAAO,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,GAAG,KAAI;YAClC,MAAM,aAAa,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,KAAI;AACnD,gBAAA,OAAO,OAAO,CAAC,QAAQ,KAAK,GAAG;AACnC,YAAA,CAAC,CAAC;YACF,IAAI,CAAC,aAAa,EAAE;gBAChB,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC;AACxC,gBAAA,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;YAC1B;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,OAAO,GAAG,UAAU;AACzB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1C,QAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;QACnD,IAAI,CAAC,YAAY,EAAE;IACvB;IAEA,gBAAgB,GAAA;AACZ,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtD,MAAM,MAAM,GAAe,IAAI,UAAU,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;AACtE,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE;QAC7C,MAAM,iBAAiB,GAAG,EAAE;QAE5B,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YAC1B,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC/C,gBAAA,OAAO,MAAM,CAAC,QAAQ,KAAK,GAAG;AAClC,YAAA,CAAC,CAAC;YACF,IAAI,YAAY,EAAE;AACd,gBAAA,iBAAiB,CAAC,GAAG,CAAC,GAAG,YAAY;YACzC;iBAAO;gBACH,IAAI,GAAG,GAAQ,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;gBAC9B,IAAI,IAAI,GAAG,WAAW;gBACtB,IAAI,KAAK,GAAG,GAAG;gBACf,IAAI,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE;AAC7B,oBAAA,GAAG,GAAG,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;AACrB,oBAAA,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;oBACd,IAAI,GAAG,WAAW;gBACtB;gBACA,iBAAiB,CAAC,GAAG,CAAC,GAAG;AACrB,oBAAA,QAAQ,EAAE,GAAG;AACb,oBAAA,KAAK,EAAE,GAAG;AACV,oBAAA,KAAK,EAAE,kBAAkB,CAAC,KAAK,CAAC;AAChC,oBAAA,UAAU,EAAE,GAAG;AACf,oBAAA,IAAI,EAAE;iBACT;YACL;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,iBAAiB;IAC5B;+GAjIS,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,IAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cAFnB,MAAM,EAAA,CAAA,CAAA;;4FAET,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACnBD;;;;;;;;;;;;;;AAcE;MAaW,0BAA0B,CAAA;AAanC,IAAA,WAAA,CAAmB,aAAqC,EAAA;QAArC,IAAA,CAAA,aAAa,GAAb,aAAa;QAZvB,IAAA,CAAA,IAAI,GAAG,WAAW;QAClB,IAAA,CAAA,YAAY,GAAG,EAAE;QACjB,IAAA,CAAA,UAAU,GAAG,EAAE;QAGf,IAAA,CAAA,UAAU,GAAQ,KAAK;AAEhC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAE;QACjC,IAAA,CAAA,kBAAkB,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC;IAKpD;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACjB,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,OAAO,KAAI;YACpD,IAAI,GAAG,GAAG,EAAE;AACZ,YAAA,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;AAC3C,gBAAA,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE;AACjD,oBAAA,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK;oBACxB;gBACJ;YACJ;AACA,YAAA,IAAI,CAAC,YAAY,GAAG,GAAG;QAC3B,CAAC,CAAC,CAAC;IACX;IAEA,SAAS,GAAA;AACL,QAAA,MAAM,SAAS,GAAG;YACd,UAAU,EAAE,IAAI,CAAC,UAAU;AAC3B,YAAA,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK;YAC/B,KAAK,EAAE,IAAI,CAAC,YAAY;YACxB,KAAK,EAAE,IAAI,CAAC,YAAY;YACxB,IAAI,EAAE,IAAI,CAAC,IAAI;SAClB;AACD,QAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,CAAC;IAC9C;IAEA,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE,KAAK,EAAE;IAC5C;AAEA,IAAA,aAAa,CAAC,KAAK,EAAA;AACf,QAAA,IAAI,KAAK,IAAI,IAAI,CAAC,cAAc,EAAE;AAC9B,YAAA,KAAK,CAAC,YAAY,GAAG,IAAI;AACzB,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAC9B;IACJ;IAEA,WAAW,GAAA;QACP,IAAG,IAAI,CAAC,YAAY;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;IACzD;AAEA,IAAA,IAAI,uBAAuB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,qBAAqB,EAAE,cAAc;IAChE;+GA1DS,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAc,sBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,sWC3BvC,wcAkBA,EAAA,MAAA,EAAA,CAAA,s7CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDSa,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBANtC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,cAGvB,KAAK,EAAA,QAAA,EAAA,wcAAA,EAAA,MAAA,EAAA,CAAA,s7CAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAKA,SAAS;uBAAC,aAAa;;;AEtC5B;;;;;;;;;;;;;;AAcE;MAeW,2BAA2B,CAAA;AAkCtC,IAAA,WAAA,CAAoB,aAAqC,EAAA;QAArC,IAAA,CAAA,aAAa,GAAb,aAAa;AA9BjC,QAAA,IAAA,CAAA,YAAY,GAAQ;AAClB,YAAA,GAAG,EAAE,EAAE;SACR;AAMD,QAAA,IAAA,CAAA,SAAS,GAAQ;AACf,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,UAAU,EAAE,SAAS;SACtB;QACD,IAAA,CAAA,UAAU,GAAG,WAAW;QACxB,IAAA,CAAA,aAAa,GAAG,EAAE;QAClB,IAAA,CAAA,aAAa,GAAQ,EAAE;QACvB,IAAA,CAAA,SAAS,GAAG,KAAK;QAEjB,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,WAAW,GAAG,KAAK;QACnB,IAAA,CAAA,mBAAmB,GAAG,KAAK;QAI3B,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,UAAU,GAAG,KAAK;AACV,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAE;QAYzC,IAAA,CAAA,YAAY,GAAG,WAAW;QARxB,IAAI,CAAC,IAAI,EAAE;YACT;QACF;QACA,IAAI,CAAC,IAAI,GAAG;AACV,YAAA,QAAQ,EAAE,KAAK;SAChB;IACH;AAIA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,OAAO,EAAE;QACX;QACA,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAClB,IAAI,CAAC,SAAS,EACd,qCAAqC,EACrC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,8BAA8B,CAAC,CACtD;QACD,QAAQ,MAAM;AACZ,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,CAAC,YAAY,GAAG,iBAAiB;gBACrC;AACF,YAAA,KAAK,OAAO;AACV,gBAAA,IAAI,CAAC,YAAY,GAAG,WAAW;gBAC/B;AACF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,YAAY,GAAG,UAAU;gBAC9B;AACF,YAAA,KAAK,cAAc;AACjB,gBAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;gBACtB;AACF,YAAA,KAAK,OAAO;AACV,gBAAA,IAAI,CAAC,YAAY,GAAG,SAAS;gBAC7B;AACF,YAAA;AACE,gBAAA,IAAI,CAAC,YAAY,GAAG,iBAAiB;gBACrC;;QAEJ,OAAO,IAAI,CAAC,YAAY;IAC1B;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC;AAC/C,QAAA,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,CAAA,kBAAA,EAAqB,QAAQ,CAAA,CAAE,CAAC;AAC3E,QAAA,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS;IACnE;IAEA,QAAQ,GAAA;IAER;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;IACjC;IAEA,MAAM,CAAC,eAAoB,EAAE,EAAA;QAC3B,IAAI,CAAC,YAAY,EAAE;YACjB;QACF;AACA,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAChC,QAAA,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC,aAAa;AAC/C,QAAA,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,WAAW;AAC1C,QAAA,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,MAAM;QACpC,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,UAAU,IAAI,WAAW;AACxD,QAAA,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC,aAAa;QAC/C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM;QACtC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,MAAM;QAC9C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,MAAM;QAC/C,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,eAAe,CAAC,GAAG,eAAe,GAAG,QAAQ;AACjG,QAAA,IAAI,CAAC,UAAU;AACb,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,KAAK,MAAM;iBAC9B,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;AACrF,QAAA,IAAI,CAAC,eAAe,GAAG,YAAY,CAAC,cAAc;QAClD,IAAI,CAAC,mBAAmB,EAAE;QAC1B,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,KAAK,KAAI;AACzD,YAAA,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,iBAAiB,EAAE,EAAE,CAAC;YACjD,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AAClC,gBAAA,IAAI,CAAC,OAAO,GAAG,SAAS;YAC1B;iBAAO;gBACL,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC;YACxC;AACF,QAAA,CAAC,CAAC;QACF,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,yBAAyB,EAAE,CAAC,KAAK,KAAI;AACrE,YAAA,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,IAAG;AACrD,gBAAA,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,qBAAqB,EAAE,aAAa,EAAE;oBACxF,IAAI,CAAC,mBAAmB,EAAE;gBAC5B;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;;QAErB;IACF;IAEA,GAAG,GAAA;QACD,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AACtE,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM;IAC5B;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC;IAC7D;AAEA,IAAA,IAAI,CAAC,KAAK,EAAA;AACR,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;YAC5B;QACF;QACA,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC;QAC1C,IACE,CAAC,CAAC,QAAQ,CACR,CAAC,CAAA,aAAA,EAAgB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAA,CAAE,EAAE,cAAc,EAAE,CAAA,iBAAA,EAAoB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAA,CAAE,CAAC,EACpG,QAAQ,CACT,EACD;YACA;QACF;QACA,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AAC3B,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;QACtB;AAAO,aAAA,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE;AACjC,YAAA,IAAI,CAAC,OAAO,GAAG,MAAM;QACvB;aAAO;AACL,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;QACtB;AACA,QAAA,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC;AACrD,QAAA,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AAC7D,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;YAC7B,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;AACpF,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC;AAClC,gBAAA,IAAI,EAAE,aAAa;gBACnB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,OAAO,EAAE,IAAI,CAAC,OAAO;AACtB,aAAA,CAAC;QACJ;IACF;AAEA,IAAA,YAAY,CAAC,KAAK,EAAA;AAChB,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU;QAClC,IAAI,IAAI,CAAC,UAAU,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,KAAK,OAAO,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,IAAG,IAAI,CAAC,UAAU,KAAK,WAAW,EAAE;AACnI,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,IAAI,CAAC,mBAAmB,EAAE;AAC1B,gBAAA,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,sBAAsB,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC;YAChL;iBAAO;gBACL,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,uBAAuB,EAAE,KAAK,CAAC;YAC7D;QACF;AAAO,aAAA,IAAI,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE;AACvC,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,IAAI,CAAC,mBAAmB,EAAE;AAC1B,gBAAA,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,sDAAsD,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC;YAChH;iBAAO;gBACL,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,uDAAuD,EAAE,KAAK,CAAC;YAC7F;QACF;IACF;AAEA,IAAA,qBAAqB,CAAC,KAAK,EAAA;AACzB,QAAA,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,mBAAmB;AACpD,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,YAAA,MAAM,OAAO,GAAG;AACd,gBAAA;AACE,oBAAA,KAAK,EAAE,KAAK;oBACZ,QAAQ,EAAE,IAAI,CAAC,kBAAkB;AACjC,oBAAA,UAAU,EAAE,QAAQ;AACpB,oBAAA,KAAK,EAAE,SAAS;AAChB,oBAAA,WAAW,EAAE,iBAAiB;AAC/B,iBAAA;AACD,gBAAA;AACE,oBAAA,KAAK,EAAE,QAAQ;oBACf,QAAQ,EAAE,IAAI,CAAC,kBAAkB;AACjC,oBAAA,UAAU,EAAE,QAAQ;AACpB,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,WAAW,EAAE,UAAU;AACxB,iBAAA;AACD,gBAAA;AACE,oBAAA,KAAK,EAAE,SAAS;oBAChB,QAAQ,EAAE,IAAI,CAAC,kBAAkB;AACjC,oBAAA,UAAU,EAAE,QAAQ;AACpB,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,WAAW,EAAE,WAAW;AACzB,iBAAA;aACF;AACD,YAAA,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,sBAAsB,EAAE,KAAK,EAAE,OAAO,CAAC;QACrE;aAAO;YACL,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,uBAAuB,EAAE,KAAK,CAAC;QAC7D;IACF;AAEA,IAAA,UAAU,CAAC,KAAK,EAAA;QACd,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC;QAC1C,IACE,CAAC,CAAC,QAAQ,CACR,CAAC,sBAAsB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAA,CAAE,EAAE,CAAA,iBAAA,EAAoB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAA,CAAE,CAAC,EAC1F,QAAQ,CACT,EACD;YACA;QACF;AAAO,aAAA,IAAI,QAAQ,KAAK,IAAI,CAAC,SAAS,EAAE,KAAK,IAAI,IAAI,CAAC,UAAU,KAAK,OAAO,EAAE;YAC5E;QACF;QACA,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,uBAAuB,EAAE,KAAK,CAAC;AAE3D,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;IAClC;AAEA,IAAA,OAAO,CAAC,MAAqB,EAAA;AAC3B,QAAA,OAAO,IAAI;IACb;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACzB;QACF;QACA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;IACrD;IAEA,mBAAmB,GAAA;QACjB,IAAI,OAAO,GAAG,EAAE;AAChB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE;AACtC,YAAA,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE;QAChD;aAAO;AACL,YAAA,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa;QAC3C;AACA,QAAA,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,MAAM,KAAI;YAC7C,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK;AACtC,YAAA,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;AACnC,YAAA,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU;AAC7B,YAAA,OAAO,MAAM;AACf,QAAA,CAAC,CAAC;IACJ;+GA7QW,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,sBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,+LC7BxC,4rIAuHA,EAAA,MAAA,EAAA,CAAA,o/BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAd,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAe,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,YAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,0BAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,cAAA,EAAA,YAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FD1Fa,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBANvC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,cAGxB,KAAK,EAAA,QAAA,EAAA,4rIAAA,EAAA,MAAA,EAAA,CAAA,o/BAAA,CAAA,EAAA;;sBAkClB,SAAS;uBAAC,YAAY;;;AE7DzB;;;;;;;;;;;;;;AAcE;AAuBK,IAAe,oBAAoB,GAAnC,MAAe,oBAAoB,CAAA;IAuGtC,WAAA,CAC8B,QAAwC,EACxD,aAAqC,EACrC,kBAAsC,EACrB,gBAA4C,EAC7D,MAAe,EAAA;QAJW,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAClC,IAAA,CAAA,aAAa,GAAb,aAAa;QACb,IAAA,CAAA,kBAAkB,GAAlB,kBAAkB;QACS,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAC3C,IAAA,CAAA,MAAM,GAAN,MAAM;AArGpB,QAAA,IAAA,CAAA,WAAW,GAAG;AACV,YAAA,EAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAC;AAC7B,YAAA,EAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC;AACzB,YAAA,EAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW;SAC1C;QAED,IAAA,CAAA,QAAQ,GAAW,EAAE;AAErB,QAAA,IAAA,CAAA,qBAAqB,GAAG;AACpB,YAAA,UAAU,EAAE,WAAW;AACvB,YAAA,aAAa,EAAE;SAClB;AAED,QAAA,IAAA,CAAA,aAAa,GAAG;AACZ,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,eAAe,EAAE,2BAA2B;YAC5C,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;YACjD,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,iBAAiB,EAAE,IAAI,EAAE;AACxE,YAAA,aAAa,EAAE,CAAC,IAAgC,KAAI;AAChD,gBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;oBACxB;gBACJ;gBACA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;YACrC,CAAC;AACD,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,SAAS,EAAE,yBAAyB;AACpC,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,IAAI,EAAE,IAAI;SACb;AAED,QAAA,IAAA,CAAA,cAAc,GAAQ;AAClB,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE;SACV;QACD,IAAA,CAAA,UAAU,GAAG,CAAC;AAEK,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,4BAA4B,CAAC;QAI/E,IAAA,CAAA,SAAS,GAAQ,EAAE;QACnB,IAAA,CAAA,kBAAkB,GAAQ,EAAE;;QAEpB,IAAA,CAAA,iBAAiB,GAAiB,IAAI;QACtC,IAAA,CAAA,0BAA0B,GAAiB,IAAI;QAC/C,IAAA,CAAA,oBAAoB,GAAiB,IAAI;QACzC,IAAA,CAAA,0BAA0B,GAAiB,IAAI;QACvD,IAAA,CAAA,eAAe,GAAQ,EAAE;QAEzB,IAAA,CAAA,aAAa,GAAG,KAAK;AACrB,QAAA,IAAA,CAAA,WAAW,GAAG;AACV,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,QAAQ,EAAE;SACb;AAED,QAAA,IAAA,CAAA,kBAAkB,GAAG,CAAC,GAAuC,KAAI;AAC7D,YAAA,OAAO,CAAA,6CAAA,EAAgD,GAAG,EAAE,IAAI,EAAE,EAAE,CAAA;8BAC9C,GAAG,EAAE,IAAI,EAAE,IAAI,CAAA;uBACtB;AACnB,QAAA,CAAC;AAED,QAAA,IAAA,CAAA,aAAa,GAAG,CAAC,GAAgE,KAAI;AACjF,YAAA,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK;YAC9B,IAAI,KAAK,GAAG,EAAE;YACd,IAAI,GAAG,EAAE,IAAI,GAAG,KAAK,GAAG,SAAS,CAAC,EAAE;AAChC,gBAAA,GAAG,EAAE,IAAI,GAAG,KAAK,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,IAAkC,KAAI;oBAC1E,MAAM,SAAS,GAAG,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,OAAO,GAAG,SAAS;AACtE,oBAAA,KAAK,IAAI,CAAA;0CACiB,SAAS,CAAA,EAAA,EAAK,IAAI,CAAC,IAAI,CAAA;AACb,kDAAA,EAAA,IAAI,CAAC,IAAI,CAAA;iCAC5B;AACrB,gBAAA,CAAC,CAAC;YACN;iBAAO;AACH,gBAAA,GAAG,EAAE,IAAI,GAAG,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC,IAAuB,KAAI;AACpD,oBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,OAAO,GAAG,SAAS;AAC/D,oBAAA,KAAK,IAAI,CAAA;AACiB,wCAAA,EAAA,SAAS,KAAK,IAAI,CAAA;oDACR,IAAI,CAAA;iCACvB;AACrB,gBAAA,CAAC,CAAC;YACN;AACA,YAAA,OAAO,KAAK;AAChB,QAAA,CAAC;AAED,QAAA,IAAA,CAAA,kBAAkB,GAAG,CAAC,GAAkD,KAAI;AACxE,YAAA,OAAO,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC;AAC1E,QAAA,CAAC;AASG,QAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAC5C,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,QAAQ,KAAI;YAChD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,eAAe,KAAK,eAAe,CAAC,sBAAsB,EAAE;AAC/H,gBAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,EAAE,KAAK,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,eAAe,KAAK,eAAe,CAAC,sBAAsB,KAAK,IAAI,CAAC,WAAW,EAAE;oBAClK,IAAI,CAAC,WAAW,EAAE;gBACtB;YACJ;AACA,YAAA,IAAI,CAAC,eAAe,GAAG,QAAQ;AACnC,QAAA,CAAC,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAU,KAAI;AACnC,YAAA,IAAI,KAAK,YAAY,aAAa,EAAE;gBAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI;AACtD,gBAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,UAAU,EAAE,WAAW;AACpD,gBAAA,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE;oBACtB;gBACF;gBACA,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAChD,gBAAA,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC;YACjC;AACN,QAAA,CAAC,CAAC;IACN;AAEA;;;AAGG;IACH,iBAAiB,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YACzB,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;YAClD,IAAI,CAAC,0BAA0B,GAAG,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC;QACxE;QACA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC;QAClD,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC,IAAI,CAAC,0BAA0B,CAAC;IACxE;IAEA,eAAe,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE;AACnC,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAsB,KAAI;gBAC3D,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;oBAClD,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE;wBAChC,IAAI,GAAG,OAAO;oBAClB;AACJ,gBAAA,CAAC,CAAC;AACF,gBAAA,OAAO,IAAI;AACf,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;gBACvE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAsB,KAAI;AACnD,oBAAA,OAAO,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM;AACzC,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,eAAe,CAAC;QAC5D;IACJ;AAEA,IAAA,2BAA2B,CAAC,GAA2B,EAAA;AACnD,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE;AACnC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;gBAC1D,OAAO,MAAM,CAAC,MAAM;AACxB,YAAA,CAAC,CAAC;AACF,YAAA,GAAG,CAAC,UAAU,GAAG,CAAC,GAAG,GAAG,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC;QACjD;IACJ;AAEA,IAAA,aAAa,CAAC,aAAoB,EAAA;QAC9B,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAC5B,IAAI,CAAC,YAAY,EACjB,aAAa,EACb,IAAI,CAAC,WAAW,EAChB,KAAK,EACL,KAAK,EACL,SAAS,EACT,KAAK,CACR;IACL;IAEA,gBAAgB,GAAA;QACZ,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC;AAC7C,QAAA,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;AACjB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS;AACnE,aAAA,IAAI,CAAC,CAAC,OAAY,KAAI;YACnB,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC;AAC5C,QAAA,CAAC,CAAC;IACV;AAEA,IAAA,YAAY,CAAC,YAAoB,EAAE,MAAW,EAAE,OAAqB,EAAE,IAAU,EAAA;QAC7E,IAAI,CAAC,MAAM,EAAE;AACT,YAAA,MAAM,GAAG,EAAC,GAAG,IAAI,CAAC,cAAc,EAAC;QACrC;QACA,IAAG,IAAI,EAAE;AACL,YAAA,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM;AACzB,YAAA,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ;QAChC;AACA,QAAA,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;AAC5C,YAAA,MAAM,CAAC,QAAQ,GAAG,KAAK;YACvB,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ;YACvC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK;AAClC,YAAA,MAAM,CAAC,SAAS,GAAG,IAAI;QAC3B;QACA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AACvC,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,MAAK;YACpE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5C,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,0BAA0B,CAAC,KAAY,EAAE,IAAY,EAAE,cAAsB,EAAA;QACzE,MAAM,qBAAqB,GAAG,EAAE;QAChC,MAAM,QAAQ,GAAG,EAAE;AACnB,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,MAAoB,KAAI;YACnC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AAC3F,gBAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE;AAClC,gBAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACrB,oBAAA,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC;gBACtC;AACJ,YAAA,CAAC,CAAC;AACF,YAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACvB,QAAA,CAAC,CAAC;QACF,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAK;AACnC,YAAA,OAAO,qBAAqB;AAChC,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,WAAW,CAAC,GAAa,EAAA;QACrB,MAAM,QAAQ,GAAG,EAAE;AACnB,QAAA,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;AACf,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;AAC3D,YAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACvB,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAI;YAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,QAAQ,CAAC;AAC1D,YAAA,MAAM,OAAO;AACjB,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAI,CAAC,MAAW,EAAE,QAAQ,GAAE,KAAK,EAAA;QAC7B,IAAI,CAAC,WAAW,GAAG,EAAC,MAAM,EAAE,QAAQ,EAAC;QACrC,IAAG,IAAI,CAAC,WAAW;YAAE,IAAI,CAAC,WAAW,CAAC,EAAC,MAAM,EAAE,QAAQ,EAAC,CAAC;IAC7D;IAEA,eAAe,GAAA;QACX,IAAI,IAAI,GAAG,EAAE;AACb,QAAA,IAAI,MAAM,CAAC,YAAY,EAAE;YACrB,IAAI,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC,QAAQ,EAAE;QAC3C;AACA,QAAA,OAAO,IAAI,EAAE,MAAM,GAAG,CAAC;IAC3B;IAEA,aAAa,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,CAAC;IACvD;AAEO,IAAA,YAAY,CAAC,MAAM,GAAG,EAAE,EAAE,QAAoB,EAAA;AACjD,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;AAChC,QAAA,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;YACtE;QACJ;AACA,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;YACrE;QACJ;QACA,IAAI,QAAQ,EAAE;YACV,MAAM,GAAG,QAAQ;QACrB;QACA,MAAM,aAAa,GAAW,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE;QAC7D,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA,EAAG,aAAa,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,CAAC;IAC5D;AAEA,IAAA,OAAO,CAAC,QAAgB,EAAA;AACpB,QAAA,MAAM,YAAY,GAAQ,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC;QAChG,OAAO,QAAQ,GAAG,YAAY;IAClC;;IAEA,0BAA0B,GAAA;QACtB,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;QACrD,IAAI,CAAC,0BAA0B,GAAG,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC;IACxE;AAEA,IAAA,sBAAsB,CAAC,IAAkC,EAAA;QACrD,IAAI,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE;YAChE;QACJ;AACA,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC,IAAyB,KACnF,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAC3D;AACD,QAAA,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAC,IAAyB,KAClG,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAClE;IACL;;AAvSkB,oBAAoB,GAAA,UAAA,CAAA;AAwGjC,IAAA,OAAA,CAAA,CAAA,EAAA,MAAM,CAAC,gBAAgB,CAAC,CAAA;AAGxB,IAAA,OAAA,CAAA,CAAA,EAAA,MAAM,CAAC,iBAAiB,CAAC;AA3GZ,CAAA,EAAA,oBAAoB,CAwSzC;;MCxUY,oBAAoB,CAAA;AAM7B,IAAA,WAAA,GAAA;AAJA,QAAA,IAAA,CAAA,WAAW,GAAsB,IAAI,YAAY,EAAO;AACxD,QAAA,IAAA,CAAA,aAAa,GAAuB,IAAI,YAAY,EAAO;AAC3D,QAAA,IAAA,CAAA,cAAc,GAAuB,IAAI,YAAY,EAAO;IAE7C;IAEf,eAAe,GAAA;IAEf;+GAVS,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAFjB,MAAM,EAAA,CAAA,CAAA;;4FAET,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MC6BqB,iBAAiB,CAAA;AA0BnC,IAAA,IAAI,iBAAiB,GAAA;AACjB,QAAA,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;IACvE;AAEA,IAAA,IAAI,iBAAiB,GAAA;AACjB,QAAA,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;IACvE;AAEA,IAAA,IAAI,eAAe,GAAA;AACf,QAAA,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;IACrE;IAEA,WAAA,CACc,aAAqC,EACxC,GAAyB,EACtB,aAAmC,EACnC,UAAqB,EACrB,gBAAmC,EAAA;QAJnC,IAAA,CAAA,aAAa,GAAb,aAAa;QAChB,IAAA,CAAA,GAAG,GAAH,GAAG;QACA,IAAA,CAAA,aAAa,GAAb,aAAa;QACb,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAnC9B,IAAA,CAAA,UAAU,GAAG,GAAG;QAChB,IAAA,CAAA,QAAQ,GAAG,GAAG;QACd,IAAA,CAAA,UAAU,GAAG,GAAG;QAChB,IAAA,CAAA,aAAa,GAAG,KAAK;QACrB,IAAA,CAAA,aAAa,GAAU,EAAE;QACzB,IAAA,CAAA,UAAU,GAAQ,EAAE;QACpB,IAAA,CAAA,OAAO,GAAG,EAAE;QACZ,IAAA,CAAA,aAAa,GAAG,EAAE;QAClB,IAAA,CAAA,aAAa,GAAG,KAAK;QAErB,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,OAAO,GAAQ,EAAE;AAEjB,QAAA,IAAA,CAAA,YAAY,GAAiB,IAAI,YAAY,EAAE;AAEvC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,cAAc,CAAC;AACxB,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,4BAA4B,CAAC;IAoB5E;IAEH,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,CAAC;AAClC,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,KAAK;AAC9B,QAAA,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AAClD,QAAA,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE;QAC1B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE;AAC7C,QAAA,IAAI,CAAC,GAAG,CAAC,0BAA0B,EAAE;AACrC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACjB,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,SAAS,CAAC,MAAK;YACpD,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,CAAC,qBAAqB,CAAC;YAC3D,IAAI,CAAC,4BAA4B,EAAE;AACnC,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,gBAAA,IAAI,CAAC,OAAO,GAAG,EAAE;AACjB,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YAC1B;QACJ,CAAC,CAAC,CACL;AACD,QAAA,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;AACjC,QAAA,IAAI,CAAC,gBAAgB,EAAE,YAAY,EAAE;AACrC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACjB,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,SAAS,CAAC,OAAO,IAAG;YAClD,IAAI,CAAC,aAAa,GAAG,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAClD,IAAI,CAAC,WAAW,EAAE;QACtB,CAAC,CAAC,CACL;QACD,IAAI,CAAC,YAAY,CAAC,GAAG,CACjB,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,IAAG;YAC1D,IAAI,CAAC,WAAW,EAAE;QACtB,CAAC,CAAC,CACL;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACjB,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,KAAU,KAAI;YACvD,IAAI,CAAC,UAAU,EAAE;QACrB,CAAC,CAAC,CACL;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACjB,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,KAAU,KAAI;YACpD,IAAI,CAAC,WAAW,EAAE;QACtB,CAAC,CAAC,CACL;AACD,QAAA,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE;IACxC;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;IACnC;AAEA,IAAA,WAAW,CAAC,IAAS,EAAA;AACjB,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,4BAA4B,EAAE;IACvC;IAEU,4BAA4B,GAAA;QAClC,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,mBAAmB,CAAC;AAC5F,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;QACvE,IAAI,YAAY,IAAI,KAAK,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AACvC,YAAA,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;QAChG;AACA,QAAA,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,KAAK,KAAK,KAAK,KAAK,CAAC,CAAC,EAAE;YAC3C,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAChD;IACJ;AAEA,IAAA,mBAAmB,CAAC,WAAiB,EAAA;QACjC,IAAI,YAAY,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;QAEvB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC1B,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YACxD,IAAI,QAAQ,EAAE;AACV,gBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;YACzB;AAAO,iBAAA,IAAI,WAAW,EAAE,EAAE,IAAI,WAAW,EAAE,EAAE,KAAK,IAAI,EAAE,EAAE,EAAE;AACxD,gBAAA,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,QAAQ;YACxC;AACA,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,YAAY,GAAG,IAAI;AACnB,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YACjC;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,aAAa,GAAG,YAAY;IACrC;AAEA,IAAA,WAAW,CAAC,IAA2C,EAAE,WAAW,GAAG,KAAK,EAAA;AACxE,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YACtB;QACJ;AACA,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW;AACzC,QAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,WAAW;AAC5E,aAAA,IAAI,CAAC,CAAC,IAAS,KAAI;AAChB,YAAA,IAAI,CAAC,OAAO,GAAG,EAAE;YACjB,IAAI,WAAW,EAAE;gBACb,KAAK,CAAC,MAAK;AACP,oBAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI;AAC5B,gBAAA,CAAC,CAAC;YACN;iBAAO;AACH,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI;YAC5B;YAEA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU;AACjD,YAAA,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;AACnD,YAAA,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;AAChE,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU;YACnC;iBAAO;AACH,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK;YAC5E;YACA,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,4BAA4B,EAAE;YACnC,IAAI,CAAC,YAAY,EAAE;AACvB,QAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AAC1B,QAAA,CAAC,CAAC;IACV;IAEU,gBAAgB,GAAA;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,MAAK;AAClC,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,iBAAA,CAAmB,EACnB,CAAA,wCAAA,CAA0C,CAC7C;AACD,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,MAAK;AACV,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,eAAA,CAAiB,EACjB,CAAA,qCAAA,CAAuC,CAC1C;AACD,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,QAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AAC1B,QAAA,CAAC,CAAC;IACN;AAEU,IAAA,cAAc,CAAC,aAAoB,EAAE,eAAe,GAAG,SAAS,EAAA;AACtE,QAAA,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;YAC9D;QACJ;QACA,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;YAC1C,OAAO,GAAG,CAAC,EAAE;AACjB,QAAA,CAAC,CAAC;QACF,MAAM,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;YAC7C,OAAO,IAAI,CAAC,IAAI;AACpB,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,GAAG,aAAa,CAAC,MAAM,GAAG,EAAE;AACvE,QAAA,MAAM,IAAI,GAAG;AACT,YAAA,QAAQ,EAAE,gBAAgB;AAC1B,YAAA,KAAK,EAAE,QAAQ;AACf,YAAA,OAAO,EAAE,CAAA,oDAAA,EAAuD,UAAU,CAAA,CAAA,EAAI,eAAe,CAAA,CAAA,CAAG;AAChG,YAAA,UAAU,EAAE,aAAa;AACzB,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,WAAW,EAAE,6BAA6B;AAC1C,YAAA,QAAQ,EAAE,+BAA+B;AACzC,YAAA,cAAc,EAAE;SACnB;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACpD,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,SAAS,EAAE,KAAK;AACnB,SAAA,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AAC9C,YAAA,IAAI,MAAM,EAAE,SAAS,EAAE;gBACnB,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAK;oBACxC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;AAC1C,gBAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,KAAI;AACtB,oBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,eAAe,EACf,CAAA,0BAAA,EAA6B,YAAY,CAAA,CAAE,CAC9C;AACD,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,gBAAA,CAAC,CAAC;YACN;AACJ,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,sBAAsB,CAAC,KAAK,EAAA;QACxB,IAAI,cAAc,GAAG,KAAK;QAC1B,IAAI,IAAI,CAAC,gBAAgB,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC,EAAE;YAChD,IAAI,CAAC,gBAAgB,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,SAAS,KAAI;gBACtD,IAAI,SAAS,EAAE,MAAM,KAAK,KAAK,EAAE,MAAM,EAAE;AACrC,oBAAA,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;oBAC9B,cAAc,GAAG,IAAI;gBACzB;AACJ,YAAA,CAAC,CAAC;QACN;AACA,QAAA,OAAO,cAAc;IACzB;AAEA,IAAA,SAAS,CAAC,KAAK,EAAA;AACX,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;IACxB;IAEA,YAAY,GAAA;QACR,KAAK,CAAC,MAAK;AACP,YAAA,IAAI,MAAM,GAAG;AACT,gBAAA,KAAK,EAAE,IAAI;aACd;YACD,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,YAAY,CAAC,MAAM,CAAC;AAC3C,QAAA,CAAC,CAAC;IACN;+GA5PkB,iBAAiB,EAAA,IAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAjB,iBAAiB,EAAA,CAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBADtC;;;sBChCY,OAAO,CAAA;AAApB,IAAA,WAAA,GAAA;QACI,IAAA,CAAA,IAAI,GAAG,EAAE;QACT,IAAA,CAAA,kBAAkB,GAAG,IAAI;QACzB,IAAA,CAAA,kBAAkB,GAAG,EAAE;QACvB,IAAA,CAAA,cAAc,GAAU,EAAE;QAC1B,IAAA,CAAA,IAAI,GAAQ,EAAE;QACd,IAAA,CAAA,OAAO,GAAU,EAAE;QACnB,IAAA,CAAA,iBAAiB,GAAG,CAAC;IACzB;AAAC;AAAA;;MCMY,sBAAsB,CAAA;IAOjC,WAAA,CAAmB,UAAqB,EAAU,MAAc,EAAA;QAA7C,IAAA,CAAA,UAAU,GAAV,UAAU;QAAqB,IAAA,CAAA,MAAM,GAAN,MAAM;IACxD;AAEA,IAAA,MAAM,CAAC,MAA2B,EAAA;QAChC,IAAI,CAAC,UAAU,GAAG,MAAM,EAAE,MAAM,EAAE,kBAAkB,IAAI,EAAE;AAC1D,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;AACvB,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;IAC3B;AAEA,IAAA,OAAO,CAAC,MAAgC,EAAA;QACtC,IAAI,CAAC,UAAU,GAAG,MAAM,EAAE,MAAM,EAAE,kBAAkB,IAAI,EAAE;AAC1D,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;AACvB,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;AACzB,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa;AACzC,QAAA,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE;AAC5B,YAAA,OAAO,IAAI;QACb;QACA,MAAM,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE;AACjB,YAAA,OAAO,IAAI;QACb;AACA,QAAA,OAAO,MAAM;IACf;AAEA,IAAA,WAAW,CAAC,KAAK,EAAA;QACf,KAAK,CAAC,eAAe,EAAE;QACvB,KAAK,CAAC,cAAc,EAAE;QACtB,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAAE;AACjD,YAAA,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC3D,gBAAA,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE;oBACtB;gBACF;AACA,gBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA,EAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAA,CAAA,EAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA,CAAE,CAAC;AACpH,YAAA,CAAC,CAAC;YACF;QACF;AACA,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA,EAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAA,CAAA,EAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA,CAAE,CAAC;IACpH;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK;AACpB,QAAA,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;AAChB,YAAA,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI;QACtB;AACA,QAAA,OAAO,GAAG;IACZ;+GAxDW,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAjB,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,gFCdnC,ypDA6BA,EAAA,MAAA,EAAA,CAAA,8iBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAe,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDfa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,cAGnB,KAAK,EAAA,QAAA,EAAA,ypDAAA,EAAA,MAAA,EAAA,CAAA,8iBAAA,CAAA,EAAA;;;AEZrB;;;;;;;;;;;;;;AAcE;MAWW,mBAAmB,CAAA;AAO9B,IAAA,WAAA,CAAoB,iBAAoC,EAAA;QAApC,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QAL5B,IAAA,CAAA,UAAU,GAAa,EAAE;AACxB,QAAA,IAAA,CAAA,iBAAiB,GAAsB,IAAI,YAAY,EAAO;QACxE,IAAA,CAAA,MAAM,GAAQ,EAAE;QAChB,IAAA,CAAA,OAAO,GAAY,KAAK;IAEmC;IAE3D,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,OAAO,EAAE;QACX;AACA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;QACpE,OAAO,CAAC,EAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAC,CAAC;IAC7C;AAEA,IAAA,aAAa,CAAC,MAAM,EAAA;QAClB,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE;YACpB;QACF;QACA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,MAAM,CAAC;IACpE;AAEA,IAAA,OAAO,CAAC,KAAU,EAAA;QAChB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE;QACpC,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,OAAO,EAAE;YAClC,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;AACvB,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,MAAqB;YAC3C,OAAO,CAAC,IAAI,EAAE;YACd,OAAO,CAAC,KAAK,EAAE;QACjB;IACF;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AACpD,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;YACpB;QACF;QACA,IAAI,OAAO,GAAG,KAAK;QACnB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,GAAW,KAAI;YACtC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;AAC3B,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACrB,gBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC;gBAC1B,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;oBAC7C,OAAO,GAAG,IAAI;oBACd;gBACF;YACF;AAAO,iBAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC5B,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC/B,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;oBAC5F,OAAO,GAAG,IAAI;oBACd;gBACF;AAAO,qBAAA,IAAI,KAAK,GAAG,KAAK,EAAE;oBACxB,OAAO,GAAG,IAAI;oBACd;gBACF;YACF;iBAAO;gBACL,OAAO,GAAG,IAAI;YAChB;AACF,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;IACxB;AAEO,IAAA,UAAU,CAAC,OAAO,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,OAAO;IACzB;+GArEW,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAR,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,uKCzBhC,gVAWkB,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDcL,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,cAGf,KAAK,EAAA,QAAA,EAAA,gVAAA,EAAA;;sBAIlB;;sBACA;;;AE5BH;;;;;;;;;;;;;;AAcE;MAQW,uBAAuB,CAAA;AAEhC,IAAA,WAAA,CAAoB,iBAAoC,EAAA;QAApC,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;IAAsB;AAE3D,IAAA,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAA;AACtI,QAAA,MAAM,KAAK,GAAG;AACV,YAAA,EAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,eAAe,GAAG,SAAS,GAAG,QAAQ,EAAC;AAChE,YAAA,EAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,GAAG,SAAS,GAAG,OAAO,EAAC;AAC7D,YAAA,EAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI,EAAC;AACpD,YAAA,EAAC,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,eAAe,GAAG,eAAe,GAAG,SAAS,EAAC;AAC9E,YAAA,EAAC,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,cAAc,GAAG,cAAc,GAAG,SAAS,EAAC;AAC3E,YAAA,EAAC,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS,EAAC;AAClE,YAAA,EAAC,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,gBAAgB,EAAC;AAClD,YAAA,EAAC,GAAG,EAAE,mBAAmB,EAAE,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAC;AAC1F,YAAA,EAAC,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,gBAAgB,EAAC;SACrD;AACD,QAAA,OAAO,KAAK;IAChB;AAEA,IAAA,QAAQ,CAAC,iBAAiB,EAAA;QACtB,MAAM,MAAM,GAAQ,EAAE;QACtB,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,iBAAiB,CAAC;IAC3F;+GAtBS,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAE,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cAFpB,MAAM,EAAA,CAAA,CAAA;;4FAET,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACrBD;;;;;;;;;;;;;;AAcE;MAcW,yBAAyB,CAAA;IAwBpC,WAAA,CAAoB,GAA4B,EAAU,iBAAoC,EAAA;QAA1E,IAAA,CAAA,GAAG,GAAH,GAAG;QAAmC,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QAtBlE,IAAA,CAAA,QAAQ,GAAW,KAAK;QACxB,IAAA,CAAA,OAAO,GAAW,SAAS;QAC3B,IAAA,CAAA,IAAI,GAAW,SAAS;QACxB,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,cAAc,GAAG,KAAK;QACtB,IAAA,CAAA,WAAW,GAAG,KAAK;QACnB,IAAA,CAAA,gBAAgB,GAAQ,SAAS;QACjC,IAAA,CAAA,iBAAiB,GAAQ,SAAS;QAClC,IAAA,CAAA,gBAAgB,GAAQ,SAAS;AAChC,QAAA,IAAA,CAAA,cAAc,GAAyB,IAAI,YAAY,EAAU;AACjE,QAAA,IAAA,CAAA,aAAa,GAAyB,IAAI,YAAY,EAAU;AAChE,QAAA,IAAA,CAAA,UAAU,GAAyB,IAAI,YAAY,EAAU;AAC7D,QAAA,IAAA,CAAA,qBAAqB,GAAsB,IAAI,YAAY,EAAO;AAClE,QAAA,IAAA,CAAA,oBAAoB,GAAsB,IAAI,YAAY,EAAO;AACjE,QAAA,IAAA,CAAA,iBAAiB,GAAsB,IAAI,YAAY,EAAO;AAC9D,QAAA,IAAA,CAAA,sBAAsB,GAAsB,IAAI,YAAY,EAAO;AACnE,QAAA,IAAA,CAAA,uBAAuB,GAAsB,IAAI,YAAY,EAAO;AACpE,QAAA,IAAA,CAAA,sBAAsB,GAAsB,IAAI,YAAY,EAAO;QAE7E,IAAA,CAAA,MAAM,GAAG,EAAE;AA0CX,QAAA,IAAA,CAAA,KAAK,GAAG;AACN,YAAA,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,SAAS,EAAE;AAC7C,YAAA,EAAE,GAAG,EAAE,mBAAmB,EAAE,KAAK,EAAE,SAAS,EAAE;AAC9C,YAAA,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE;AACxC,YAAA,EAAE,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,SAAS,EAAE;AAC5C,YAAA,EAAE,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,SAAS,EAAE;AAC3C,YAAA,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,SAAS,EAAE;SAC9C;IA9CgG;AAEjG,IAAA,sBAAsB,CAAC,KAAK,EAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AACzB,YAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS;QACnC;aAAO;AACL,YAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;QAC3B;IACF;AAEA,IAAA,qBAAqB,CAAC,KAAK,EAAA;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACxB,YAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS;QACnC;aAAO;AACL,YAAA,IAAI,CAAC,OAAO,GAAG,SAAS;QAC1B;IACF;AAEA,IAAA,kBAAkB,CAAC,KAAK,EAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS;QACpC;aAAO;AACL,YAAA,IAAI,CAAC,IAAI,GAAG,SAAS;QACvB;IACF;AAEA,IAAA,aAAa,CAAC,IAAS,EAAA;AACrB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;AACnC,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe;AAC3C,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc;AACzC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrD,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AAC3B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;AACrB,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB;AAC7C,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB;AAC7C,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,iBAAiB,CAAC;QACjD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC;IAC3C;IAWA,aAAa,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,iBAAiB,CAAC;IAC1M;IAEA,wBAAwB,GAAA;AACtB,QAAA,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,kBAAkB,CAAC;AACtC,QAAA,IAAI,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE;AAClE,YAAA,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,GAAG,IAAI;QACxC;AACA,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC;IACxC;IAEA,kBAAkB,GAAA;AAChB,QAAA,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC;AACvC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC;QACnF,IAAI,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,YAAY,CAAC,EAAE;AAC/H,YAAA,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,GAAG,IAAI;QACzC;AACA,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC;IACzC;AAEA,IAAA,oBAAoB,CAAC,MAAM,EAAA;QACzB,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE;AAC9B,YAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS;YAClC;QACF;QACA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,MAAM,CAAC;IAC3E;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;QAChB,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;AAC9C,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI,CAAC,kBAAkB,EAAE;QAC3B;AACA,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAI,CAAC,wBAAwB,EAAE;QACjC;QACA,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,UAAU;IAC3C;AAEA,IAAA,mBAAmB,CAAC,YAAY,GAAG,EAAE,EAAE,gBAAuB,EAAA;QAC5D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAC1B,MAAM,kBAAkB,GAAQ,gBAAgB,EAAE,IAAI,CAAC,CAAC,KAAK,KAAI;AAC/D,gBAAA,IAAI,UAAU,GAAG,KAAK,CAAC,YAAY;gBACnC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE;oBAC5C,UAAU,IAAI,GAAG,GAAG,KAAK,EAAE,MAAM,EAAE,eAAe;gBACpD;gBACA,OAAO,UAAU,KAAK,YAAY,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG;AACrD,YAAA,CAAC,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,kBAAkB;AAC5C,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,YAAY,EAAE,gBAAgB,CAAC;IACvE;+GA7HW,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAc,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,i2BC5BtC,0xEAoEA,EAAA,MAAA,EAAA,CAAA,idAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,2BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,YAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,sBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,YAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,0BAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,YAAA,EAAA,aAAA,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iCAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,MAAA,EAAA,WAAA,EAAA,YAAA,EAAA,aAAA,EAAA,YAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDxCa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,cAGrB,KAAK,EAAA,QAAA,EAAA,0xEAAA,EAAA,MAAA,EAAA,CAAA,idAAA,CAAA,EAAA;;sBAIlB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAIA,SAAS;uBAAC,cAAc;;;AEnD3B;;;;;;;;;;;;;;AAcE;MA8BW,aAAa,CAAA;AAuBtB,IAAA,WAAA,CAAoB,cAA8B,EAAA;QAA9B,IAAA,CAAA,cAAc,GAAd,cAAc;QAtBlC,IAAA,CAAA,IAAI,GAAG,EAAE;QACT,IAAA,CAAA,MAAM,GAAG,IAAI;QACb,IAAA,CAAA,KAAK,GAAG,EAAE;QACV,IAAA,CAAA,QAAQ,GAAG,IAAI;QACf,IAAA,CAAA,SAAS,GAAG,IAAI;QAChB,IAAA,CAAA,UAAU,GAAG,IAAI;QACjB,IAAA,CAAA,SAAS,GAAQ,IAAI;QACrB,IAAA,CAAA,eAAe,GAAG,EAAE;QACpB,IAAA,CAAA,gBAAgB,GAAG,EAAE;QACrB,IAAA,CAAA,kBAAkB,GAAG,EAAE;AACvB,QAAA,IAAA,CAAA,qBAAqB,GAAQ;AACzB,YAAA,mBAAmB,EAAE,SAAS;AAC9B,YAAA,0BAA0B,EAAE,SAAS;AACrC,YAAA,gBAAgB,EAAE,SAAS;AAC3B,YAAA,cAAc,EAAE;SACnB;QACD,IAAA,CAAA,kBAAkB,GAAU,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,cAAc,CAAC;AACpF,QAAA,IAAA,CAAA,aAAa,GAAiB,IAAI,YAAY,EAAE;QACxC,IAAA,CAAA,KAAK,GAAU,EAAE;QACjB,IAAA,CAAA,WAAW,GAAa,EAAE;QAC1B,IAAA,CAAA,WAAW,GAAa,EAAE;IAGlC;;AAGQ,IAAA,OAAO,CAAC,CAAM,EAAA;AAClB,QAAA,OAAO,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE;IACrC;AAEQ,IAAA,GAAG,CAAC,CAAM,EAAE,GAAW,EAAE,MAAM,GAAG,EAAE,EAAA;AACxC,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,GAAG,GAAG,MAAM;IACrD;AAEQ,IAAA,EAAE,CAAC,EAAU,EAAA;AACjB,QAAA,OAAO,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;IACtC;AAEQ,IAAA,KAAK,CAAC,QAAgB,EAAA;QAC1B,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC1D;AAEA,IAAA,OAAO,CAAC,QAAa,EAAA;AACjB,QAAA,IAAI,QAAQ,CAAC,IAAI,IAAI,SAAS;YAAE,OAAO,QAAQ,CAAC,IAAI;aAC/C;AACD,YAAA,IAAI,QAAQ,CAAC,IAAI,IAAI,IAAI;AAAE,gBAAA,OAAO,QAAQ;iBACrC;gBACD,IAAI,QAAQ,CAAC,IAAI;oBAAE,OAAO,QAAQ,CAAC,IAAI;qBAClC;AACD,oBAAA,IAAI,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC7C,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI;oBACjC;yBAAO;AACH,wBAAA,OAAO,QAAQ;oBACnB;gBACJ;YACJ;QACJ;IACJ;IAEA,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAA;AAChE,QAAA,IAAI,MAAM,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC;AACvE,YAAA,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE;AACxB,gBAAA,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS;AAC1B,gBAAA,IAAI,IAAI,EAAE,QAAQ,CAAC,WAAW,EAAE;AAC5B,oBAAA,MAAM,KAAK,GAAc,IAAI,CAAC,QAAQ,CAAC,SAAS;AAChD,oBAAA,IAAI,SAAS;AACb,oBAAA,IAAG,KAAK;AAAE,wBAAA,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AACrC,oBAAA,IAAI,SAAS,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;AAAE,wBAAA,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE;gBACnE;YACJ;QACJ;QACA,OAAO,IAAI,CAAC,KAAK;IACrB;AAEA,IAAA,MAAM,CAAC,MAAW,EAAE,IAAsB,EAAE,WAAqB,EAAE,WAAqB,EAAA;AACpF,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,MAAM,CAAC,UAAU,EAAE;YACnB,MAAM,SAAS,GAAG,CAAC;YACnB,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;QAC/C;QACA,MAAM,UAAU,GAAG,EAAE;AACrB,QAAA,IAAI,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,EAAE;YAChD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAAC;QACnE;AACA,QAAA,IAAI,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,IAAI,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE;YAC1F,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC;YAC1D,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC;QAChE;AACA,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,UAAU,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAC3C,OAAO,IAAI,CAAC,KAAK;IACrB;IAEA,QAAQ,CAAC,MAAW,EAAE,QAAa,EAAA;QAC/B,IAAI,MAAM,GAAG,EAAE;AACf,QAAA,MAAM,GAAG,EAAC,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAC;AAC9D,QAAA,OAAO,MAAM;IACjB;AAEA,IAAA,cAAc,CAAC,MAAM,EAAE,QAAa,EAAE,SAAkB,EAAA;QACpD,IAAI,MAAM,GAAG,EAAE;AACf,QAAA,KAAK,IAAI,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE;YAC/B,MAAM,GAAG,EAAC,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,EAAC;QACzG;AACA,QAAA,OAAO,MAAM;IACjB;IAEA,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAA;QACpD,IAAI,MAAM,GAAG,EAAE;QACf,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;AAEjC,QAAA,IAAI,IAAI,IAAI,QAAQ,EAAE;YAClB,IAAI,YAAY,GAAG,GAAG;AACtB,YAAA,IAAI,SAAS;AAAE,gBAAA,YAAY,GAAG,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,GAAG,EAAE;AACnD,YAAA,IAAI,QAAQ,CAAC,UAAU,EAAE;AACrB,gBAAA,MAAM,GAAG,EAAC,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAC;YAClF;QACJ;aAAO;YACH,IAAI,QAAQ,GAAW,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;AAC3C,YAAA,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE;gBAC1E,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,CAAA,EAAG,GAAG,CAAA,SAAA,CAAW,CAAC;YAEjD;AAAO,iBAAA,IAAI,IAAI,IAAI,SAAS,EAAE;AAC1B,gBAAA,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;oBAClD,IAAI,GAAG,GAAG,IAAI;oBACd,IAAI,GAAG,GAAG,IAAI;oBACd,IAAI,QAAQ,CAAC,OAAO;AAAE,wBAAA,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;oBACpD,IAAI,QAAQ,CAAC,OAAO;AAAE,wBAAA,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;oBACpD,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE;wBAC3B,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,CAAA,cAAA,CAAgB,CAAC;oBAChD;yBAAO;AACH,wBAAA,IAAI,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;wBAC1B,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,EAAE;4BAC1B,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,CAAA,cAAA,EAAiB,GAAG,CAAA,SAAA,CAAW,CAAC;wBAC/D;wBACA,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,EAAE;4BAC1B,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,CAAA,cAAA,EAAiB,GAAG,CAAA,SAAA,CAAW,CAAC;wBAC/D;oBACJ;gBACJ;YACJ;QACJ;AACA,QAAA,OAAO,MAAM;IACjB;IAEA,QAAQ,CAAC,MAAW,EAAE,GAAW,EAAE,IAAY,EAAE,KAAU,EAAE,SAAmB,EAAA;AAC5E,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACf,YAAA,IAAI,IAAI,IAAI,OAAO,EAAE;gBACjB,KAAK,GAAG,EAAE;YACd;AAAO,iBAAA,IAAI,IAAI,IAAI,SAAS,EAAE;gBAC1B,KAAK,GAAG,CAAC;YACb;AAAO,iBAAA,IAAI,IAAI,IAAI,SAAS,EAAE;gBAC1B,KAAK,GAAG,KAAK;YACjB;iBAAO;gBACH,KAAK,GAAG,EAAE;YACd;QACJ;AAAO,aAAA,IAAI,IAAI,IAAI,SAAS,EAAE;YAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC;YACnC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YACtB,IAAI,KAAK,EAAE;AACP,gBAAA,EAAE,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,MAAO,IAAoB,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;AAClH,gBAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE;AAC5D,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,QAAQ,CAAC;gBAC1E,IAAI,UAAU,EAAE;AACX,oBAAA,UAA+B,CAAC,QAAQ,GAAG,IAAI;AAChD,oBAAA,IAAI,UAAU,CAAC,OAAO,KAAK,OAAO;AAAG,wBAAA,UAA+B,CAAC,KAAK,GAAG,EAAE;gBACnF;YACJ;iBAAO;AACH,gBAAA,EAAE,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;YAC9B;QACJ;aAAO;AACH,YAAA,IAAI,IAAI,IAAI,OAAO,EAAE;AACjB,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;AACjE,gBAAA,IAAI,UAAU;AAAE,oBAAA,UAAU,CAAC,SAAS,GAAG,EAAE;AACzC,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBAC/C,IAAI,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;AAC3C,oBAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;AAC/D,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;wBAC5B,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;oBAC5E;gBACJ;AACA,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACnC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE;wBAC7B,IAAI,MAAM,GAAG,EAAE;wBACf,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;AACvB,4BAAA,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;wBAC7C;wBACA,IAAI,KAAK,GAAG,EAAE;AACd,wBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;wBACxD,MAAM,KAAK,GAAG,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC;AAChC,wBAAA,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC;AACtD,wBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;4BAClC,MAAM,OAAO,GAAG,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;4BAC7D,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;wBAC/E;wBACA,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC7C,wBAAA,OAAO,CAAC,SAAS,GAAG,SAAS;wBAC7B,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE;AAC3C,wBAAA,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,QAAQ,EAAE;AACvC,wBAAA,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/D,wBAAA,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC;oBACxE;yBAAO;wBACH,IAAI,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;AAC3C,4BAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;AAC/D,4BAAA,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,EAAE;AAC/B,gCAAA,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;gCAC3D,IAAI,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;AAAE,oCAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;4BAC7E;wBACJ;6BAAO;4BACH,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC7C,4BAAA,OAAO,CAAC,SAAS,GAAG,KAAK;AACzB,4BAAA,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC;AAC9B,4BAAA,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/D,4BAAA,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC;wBACxE;oBACJ;gBACJ;YACJ;iBAAO;AACH,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AACjD,gBAAA,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO;AAAG,oBAAA,OAA4B,CAAC,KAAK,GAAG,KAAK;YAClF;QACJ;AACA,QAAA,OAAO,KAAK;IAChB;AAEA,IAAA,QAAQ,CAAC,GAAW,EAAE,QAAa,EAAE,IAAS,EAAE,SAAmB,EAAA;QAC/D,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,EAAE;AACnC,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;AACd,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAC/C,IAAI,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;AAC3C,gBAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;AAC/D,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;AAC5B,oBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AACxD,oBAAA,IAAI,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;AAAE,wBAAA,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAClF;YACJ;iBAAO;AACH,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;gBACjE,IAAI,UAAU,EAAE;AACZ,oBAAA,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;wBAC1C,MAAM,EAAE,GAAG,CAAgB;wBAC3B,IAAI,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;4BAC9B,MAAM,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;AACrC,4BAAA,MAAM,KAAK,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC;4BACpD,MAAM,GAAG,GAAQ,EAAE;AACnB,4BAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gCACnC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;AAChC,gCAAA,MAAM,IAAI,GAAQ,IAAI,CAAC,KAAK,EAAE;gCAC9B,MAAM,KAAK,GAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;AACxC,gCAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;gCACrB,IAAI,IAAI,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAY,CAAC,EAAE;oCAC1C,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;gCAC7B;qCAAO;AACH,oCAAA,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK;gCACrB;4BACJ;4BACA,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;wBACvB;6BAAO;4BACH,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC;wBAChC;AACJ,oBAAA,CAAC,CAAC;gBACN;YACJ;QACJ;aAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,SAAS,EAAE;YAC5C,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK;QACpF;aAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,SAAS,EAAE;AAC5C,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAA4B;AAC5E,YAAA,IAAI,QAAQ,GAAQ,OAAO,EAAE,KAAK;AAClC,YAAA,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AAChD,gBAAA,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE;gBAC1B,IAAI,QAAQ,IAAI,EAAE,IAAI,KAAK,CAAC,QAAe,CAAC,EAAE;oBAC1C,QAAQ,GAAG,CAAC;oBACZ,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;wBAAE,QAAQ,GAAG,IAAI;gBAClE;qBAAO;AACH,oBAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;gBAC/B;AACA,gBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ;YACxB;iBAAO;AACH,gBAAA,OAAO,IAAI,CAAC,GAAG,CAAC;YACpB;QACJ;aAAO;AACH,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAA4B;AAC5E,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,EAAE,KAAK;QAC9B;AACA,QAAA,OAAO,IAAI;IACf;AAEA,IAAA,YAAY,CAAC,EAAU,EAAA;QACnB,MAAM,SAAS,GAAU,EAAE;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,WAAW,CAAC;AAC3C,QAAA,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,SAAS;AAChC,QAAA,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;YACzC,MAAM,EAAE,GAAG,CAAgB;YAC3B,IAAI,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBAC9B,MAAM,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;gBACrC,MAAM,GAAG,GAAQ,EAAE;AACnB,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACnC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;AAChC,oBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE;oBACzB,MAAM,KAAK,GAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;AACxC,oBAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;wBACf,GAAG,CAAC,IAAc,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;oBACvC;yBAAO;AACH,wBAAA,GAAG,CAAC,IAAc,CAAC,GAAG,KAAK;oBAC/B;gBACJ;AACA,gBAAA,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;YACvB;iBAAO;AACH,gBAAA,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC;YAChC;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,SAAS;IACpB;AAEA,IAAA,gBAAgB,CAAC,MAAW,EAAE,GAAW,EAAE,QAAa,EAAE,SAAmB,EAAA;QACzE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;AACnC,QAAA,IAAI,IAAI,IAAI,QAAQ,EAAE;AAClB,YAAA,KAAK,IAAI,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE;AACpC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;YACvE;QACJ;aAAO;AACH,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAC9C,IAAI,QAAQ,GAAQ,EAAE;AACtB,YAAA,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI;AAAE,gBAAA,QAAQ,GAAI,IAAyB,CAAC,KAAK;AACxE,YAAA,IAAI,IAAI,IAAI,SAAS,EAAE;AACnB,gBAAA,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;oBAClD,IAAI,GAAG,GAAkB,IAAI;oBAC7B,IAAI,GAAG,GAAkB,IAAI;oBAC7B,IAAI,QAAQ,CAAC,OAAO;AAAE,wBAAA,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;oBACpD,IAAI,QAAQ,CAAC,OAAO;AAAE,wBAAA,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;AACpD,oBAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAAE,wBAAA,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;yBACvD;AACD,wBAAA,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC5B,wBAAA,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG;AAAE,4BAAA,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC3D,wBAAA,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG;AAAE,4BAAA,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAC/D;gBACJ;YACJ;AAAO,iBAAA,IAAI,IAAI,IAAI,OAAO,EAAE;AACxB,gBAAA,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC5D,oBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;oBAC/C,IAAI,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;AAC3C,wBAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;wBAC/D,IAAI,YAAY,GAAG,KAAK;AACxB,wBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;AAC5B,4BAAA,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;4BACxD,IAAI,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;gCACrC,YAAY,GAAG,IAAI;gCACnB;4BACJ;wBACJ;AACA,wBAAA,IAAI,CAAC,YAAY;AAAE,4BAAA,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;oBACpD;yBAAO;AACH,wBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;AACjE,wBAAA,IAAI,UAAU,EAAE,QAAQ,CAAC,MAAM,IAAI,CAAC;AAAE,4BAAA,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;oBACvE;gBACJ;YACJ;iBAAO;gBACH,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC;AAAE,oBAAA,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;YACzH;QACJ;IACJ;AAEQ,IAAA,oBAAoB,CAAC,IAAsB,EAAE,SAAiB,EAAE,GAAW,EAAE,SAAmB,EAAE,QAAa,EAAE,MAAY,EAAE,UAAgB,EAAA;QACnJ,IAAI,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC;AACxD,QAAA,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACtD,IAAI,SAAS,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;AAAE,YAAA,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC;AACrF,QAAA,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACtF,QAAA,MAAM,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,eAAe;AAC1D,QAAA,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1F,YAAY,CAAC,QAAQ,CAAC,SAAS,EAAE,UAAU,KAAK,OAAO,CAAC;QACxD,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,KAAK,aAAa,CAAC;QACpD,MAAM,SAAS,GAAG,CAAC,GAAG,SAAS,EAAE,GAAG,CAAC;AACrC,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC;AACtE,QAAA,OAAO,YAAY;IACvB;AAEQ,IAAA,iBAAiB,CAAC,IAAsB,EAAE,SAAiB,EAAE,GAAW,EAAE,SAAmB,EAAA;QACjG,IAAI,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,2BAA2B,CAAC;AACpE,QAAA,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACtD,IAAI,SAAS,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;AAAE,YAAA,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC;AACrF,QAAA,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC;AAC1C,QAAA,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAChE,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;YACvD,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,YAAY,CAAC;AAClD,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,YAAY;IACvB;AAEQ,IAAA,cAAc,CAAC,IAAsB,EAAE,SAAiB,EAAE,GAAW,EAAE,SAAmB,EAAA;QAC9F,IAAI,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC;AAC7D,QAAA,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACtD,IAAI,SAAS,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;AAAE,YAAA,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC;AACrF,QAAA,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC;QACvC,YAAY,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAA,kBAAA,EAAqB,GAAG,CAAA,CAAE,CAAC;AAChE,QAAA,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AAChE,QAAA,OAAO,YAAY;IACvB;IAEQ,iBAAiB,CAAC,IAAsB,EAAE,SAAiB,EAAE,GAAW,EAAE,QAAa,EAAE,SAAmB,EAAA;QAChH,IAAI,WAAW,GAAG,uBAAuB;QACzC,IAAI,QAAQ,CAAC,OAAO,IAAI,IAAI,IAAI,QAAQ,CAAC,OAAO,IAAI,IAAI;AAAE,YAAA,WAAW,GAAG,wBAAwB,GAAG,QAAQ,CAAC,OAAO,GAAG,GAAG,GAAG,QAAQ,CAAC,OAAO;aACvI;AACD,YAAA,IAAI,QAAQ,CAAC,OAAO,IAAI,IAAI;AAAE,gBAAA,WAAW,GAAG,oBAAoB,GAAG,QAAQ,CAAC,OAAO;AACnF,YAAA,IAAI,QAAQ,CAAC,OAAO,IAAI,IAAI;AAAE,gBAAA,WAAW,GAAG,mBAAmB,GAAG,QAAQ,CAAC,OAAO;QACtF;QACA,IAAI,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC;AAC7D,QAAA,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACtD,IAAI,SAAS,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;AAAE,YAAA,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC;AACrF,QAAA,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC;AAC9C,QAAA,YAAY,CAAC,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC;AACjD,QAAA,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AAChE,QAAA,OAAO,YAAY;IACvB;IAEQ,gBAAgB,CAAC,IAAsB,EAAE,SAAiB,EAAE,GAAW,EAAE,IAAc,EAAE,SAAmB,EAAA;AAChH,QAAA,MAAM,GAAG,GAAG,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE;QAC3C,IAAI,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC;AAC/D,QAAA,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACtD,YAAY,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAA,OAAA,EAAU,GAAG,CAAA,CAAE,CAAC;QACrD,IAAI,SAAS,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;AAAE,YAAA,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC;AACrF,QAAA,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC;AACxC,QAAA,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AAChE,QAAA,OAAO,YAAY;IACvB;IAEQ,sBAAsB,CAAC,IAAsB,EAAE,SAAiB,EAAE,GAAW,EAAE,IAAc,EAAE,SAAmB,EAAA;QACtH,IAAI,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,0BAA0B,CAAC;AACnE,QAAA,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACtD,IAAI,SAAS,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;AAAE,YAAA,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC;AACrF,QAAA,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC;AACvC,QAAA,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC;AACxC,QAAA,YAAY,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAA,cAAA,CAAgB,CAAC;AACtD,QAAA,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AAChE,QAAA,OAAO,YAAY;IACvB;AAEA,IAAA,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,YAAY,EAAA;QACpC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAQ,KAAI;YAC5B,IAAI,GAAG,KAAK,gBAAgB,IAAI,GAAG,CAAC,GAAG,KAAK,kBAAkB,EAAE;gBAC5D,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,KAAK;YACxD;YACA,IAAI,GAAG,KAAK,aAAa,IAAI,GAAG,CAAC,GAAG,KAAK,mBAAmB,EAAE;gBAC1D,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,KAAK;YACxD;YACA,IAAI,GAAG,KAAK,iBAAiB,IAAI,GAAG,CAAC,GAAG,KAAK,kBAAkB,EAAE;gBAC7D,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,KAAK;YACxD;AACJ,QAAA,CAAC,CAAC;IACN;AAEQ,IAAA,kBAAkB,CAAC,IAAsB,EAAE,SAAiB,EAAE,GAAW,EAAE,SAAmB,EAAA;QAClG,IAAI,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC;AAC/D,QAAA,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACtD,IAAI,SAAS,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;AAAE,YAAA,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC;AACrF,QAAA,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC;AACvC,QAAA,YAAY,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAA,mCAAA,CAAqC,CAAC;AAC3E,QAAA,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AAChE,QAAA,OAAO,YAAY;IACvB;AAEQ,IAAA,eAAe,CAAC,IAAsB,EAAE,SAAiB,EAAE,SAAmB,EAAE,UAA+B,EAAA;QACnH,IAAI,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC;QAC5D,OAAO;AACH,YAAA,GAAG,EAAE,YAAY;AACjB,YAAA,SAAS,EAAE;SACd;IACL;AAEQ,IAAA,qBAAqB,CAAC,IAAsB,EAAE,SAAiB,EAAE,SAAmB,EAAE,UAA+B,EAAA;QACzH,IAAI,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,yBAAyB,CAAC;QAClE,OAAO;AACH,YAAA,GAAG,EAAE,kBAAkB;AACvB,YAAA,SAAS,EAAE,YAAY;AACvB,YAAA,QAAQ,EAAE;SACb;IACL;AAEQ,IAAA,wBAAwB,CAAC,IAAsB,EAAE,SAAiB,EAAE,SAAmB,EAAE,UAA+B,EAAA;QAC5H,IAAI,WAAW,GAAG,SAAS;QAC3B,IAAI,YAAY,GAAG,SAAS;QAC5B,IAAI,YAAY,GAAG,KAAK;QACxB,IAAI,WAAW,GAAG,KAAK;QACvB,IAAI,YAAY,GAAG,KAAK;QACxB,IAAI,QAAQ,GAAG,KAAK;AACpB,QAAA,IAAI,UAAU,CAAC,QAAQ,EAAE;YACrB,YAAY,GAAG,IAAI;AACnB,YAAA,YAAY,GAAG,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YACnE,IAAI,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE,UAAU,CAAC,SAAS,CAAC;gBAAE,WAAW,GAAG,UAAU;QACjF;AACA,QAAA,IAAI,UAAU,CAAC,OAAO,EAAE;YACpB,WAAW,GAAG,IAAI;YAClB,IAAI,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,CAAC,SAAS,CAAC;gBAAE,WAAW,GAAG,UAAU;QAChF;AACA,QAAA,IAAI,UAAU,CAAC,QAAQ,EAAE;YACrB,YAAY,GAAG,IAAI;YACnB,IAAI,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE,UAAU,CAAC,SAAS,CAAC;gBAAE,WAAW,GAAG,UAAU;QACjF;AACA,QAAA,IAAI,UAAU,CAAC,IAAI,EAAE;YACjB,QAAQ,GAAG,IAAI;YACf,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,CAAC,SAAS,CAAC;gBAAE,WAAW,GAAG,UAAU;QAC7E;QACA,IAAI,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,iCAAiC,CAAC;QAC1E,IAAI,SAAS,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;AAAE,YAAA,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC;AACrF,QAAA,YAAY,CAAC,QAAQ,CAAC,cAAc,EAAE,YAAY,CAAC;AACnD,QAAA,YAAY,CAAC,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC;AACjD,QAAA,YAAY,CAAC,QAAQ,CAAC,cAAc,EAAE,YAAY,CAAC;AACnD,QAAA,YAAY,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC;AAC3C,QAAA,YAAY,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC;AACrC,QAAA,YAAY,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC;AACpC,QAAA,YAAY,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC;AACrC,QAAA,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;AACjC,QAAA,YAAY,CAAC,QAAQ,CAAC,cAAc,EAAE,YAAY,CAAC;AACnD,QAAA,IAAI,WAAW;AAAE,YAAA,YAAY,CAAC,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC;AAClE,QAAA,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAChE,OAAO;AACH,YAAA,GAAG,EAAE,KAAK;AACV,YAAA,SAAS,EAAE;SACd;IACL;AAEQ,IAAA,QAAQ,CAAC,GAAW,EAAA;QACxB,OAAO,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE;IACnE;IAEQ,SAAS,CAAC,MAAW,EAAE,IAAsB,EAAE,SAAiB,EAAE,SAAmB,EAAE,MAAY,EAAA;AACvG,QAAA,MAAM,EAAC,aAAa,EAAE,kBAAkB,EAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC;AACrG,QAAA,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1B,YAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACtB,gBAAA,IAAI,MAAM,EAAE,KAAK,EAAE;AACf,oBAAA,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,aAAa,CAAC;gBACtD;qBAAO,IAAI,MAAM,EAAE;AACf,oBAAA,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,aAAa,CAAC;gBACrC;YACJ;iBAAO;AACH,gBAAA,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,aAAa,CAAC;YAClD;QACJ;AACA,QAAA,KAAK,IAAI,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE;AAC/B,YAAA,IAAI,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;gBACzE;YACJ;YACA,IAAI,IAAI,GAAQ,EAAE;YAClB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC;AAC9F,YAAA,IAAI,CAAC,GAAG,GAAG,GAAG;AACd,YAAA,IAAI,CAAC,SAAS,GAAG,SAAS;YAC1B,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,IAAI;AACxC,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YACzB,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACvC,gBAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,IAAI;YAC1C;AAAE,YAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACxB,gBAAA,IAAI,MAAM,EAAE,KAAK,EAAE;AACf,oBAAA,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC3B;qBAAO,IAAI,MAAM,EAAE;AACf,oBAAA,MAAM,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC;gBACzB;YACJ;iBAAO;AACH,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YACzB;QACJ;IACJ;AAEA,IAAA,cAAc,CAAC,IAAI,EAAA;AACf,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;YACvB;QACJ;AACA,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAClB,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,KAAK,KAAI;YACtD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;AAC3B,gBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,uBAAA,CAAyB,EACzB,2FAA2F,CAC9F;AACD,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;gBACrC;YACJ;YACA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACvC,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE;AACjD,gBAAA,IAAI,CAAC,UAAU,GAAG,EAAE;YACxB;AACA,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC9B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;QACxD,CAAC,CAAC,CACL;AACD,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAClB,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC,MAAK;YACnD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU;QAC1D,CAAC,CAAC,CACL;IACL;AAEA,IAAA,aAAa,CAAC,IAAS,EAAA;QACnB,IAAI,OAAO,GAAG,IAAI;QAClB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AAC3B,YAAA,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE;gBAC1B,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;oBACrC,IAAI,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE;wBACzC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;4BAC5C,OAAO,GAAG,KAAK;wBACnB;oBACJ;AACJ,gBAAA,CAAC,CAAC;YACN;iBAAO;gBACH,IAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE;oBACvC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;wBAC1C,OAAO,GAAG,KAAK;oBACnB;gBACJ;YACJ;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,OAAO;IAClB;AAEA,IAAA,WAAW,CAAC,IAAI,EAAA;QACZ,IAAI,QAAQ,GAAG,EAAE;QACjB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;YAC3B,IAAI,OAAO,GAAG,IAAI;AAClB,YAAA,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE;AAC1B,gBAAA,IAAI,OAAO,CAAC,UAAU,EAAE;oBACpB,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,UAAU;gBAC9C;qBAAO;AACH,oBAAA,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE;gBAC9B;YACJ;iBAAO;gBACH,IAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE;oBAC7C,MAAM,KAAK,GAAG,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE;AAC3D,oBAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;wBACnB,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK;AACnC,oBAAA,CAAC,CAAC;oBACF,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAC,EAAE,CAAC;gBACnD;qBAAO,IAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE;AACjD,oBAAA,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU;oBAC7D,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,GAAG,SAAS;gBACrD;AAAO,qBAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACtB,oBAAA,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;gBACrD;YACJ;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,QAAQ;IACnB;IAEQ,oBAAoB,CAAC,SAAS,EAAE,SAAS,EAAA;AAC7C,QAAA,IAAI,UAAU;AACd,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK;AACtB,QAAA,SAAS,CAAC,OAAO,CAAC,CAAC,MAAW,KAAI;AAC9B,YAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAS,KAAI;AACxB,gBAAA,IAAI,IAAI,CAAC,GAAG,KAAK,MAAM,EAAE;oBACrB,UAAU,GAAG,IAAI;AACjB,oBAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACZ,wBAAA,KAAK,GAAG,IAAI,CAAC,KAAK;oBACtB;gBACJ;AACJ,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AACF,QAAA,UAAU,CAAC,KAAK,GAAG,SAAS;IAChC;AAEQ,IAAA,gBAAgB,CAAC,MAAW,EAAE,IAAsB,EAAE,SAAiB,EAAE,SAAmB,EAAA;QAChG,MAAM,aAAa,GAAG,EAAE;QACxB,IAAI,OAAO,GAAG,SAAS;QACvB,IAAI,QAAQ,GAAG,SAAS;QACxB,IAAI,IAAI,GAAG,SAAS;QACpB,IAAI,QAAQ,GAAG,SAAS;QACxB,IAAI,eAAe,GAAG,SAAS;QAC/B,IAAI,WAAW,GAAG,SAAS;QAC3B,IAAI,cAAc,GAAG,SAAS;QAC9B,IAAI,UAAU,GAAG,SAAS;QAC1B,IAAI,kBAAkB,GAAG,EAAE;AAC3B,QAAA,KAAK,IAAI,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE;YAC/B,IAAI,OAAO,GAAG,IAAI;YAClB,IAAI,GAAG,KAAK,MAAM;AAAE,gBAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;iBAC5C,IAAI,GAAG,KAAK,SAAS;AAAE,gBAAA,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;iBACvD,IAAI,GAAG,KAAK,UAAU;AAAE,gBAAA,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;iBACzD,IAAI,GAAG,KAAK,UAAU;AAAE,gBAAA,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;iBACzD,IAAI,GAAG,KAAK,iBAAiB;AAAE,gBAAA,eAAe,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;iBACvE,IAAI,GAAG,KAAK,aAAa;AAAE,gBAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;iBAC/D,IAAI,GAAG,KAAK,gBAAgB;AAAE,gBAAA,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;iBACrE,IAAI,GAAG,KAAK,YAAY;AAAE,gBAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;;gBAC7D,OAAO,GAAG,KAAK;YAEpB,IAAI,OAAO,EAAE;AACT,gBAAA,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC;YAChC;QACJ;AACA,QAAA,IAAI,CAAC,QAAQ,IAAI,OAAO,IAAI,QAAQ,IAAI,IAAI,KAAK,EAAE,eAAe,IAAI,cAAc,IAAI,WAAW,CAAC,EAAE;YAClG,MAAM,UAAU,GAAwB,EAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAC;AAC3E,YAAA,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QAC7F;AACA,QAAA,IAAI,eAAe,IAAI,cAAc,IAAI,WAAW,EAAE;AAClD,YAAA,MAAM,UAAU,GAAwB;AACpC,gBAAA,QAAQ,EAAE,eAAe;AACzB,gBAAA,OAAO,EAAE,cAAc;AACvB,gBAAA,QAAQ,EAAE,SAAS;AACnB,gBAAA,IAAI,EAAE;aACT;AACD,YAAA,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AACtF,YAAA,kBAAkB,GAAG,CAAC,GAAG,kBAAkB,EAAE,GAAG,CAAC,kBAAkB,EAAE,mBAAmB,EAAE,kBAAkB,CAAC,CAAC;QAClH;QACA,IAAI,UAAU,EAAE;AACZ,YAAA,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QACpF;AACA,QAAA,OAAO,EAAC,aAAa,EAAE,kBAAkB,EAAC;IAC9C;IAEQ,QAAQ,CAAC,IAAsB,EAAE,SAAiB,EAAE,GAAW,EAAE,QAAa,EAAE,SAAmB,EAAE,MAAY,EAAA;QACrH,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QACnC,IAAI,YAAY,GAA6B,IAAI;AACjD,QAAA,IAAI,IAAI,IAAI,QAAQ,EAAE;AAClB,YAAA,IAAI,QAAQ,CAAC,UAAU,EAAE;AACrB,gBAAA,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC;YACrG;QACJ;AAAO,aAAA,IAAI,IAAI,IAAI,SAAS,EAAE;AAC1B,YAAA,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,CAAC;QACpF;AAAO,aAAA,IAAI,IAAI,IAAI,OAAO,EAAE;YACxB,IAAI,KAAK,GAAQ,EAAE;YACnB,IAAI,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC;AAAE,gBAAA,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3E,IAAI,QAAQ,CAAC,KAAK;AAAE,gBAAA,KAAK,GAAG,QAAQ,CAAC,KAAK;YAC1C,IAAI,KAAK,CAAC,KAAK;AAAE,gBAAA,KAAK,GAAG,KAAK,CAAC,KAAK;AAEpC,YAAA,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,QAAQ,IAAI,KAAK,CAAC,UAAU,IAAI,IAAI,EAAE;gBAClE,MAAM,QAAQ,GAAG,EAAE;AACnB,gBAAA,KAAK,IAAI,MAAM,IAAI,KAAK,CAAC,UAAU,EAAE;oBACjC,QAAQ,CAAC,IAAI,CAAC;AACV,wBAAA,GAAG,EAAE,MAAM;AACX,wBAAA,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM;AACjC,qBAAA,CAAC;gBACN;AACA,gBAAA,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC;YAClG;iBAAO,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AAClC,gBAAA,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC;YAC3F;iBAAO;AAEH,gBAAA,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,CAAC;YAC3E;QACJ;AAAO,aAAA,IAAI,IAAI,IAAI,SAAS,EAAE;AAC1B,YAAA,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,CAAC;QAC1E;AAAO,aAAA,IAAI,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AAClD,YAAA,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;QAExF;AAAO,aAAA,IAAI,IAAI,IAAI,QAAQ,EAAE;AACzB,YAAA,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,CAAC;QACvE;AACA,QAAA,OAAO,YAAY;IACvB;AAEQ,IAAA,QAAQ,CAAC,MAAW,EAAE,GAAW,EAAE,GAAW,EAAA;QAClD,IAAI,MAAM,CAAC,GAAG,CAAC;AAAE,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAA,EAAG,MAAM,CAAC,GAAG,CAAC,CAAA,EAAA,EAAK,GAAG,CAAA,CAAE;;AAClD,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG;AACtB,QAAA,OAAO,MAAM;IACjB;+GAjvBS,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFV,MAAM,EAAA,CAAA,CAAA;;4FAET,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACpCD,MAAM,cAAc,GAAG;AACnB,IAAA,cAAc,EAAE,GAAG;AACnB,IAAA,YAAY,EAAE,GAAG;AACjB,IAAA,gBAAgB,EAAE,GAAG;AACrB,IAAA,UAAU,EAAE,IAAI;AAChB,IAAA,SAAS,EAAE,KAAK;AAChB,IAAA,MAAM,EAAE,IAAI;CACf;MAKY,kBAAkB,CAAA;AAC3B,IAAA,WAAA,CACY,OAAuB,EAAA;QAAvB,IAAA,CAAA,OAAO,GAAP,OAAO;IAEnB;AAEO,IAAA,QAAQ,CACX,QAAgB,EAChB,KAAY,EACZ,OAAc,EACd,eAAyB,EACzB,UAAoB,EACpB,OAAa,EACb,WAAW,GAAG,IAAI,EAAA;AAElB,QAAA,MAAM,UAAU,GAAG,OAAO,IAAI,IAAI,GAAG,OAAO,GAAG,cAAc;QAE7D,MAAM,IAAI,GAAG,EAAE;AAEf,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;;YAElB,MAAM,MAAM,GAAG,EAAE;AAEjB,YAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC1B,gBAAA,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM;AAC9C,gBAAA,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC;AAC9F,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU;YAC5B;AACA,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;AAGjB,YAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;gBACtB,MAAM,GAAG,GAAG,EAAE;AAEd,gBAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC1B,oBAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM;oBAC/C,IAAI,WAAW,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;AACjC,oBAAA,IAAI,SAAS,CAAC,WAAW,CAAC,EAAE;AACxB,wBAAA,WAAW,GAAG,EAAE,GAAG,WAAW;oBAClC;AACA,oBAAA,IAAI,OAAO,CAAC,WAAW,CAAC,EAAE;AACtB,wBAAA,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE;oBAClB;yBAAO;AACH,wBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;4BAC5B,GAAG,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;wBACrC;6BAAO;AACH,4BAAA,GAAG,CAAC,IAAI,CAAC,GAAG,WAAW;wBAC3B;oBACJ;gBACJ;AACA,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;YAClB;YAEA,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC;QAC1D;aAAO;AACH,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CACb,IAAI,YAAY,CACZ,SAAS,EACT,SAAS,EACT,kBAAkB,EAClB,gEAAgE,CACnE,CACJ;QACL;IACJ;AAEA,IAAA,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAW,EAAE,IAAK,EAAA;QAC1C,IAAI,QAAQ,GAAG,KAAK;QACpB,QAAQ,IAAI;AACR,YAAA,KAAK,UAAU;gBACX,QAAQ,GAAG,KAAK;gBAChB;AACJ,YAAA,KAAK,kBAAkB;gBACnB,QAAQ,GAAG,MAAM;gBACjB;AACJ,YAAA,KAAK,oBAAoB;gBACrB,QAAQ,GAAG,KAAK;gBAChB;;AAER,QAAA,IAAI,UAAU,IAAI,UAAU,CAAC,UAAU,EAAE;YACrC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,QAAQ,CAAC;QAClD;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;YAC5D,IAAI,EAAE,CAAA,EAAG,IAAI,CAAA,eAAA,CAAiB;AACjC,SAAA,CAAC;QACF,MAAM,CAAC,OAAO,EAAE,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE,CAAC;IAC9C;+GAtFS,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFf,MAAM,EAAA,CAAA,CAAA;;4FAET,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA;;;AClBD;;;;;;;;;;;;;;AAcE;AAsBI,MAAO,yBAA0B,SAAQ,oBAAoB,CAAA;IAa/D,WAAA,CACY,SAAwB,EACN,QAAyB,EACnD,aAAqC,EACrC,kBAAsC,EACX,UAA4B,EACpC,MAAc,EAAA;QAEjC,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,CAAC;QAP9D,IAAA,CAAA,SAAS,GAAT,SAAS;QAKE,IAAA,CAAA,MAAM,GAAN,MAAM;AAjBrB,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,cAAc;QAEpC,IAAA,CAAA,YAAY,GAAG,SAAS;QACxB,IAAA,CAAA,cAAc,GAAQ,EAAE;QACxB,IAAA,CAAA,SAAS,GAAG,EAAE;AAEL,QAAA,IAAA,CAAA,SAAS,GAAG;AACjB,YAAA,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAC;AAChC,YAAA,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAC;SACrC;AAuED,QAAA,IAAA,CAAA,0BAA0B,GAAG;AACzB,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE;AACX,gBAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;AAC9B,aAAA;YACD,gBAAgB,EAAE,MAAK;AACnB,gBAAA,OAAO,IAAI,CAAC,yBAAyB,CAAC,aAAa;YACvD;SACH;AAoCD,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,QAAY,EAAE,MAAW,KAA8B;YAC/D,IAAI,MAAM,GAAG,EAAE;YACf,IAAG,MAAM,EAAE;AACP,gBAAA,KAAK,IAAI,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE;oBAC/B,IAAI,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;AACrC,oBAAA,MAAM,GAAG,EAAC,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAC;gBACnF;AACA,gBAAA,OAAO,OAAO,CAAC,OAAO,CAAC,EAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,EAAC,CAAC;YAC/D;iBAAO;AACH,gBAAA,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC;YACpD;AACJ,QAAA,CAAC;QApHG,IAAI,CAAC,cAAc,EAAE;IACzB;IAEA,gBAAgB,GAAA;AAEZ,QAAA,MAAM,YAAY,GAAG,CAAC,GAAG,KAAI;AACzB,YAAA,OAAO,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI;AACtC,QAAA,CAAC;AAED,QAAA,MAAM,8BAA8B,GAAG;AACnC,YAAA,UAAU,EAAE,UAAU;SACzB;QACD,OAAO;AACH,YAAA;AACI,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,UAAU,EAAE,MAAM;AAClB,gBAAA,eAAe,EAAE,2BAA2B;gBAC5C,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;AACjD,gBAAA,YAAY,EAAE,sBAAsB;AACpC,gBAAA,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AAC/C,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;oBACA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;gBACrC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAClC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,UAAU,EAAE,MAAM;AAClB,gBAAA,eAAe,EAAE,2BAA2B;gBAC5C,qBAAqB,EAAE,IAAI,CAAC,yBAAyB;AACrD,gBAAA,YAAY,EAAE,YAAY;AAC1B,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,UAAU,EAAE,YAAY;AACxB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,8BAA8B;gBACrD,cAAc,EAAE,IAAI,CAAC,kBAAkB;AACvC,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACvC,aAAA;AACD,YAAA,IAAI,CAAC;SACR;IACL;AAaA,IAAA,IAAI,yBAAyB,GAAA;QACzB,OAAO,IAAI,CAAC,0BAA0B;IAC1C;IAEA,IAAI,yBAAyB,CAAC,MAAM,EAAA;AAChC,QAAA,IAAI,CAAC,0BAA0B,GAAG,MAAM;IAC5C;IAEA,cAAc,GAAA;AACV,QAAA,MAAM,IAAI,GAAG;AACT,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,MAAM,EAAE;SACX;AACD,QAAA,OAAO,KAAK,CAAC,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,EAAE,IAAI;AAClE,aAAA,IAAI,CAAC,CAAC,OAAY,KAAI;AACnB,YAAA,IAAI,CAAC,yBAAyB,CAAC,aAAa,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;YAC5E,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,UAAe,KAAI;AACrC,gBAAA,IAAI,CAAC,yBAAyB,CAAC,aAAa,CAAC,IAAI,CAAC;oBAC9C,KAAK,EAAE,UAAU,CAAC,IAAI;oBACtB,KAAK,EAAE,UAAU,CAAC;AACrB,iBAAA,CAAC;AACN,YAAA,CAAC,CAAC;YACF,OAAO,IAAI,CAAC,yBAAyB;AACzC,QAAA,CAAC,CAAC;IACV;IAEA,OAAO,CAAC,OAAqB,EAAE,IAAU,EAAA;;AAErC,QAAA,OAAO,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI;AAC1D,aAAA,IAAI,CAAC,CAAC,OAAY,KAAI;AACnB,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AACpC,QAAA,CAAC,CAAC;IACV;IAeA,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAU,EAAA;QACxD,IAAI,MAAM,GAAG,EAAE;QACf,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;AAC3C,QAAA,IAAI,IAAI,IAAI,QAAQ,EAAE;AAClB,YAAA,KAAK,IAAI,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE;gBACpC,MAAM,GAAG,EAAC,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,EAAC;YAC9G;QACJ;aAAO;YACH,IAAI,QAAQ,GAAW,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;AAC3C,YAAA,IAAI,IAAI,IAAI,SAAS,EAAE;AACnB,gBAAA,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;oBAClD,IAAI,GAAG,GAAG,IAAI;oBACd,IAAI,GAAG,GAAG,IAAI;oBACd,IAAI,QAAQ,CAAC,OAAO;AAAE,wBAAA,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;oBACpD,IAAI,QAAQ,CAAC,OAAO;AAAE,wBAAA,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;oBACpD,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE;AAC1B,wBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,gBAAgB;oBACnC;yBACK;AACD,wBAAA,IAAI,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;wBAC1B,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,EAAE;AAC1B,4BAAA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAA,cAAA,EAAiB,GAAG,WAAW;wBACjD;wBACA,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,EAAE;AAC1B,4BAAA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAA,cAAA,EAAiB,GAAG,WAAW;wBACjD;oBACJ;gBACJ;YACJ;AAAO,iBAAA,IAAI,IAAI,IAAI,OAAO,EAAE;;;;;;;;;;;;;;;;;;YAkB5B;iBAAO;AACH,gBAAA,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE;AAC1E,oBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAA,EAAG,GAAG,WAAW;gBACnC;YACJ;QACJ;AACA,QAAA,OAAO,MAAM;IACjB;AAEQ,IAAA,WAAW,CAAC,OAAY,EAAA;QAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;;YAEzB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;QACjD;AACA,QAAA,OAAO,OAAO;IAClB;AAEQ,IAAA,gBAAgB,CAAC,OAAY,EAAA;QACjC,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;YAC5B,GAAG,CAAC,UAAU,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACrC,YAAA,OAAO,GAAG;AACd,QAAA,CAAC,CAAC;IACN;AAEO,IAAA,UAAU,CAAC,IAAU,EAAA;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;QACzB,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,EAAE;AAC/B,YAAA,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC;QACxC;aAAO;AACH,YAAA,IAAI,CAAC,cAAc,GAAG,IAAIC,SAAO,EAAE;QACvC;AACA,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;IAC7B;+GA5NS,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,EAAA,EAAA,KAAA,EAetB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAAC,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,kBAAA,EAAA,EAAA,EAAA,KAAA,EAGhB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAlBpB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cAFtB,MAAM,EAAA,CAAA,CAAA;;4FAET,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAgBQ,MAAM;2BAAC,gBAAgB;;0BAGvB,MAAM;2BAAC,iBAAiB;;;ACtD1B,MAAM,IAAI,GAAG;AAClB,IAAA,eAAe,EAAE,aAAa;AAC9B,IAAA,cAAc,EAAE,YAAY;AAC5B,IAAA,eAAe,EAAE,aAAa;AAC9B,IAAA,gBAAgB,EAAE,cAAc;AAChC,IAAA,aAAa,EAAE,WAAW;AAC1B,IAAA,mBAAmB,EAAE,kBAAkB;AACvC,IAAA,mBAAmB,EAAE,iBAAiB;AACtC,IAAA,qBAAqB,EAAE,mBAAmB;AAC1C,IAAA,YAAY,EAAE,UAAU;AACxB,IAAA,oBAAoB,EAAE,kBAAkB;AACxC,IAAA,YAAY,EAAE,UAAU;AACxB,IAAA,iBAAiB,EAAE,eAAe;AAClC,IAAA,YAAY,EAAE,UAAU;AACxB,IAAA,gBAAgB,EAAE,cAAc;AAChC,IAAA,kBAAkB,EAAE,gBAAgB;AACpC,IAAA,qBAAqB,EAAE,mBAAmB;AAC1C,IAAA,oBAAoB,EAAE,kBAAkB;AACxC,IAAA,4BAA4B,EAAE,0BAA0B;AACxD,IAAA,mBAAmB,EAAE,iBAAiB;AACtC,IAAA,gBAAgB,EAAE,oBAAoB;AACtC,IAAA,qBAAqB,EAAE,0BAA0B;AACjD,IAAA,aAAa,EAAE,WAAW;AAC1B,IAAA,iBAAiB,EAAE,eAAe;AAClC,IAAA,UAAU,EAAE,QAAQ;AACpB,IAAA,iBAAiB,EAAE,eAAe;AAClC,IAAA,YAAY,EAAE,UAAU;AACxB,IAAA,YAAY,EAAE,UAAU;AACxB,IAAA,aAAa,EAAE,WAAW;AAC1B,IAAA,kBAAkB,EAAE,gBAAgB;AACpC,IAAA,SAAS,EAAE,QAAQ;AACnB,IAAA,kBAAkB,EAAE,qBAAqB;CAC1C;;MC3BY,kBAAkB,GAAG,IAAI,cAAc,CAAS,oBAAoB;MAMpE,yBAAyB,CAAA;IAClC,QAAQ,CAAC,GAAW,EAAE,IAAW,EAAA;AAC7B,QAAA,OAAO,IAAI;IACf;AACH;MAKY,cAAc,CAAA;IA0CvB,WAAA,CACwC,WAAkC,EACpC,QAA8B,EAAA;QAD5B,IAAA,CAAA,WAAW,GAAX,WAAW;QACb,IAAA,CAAA,QAAQ,GAAR,QAAQ;QA1C9C,IAAA,CAAA,aAAa,GAAG,IAAI,GAAG,CACnB;AACI,YAAA,CAAC,YAAY,EAAE;AACX,oBAAA,EAAC,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,EAAC;AACzC,oBAAA,EAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,QAAQ;AACzF;AACA,aAAA;AACD,YAAA,CAAC,UAAU,EAAE;AACT,oBAAA,EAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAC;AACrC,oBAAA,EAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,UAAU,EAAC;AAC1C,oBAAA,EAAC,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,eAAe,EAAC;AAC7C,oBAAA,EAAC,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,cAAc,EAAC;AAC9C;AACA,aAAA;AACD,YAAA,CAAC,SAAS,EAAE;AACR,oBAAA,EAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAC;AACnC,oBAAA,EAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,kBAAkB,EAAC;AACtD,iBAAA;AACA,aAAA;AACD,YAAA,CAAC,UAAU,EAAE;AACT,oBAAA,EAAC,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,mBAAmB,EAAC;AACrD,oBAAA,EAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,kBAAkB,EAAC;AACnD,oBAAA,EAAC,KAAK,EAAE,yBAAyB,EAAE,GAAG,EAAE,0BAA0B,EAAC;oBACnE,EAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,IAAI,CAAC,mBAAmB,EAAC;AAC3D;AACA,aAAA;AACD,YAAA,CAAC,gBAAgB,EAAE;AACf,oBAAA,EAAC,KAAK,EAAE,yBAAyB,EAAE,GAAG,EAAE,0BAA0B,EAAC;AACnE,oBAAA,EAAC,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,gBAAgB,EAAC;AAC/C,oBAAA,EAAC,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,cAAc,EAAC;AAC9C;AACA,aAAA;AACD,YAAA,CAAC,UAAU,EAAE;AACT,oBAAA,EAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAC;AACrC,oBAAA,EAAC,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,eAAe,EAAC;AAChD;AACA;AACJ,SAAA,CACJ;IAMD;AAEA,IAAA,OAAO,CAAC,GAAW,EAAA;QACf,MAAM,GAAG,GAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;QACxC,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAC9C;+GAnDS,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EA2CX,kBAAkB,EAAA,EAAA,EAAA,KAAA,EAClB,gBAAgB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AA5CnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFX,MAAM,EAAA,CAAA,CAAA;;4FAET,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BA4CQ,MAAM;2BAAC,kBAAkB;;0BACzB,MAAM;2BAAC,gBAAgB;;;AChEhC;;;;;;;;;;;;;;AAcE;MAUW,uBAAuB,CAAA;AANpC,IAAA,WAAA,GAAA;QAOa,IAAA,CAAA,KAAK,GAAW,EAAE;QAElB,IAAA,CAAA,OAAO,GAAG,IAAI;QACd,IAAA,CAAA,UAAU,GAAG,KAAK;;QAElB,IAAA,CAAA,WAAW,GAAG,KAAK;;QAEnB,IAAA,CAAA,WAAW,GAAG,KAAK;AAClB,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAU;AAyBvD,IAAA;AAvBG,IAAA,WAAW,CAAC,KAAa,EAAA;AACrB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;IAClC;AAEA,IAAA,WAAW,CAAC,GAAG,EAAA;QACX,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC/C,QAAA,IAAI,IAAI,GAAG,SAAS,CAAC,QAAQ;AAC7B,QAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;YAClB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ;AAC/C,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;gBACvB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;YAClC;QACJ;AACA,QAAA,IAAI,MAAM,GAAG,GAAG,CAAC,GAAG;QACpB,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACzB,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7B;AACA,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AACtB,YAAA,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACxB;;QAEA,OAAO,MAAM,KAAK,IAAI;IAC1B;+GAjCS,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,8QCxBpC,yvBAoBA,EAAA,MAAA,EAAA,CAAA,6wEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA5B,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDIa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,cAGpB,KAAK,EAAA,QAAA,EAAA,yvBAAA,EAAA,MAAA,EAAA,CAAA,6wEAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBAEA;;sBAEA;;sBACA;;;MExBQ,2BAA2B,CAAA;AADxC,IAAA,WAAA,GAAA;AAEa,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAU;AACnC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,eAAe,CAAS,EAAE,CAAC;QAChD,IAAA,CAAA,QAAQ,GAAG,IAAI,eAAe,CAA6B;AAChE,YAAA,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE;AAClC,YAAA,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE;AAChC,YAAA,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE;AAClC,YAAA,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE;AACvC,SAAA,CAAC;AAaL,IAAA;AAXG,IAAA,UAAU,CAAC,EAAU,EAAA;AACjB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;IAC7B;AAEA,IAAA,gBAAgB,CAAC,EAAU,EAAA;AACvB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;IAChC;AAEA,IAAA,UAAU,CAAC,OAAmC,EAAA;AAC1C,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;IAC/B;+GApBS,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAA3B,2BAA2B,EAAA,CAAA,CAAA;;4FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC;;;MCKY,6BAA6B,CAAA;AAKtC,IAAA,WAAA,CACY,QAA2B,EAC3B,WAA8B,EAC9B,GAAsB,EACtB,aAA0C,EAAA;QAH1C,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,aAAa,GAAb,aAAa;QARzB,IAAA,CAAA,aAAa,GAAG,EAAE;QAClB,IAAA,CAAA,OAAO,GAA+B,EAAE;AAChC,QAAA,IAAA,CAAA,GAAG,GAAG,IAAI,YAAY,EAAE;AAQ5B,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CACR,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AAClD,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QAC3B,CAAC,CAAC,CACL;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CACR,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,KAAI;AAC9C,YAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QAC3B,CAAC,CAAC,CACL;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CACR,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;AACtC,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QAC3B,CAAC,CAAC,CACL;IACL;AAEA,IAAA,IAAI,WAAW,GAAA;QACX,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACjG;IAEA,eAAe,GAAA;QACX,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAC/F;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IAC9F;AAEA,IAAA,UAAU,CAAC,EAAU,EAAA;AACjB,QAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;IACrC;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE;IAC1B;+GAhDS,6BAA6B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA4B,2BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,6BAA6B,wFCb1C,wyBAwBA,EAAA,MAAA,EAAA,CAAA,y1BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAjB,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FDXa,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAPzC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,6BAA6B,EAAA,eAAA,EAGtB,uBAAuB,CAAC,MAAM,cACnC,KAAK,EAAA,QAAA,EAAA,wyBAAA,EAAA,MAAA,EAAA,CAAA,y1BAAA,CAAA,EAAA;;;MEDR,0BAA0B,CAAA;AANvC,IAAA,WAAA,GAAA;AAQE,QAAA,IAAA,CAAA,OAAO,GAAQ;AACb,YAAA,cAAc,EAAE,SAAS;SAC1B;AAmBF,IAAA;AAfC,IAAA,MAAM,CAAC,YAA2B,EAAA;AAChC,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAChC,QAAA,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,GAAG;IACjC;AAEA,IAAA,OAAO,CAAC,MAAqB,EAAA;AAC3B,QAAA,OAAO,IAAI;IACb;IAEA,SAAS,GAAA;QACP,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc;AAC1D,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;AAC/B,YAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC;QAC7E;IACF;+GAtBW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,kMCVvC,iLAOA,EAAA,MAAA,EAAA,CAAA,i0BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAb,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDGa,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBANtC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,cAGvB,KAAK,EAAA,QAAA,EAAA,iLAAA,EAAA,MAAA,EAAA,CAAA,i0BAAA,CAAA,EAAA;;sBAQlB,SAAS;uBAAC,cAAc;;;MELd,wBAAwB,CAAA;AANrC,IAAA,WAAA,GAAA;AAOE,QAAA,IAAA,CAAA,IAAI,GAAG;AACL,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,EAAE,EAAE,EAAE;AACN,YAAA,UAAU,EAAE,EAAE;SACf;QAED,IAAA,CAAA,IAAI,GAAG,KAAK;AAqBb,IAAA;AAnBC,IAAA,MAAM,CAAC,YAA2B,EAAA;AAChC,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;QAChC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC;IACzC;AAEA,IAAA,OAAO,CAAC,YAA2B,EAAA;AACjC,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAChC,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,UAAU,CAAC,KAAK,EAAA;AACd,QAAA,CAAC,CAAC,KAAK,CAAC,MAAK;AACX,YAAA,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,CAAC;AACzC,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,eAAe,CAAC,KAAK,EAAA;AACnB,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC;IACpC;+GA3BW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,kFCXrC,iQAIM,EAAA,MAAA,EAAA,CAAA,kRAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,YAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDOO,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,cAGrB,KAAK,EAAA,QAAA,EAAA,iQAAA,EAAA,MAAA,EAAA,CAAA,kRAAA,CAAA,EAAA;;;MEER,wBAAwB,CAAA;AANrC,IAAA,WAAA,GAAA;AAQE,QAAA,IAAA,CAAA,IAAI,GAAQ;AACV,YAAA,EAAE,EAAE,EAAE;AACN,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,UAAU,EAAE,KAAK;SAClB;QACD,IAAA,CAAA,aAAa,GAAG,KAAK;AAuCtB,IAAA;AArCC,IAAA,MAAM,CAAC,MAA2B,EAAA;AAChC,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM;AACxB,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;AACvB,QAAA,IAAI,CAAC,aAAa;YAChB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,QAAQ;gBACvC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC;gBAC/B,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,IAAI;gBACrC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,IAAI;IACzC;AAEA,IAAA,OAAO,CAAC,MAA2B,EAAA;AACjC,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM;AACxB,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;AACvB,QAAA,IAAI,CAAC,aAAa;YAChB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,QAAQ;gBACvC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC;gBAC/B,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,IAAI;gBACrC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,IAAI;AACvC,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,MAAM,CAAC,IAAI,EAAA;QACT,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,IAAI,IAAI,CAAC,aAAa,EAAE;YACrD;QACF;QACA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC;IACnD;AAEA,IAAA,IAAI,OAAO,GAAA;QACT,IAAI,OAAO,GAAG,EAAE;AAChB,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE;YACvB,OAAO,GAAG,2CAA2C;QACvD;aAAO,IAAI,IAAI,CAAC,IAAI,EAAE,MAAM,KAAK,QAAQ,EAAE;YACzC,OAAO,GAAG,oFAAoF;QAChG;AACA,QAAA,OAAO,OAAO;IAChB;+GA9CW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,kFCXrC,gWAYA,EAAA,MAAA,EAAA,CAAA,qtBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDDa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,cAGrB,KAAK,EAAA,QAAA,EAAA,gWAAA,EAAA,MAAA,EAAA,CAAA,qtBAAA,CAAA,EAAA;;;MEER,sBAAsB,CAAA;AANnC,IAAA,WAAA,GAAA;AAOE,QAAA,IAAA,CAAA,IAAI,GAAQ;AACV,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,EAAE,EAAE,EAAE;AACN,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,UAAU,EAAE,EAAE;SACf;QAED,IAAA,CAAA,IAAI,GAAG,KAAK;AA8Bb,IAAA;AA5BC,IAAA,IAAI,cAAc,GAAA;QAChB,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC;IAEpF;AAEA,IAAA,MAAM,CAAC,UAA+B,EAAA;AACpC,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;QAC5B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC;IACvC;AAEA,IAAA,OAAO,CAAC,UAA+B,EAAA;AACrC,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;QAC5B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC;AACrC,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,UAAU,CAAC,KAAK,EAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;YAC7B;QACF;AACA,QAAA,CAAC,CAAC,KAAK,CAAC,MAAK;YACX,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;AAC5C,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,eAAe,CAAC,KAAK,EAAA;AACnB,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC;IAClC;+GArCW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,gFCXnC,gTAYA,EAAA,MAAA,EAAA,CAAA,gVAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,YAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDDa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,cAGnB,KAAK,EAAA,QAAA,EAAA,gTAAA,EAAA,MAAA,EAAA,CAAA,gVAAA,CAAA,EAAA;;;AETrB;;;;;;;;;;;;;;AAcE;uBAEW,QAAQ,CAAA;AAArB,IAAA,WAAA,GAAA;QACI,IAAA,CAAA,IAAI,GAAG,EAAE;QACT,IAAA,CAAA,IAAI,GAAG,QAAQ;QACf,IAAA,CAAA,OAAO,GAAG,EAAE;QACZ,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,cAAc,GAAG,EAAE;QACnB,IAAA,CAAA,YAAY,GAAG,SAAS;QACxB,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,kBAAkB,GAAG,CAAC;QACtB,IAAA,CAAA,wBAAwB,GAAG,SAAS;QACpC,IAAA,CAAA,IAAI,GAAG,EAAE;AACT,QAAA,IAAA,CAAA,UAAU,GAAG;AACT,YAAA,GAAG,EAAE;SACR;IACL;AAAC;AAAA;;MCYY,kBAAkB,CAAA;AAtC/B,IAAA,WAAA,GAAA;QAyCW,IAAA,CAAA,OAAO,GAAQ,EAAE;AAS3B,IAAA;AANG,IAAA,MAAM,CAAC,MAAwC,EAAA;AAC3C,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AAEpB,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI;AACnE,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE;IACnE;+GAXS,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApCjB;;;;;AAKD,YAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,sSAAA,CAAA,EAAA,CAAA,CAAA;;4FA+BA,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAtC9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,QAAA,EAChB;;;;;AAKD,YAAA,CAAA,EAAA,UAAA,EA6BG,KAAK,EAAA,MAAA,EAAA,CAAA,sSAAA,CAAA,EAAA;;;MCKR,mBAAmB,CAAA;AAK5B,IAAA,MAAM,CAAC,MAAwC,EAAA;AAC3C,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AAEpB,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI;IACvE;AAEA,IAAA,IAAI,OAAO,GAAA;QACP,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC;IAC/C;+GAbS,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAtClB;;;;;;;AAOD,YAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,4SAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FA+BA,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAxC/B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,QAAA,EACjB;;;;;;;AAOD,YAAA,CAAA,EAAA,UAAA,EA6BG,KAAK,EAAA,MAAA,EAAA,CAAA,4SAAA,CAAA,EAAA;;;MCjCR,sBAAsB,CAAA;IAE/B,WAAA,CACY,cAA8B,EACH,WAA4B,EAAA;QADvD,IAAA,CAAA,cAAc,GAAd,cAAc;QACa,IAAA,CAAA,WAAW,GAAX,WAAW;IAElD;IAEA,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAA;AAC7B,QAAA,IAAI,EAAE,GAAG,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,IAAI,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE;AACjF,QAAA,MAAM,OAAO,GAAQ,MAAM,CAAC,OAAO,CAAC;AACpC,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,MAAK;AAC3D,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,gBAAA,CAAkB,EAClB,CAAA,mCAAA,CAAqC,CACxC;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,YAAA,OAAO,IAAI;AACf,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAI;AACf,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,YAAA,CAAc,EACd,CAAA,gCAAA,CAAkC,CACrC;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,YAAA,OAAO,KAAK;AAChB,QAAA,CAAC,CAAC;IACN;IAEA,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAA;AAC/B,QAAA,IAAI,EAAE,GAAG,QAAQ,EAAE,UAAU,EAAE,EAAE;QACjC,IAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE;YACpC,EAAE,GAAG,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE;QACrC;aAAO,IAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE;YAC7C,EAAE,GAAG,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE;QACvC;aAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE;YAC7C,EAAE,GAAG,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE;QACtC;AACA,QAAA,MAAM,OAAO,GAAQ,MAAM,CAAC,OAAO,CAAC;AACpC,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,MAAK;AAC7D,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,yBAAA,CAA2B,EAC3B,CAAA,sCAAA,CAAwC,CAC3C;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,YAAA,OAAO,IAAI;AACf,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAI;AACf,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,cAAA,CAAgB,EAChB,CAAA,mCAAA,CAAqC,CACxC;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,YAAA,OAAO,KAAK;AAChB,QAAA,CAAC,CAAC;IACN;AA7DS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,6CAInB,iBAAiB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAJpB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cAFnB,MAAM,EAAA,CAAA,CAAA;;4FAET,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAKQ,MAAM;2BAAC,iBAAiB;;;MCOpB,uBAAuB,CAAA;AAdpC,IAAA,WAAA,GAAA;QAeW,IAAA,CAAA,OAAO,GAAgB,IAAI;QAC3B,IAAA,CAAA,WAAW,GAAG,kBAAkB;QAChC,IAAA,CAAA,aAAa,GAAG,kBAAkB;QAClC,IAAA,CAAA,SAAS,GAAG,yBAAyB;QACrC,IAAA,CAAA,iBAAiB,GAAG,IAAI;;QAExB,IAAA,CAAA,UAAU,GAAG,OAAO;QAE7B,IAAA,CAAA,IAAI,GAAG,KAAK;QACZ,IAAA,CAAA,QAAQ,GAAG,KAAK;AAEhB,QAAA,IAAA,CAAA,KAAK,GAAS,IAAI,IAAI,EAAE;AACxB,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AAC5B,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;AAExB,QAAA,IAAA,CAAA,QAAQ,GAAiC,MAAK,EAAE,CAAC;AACjD,QAAA,IAAA,CAAA,SAAS,GAAe,MAAK,EAAE,CAAC;AAmFzC,IAAA;AAjFC,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,KAAK,GAAG8B,QAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE;IAChF;AAEA,IAAA,UAAU,CAAC,KAAkB,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,EAAE;QACjD,IAAI,CAAC,gBAAgB,EAAE;IACzB;AAEA,IAAA,gBAAgB,CAAC,EAAgC,EAAA;AAC/C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;AAC1B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,IAAI,GAAG,KAAK;QACnB;IACF;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB;QACF;AACA,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI;AACtB,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,IAAI,CAAC,gBAAgB,EAAE;QACzB;aAAO;YACL,IAAI,CAAC,SAAS,EAAE;QAClB;IACF;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK;QACjB,IAAI,CAAC,SAAS,EAAE;IAClB;AAEA,IAAA,cAAc,CAAC,OAAoB,EAAA;QACjC,IAAI,CAAC,OAAO,EAAE;YACZ;QACF;AACA,QAAA,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,EAAE;QAC9D,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC;AACvF,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC;AACd,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,IAAI,CAAC,KAAK,EAAE;QACd;IACF;AAEA,IAAA,UAAU,CAAC,KAAa,EAAA;AACtB,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,GAAG,EAAE,IAAI,EAAE;QACzC,IAAI,CAAC,eAAe,EAAE;IACxB;AAEA,IAAA,YAAY,CAAC,KAAa,EAAA;AACxB,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,GAAG,EAAE,IAAI,EAAE;QAC7C,IAAI,CAAC,eAAe,EAAE;IACxB;AAEA,IAAA,QAAQ,CAAC,CAAS,EAAA;QAChB,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;IAC5D;IAEQ,gBAAgB,GAAA;QACtB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,EAAE;AACxD,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE;AACxB,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,UAAU,EAAE;IAC9B;IAEQ,eAAe,GAAA;QACrB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,EAAE;QACxD,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;AAC3E,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC;AACd,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3B;+GAnGW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,SAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,SAAA,EATvB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB,CAAC;AACtD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClBH,8rEAmEA,EAAA,MAAA,EAAA,CAAA,8vEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDxDY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,8rCAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA7B,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,YAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,yBAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAU/C,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAdnC,SAAS;+BACE,sBAAsB,EAAA,OAAA,EAGvB,CAAC,YAAY,EAAE,aAAa,EAAE,mBAAmB,CAAC,EAAA,SAAA,EAChD;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,6BAA6B,CAAC;AACtD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,UAAA,EACW,IAAI,EAAA,QAAA,EAAA,8rEAAA,EAAA,MAAA,EAAA,CAAA,8vEAAA,CAAA,EAAA;;sBAGf;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;;AE5BH;;;;;;;;;;;;;;AAcE;MAiBW,wBAAwB,CAAA;AAOnC,IAAA,WAAA,CACY,GAA2B,EAC3B,SAAiD,EACzB,IAAS,EACN,WAA4B,EAAA;QAHvD,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,SAAS,GAAT,SAAS;QACe,IAAA,CAAA,IAAI,GAAJ,IAAI;QACD,IAAA,CAAA,WAAW,GAAX,WAAW;AATlD,QAAA,IAAA,CAAA,OAAO,GAAG6B,QAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,MAAM,EAAE;QAC7C,IAAA,CAAA,IAAI,GAAG,OAAO;AAEd,QAAA,IAAA,CAAA,SAAS,GAAGA,QAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,MAAM,EAAE;QAC5C,IAAA,CAAA,YAAY,GAAG,KAAK;AAOlB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,OAAO;IAClC;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,+BAA+B,CAAC;IAC/D;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;IAC5B;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;IAC7B;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAC;YACxB,IAAI,CAAC,KAAK,EAAE;QACd;aAAO;YACL,IAAI,CAAC,OAAO,EAAE;QAChB;IACF;IAEA,KAAK,GAAA;QACD,IAAI,IAAI,CAAC,YAAY;YAAE;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;YACpE,IAAI,MAAM,EAAE;gBACR,IAAI,CAAC,OAAO,EAAE;YAClB;AACJ,QAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AAC7B,QAAA,CAAC,CAAC;IACN;IAEA,OAAO,GAAA;QACH,IAAI,IAAI,CAAC,YAAY;YAAE;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;YACtE,IAAI,MAAM,EAAE;gBACR,IAAI,CAAC,OAAO,EAAE;YAClB;AACJ,QAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AAC7B,QAAA,CAAC,CAAC;IACN;+GA3DW,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAA9B,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAUvB,eAAe,EAAA,EAAA,EAAA,KAAA,EACf,iBAAiB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAXlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,iFC/BrC,0vCAwBA,EAAA,MAAA,EAAA,CAAA,mmCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAe,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAgB,uBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,aAAA,EAAA,eAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDOa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,cAGpB,KAAK,EAAA,QAAA,EAAA,0vCAAA,EAAA,MAAA,EAAA,CAAA,mmCAAA,CAAA,EAAA;;0BAYd,MAAM;2BAAC,eAAe;;0BACtB,MAAM;2BAAC,iBAAiB;;;AE1C/B;;;;;;;;;;;;;;AAcE;MAaW,0BAA0B,GAAG,IAAI,cAAc,CAAM,4BAA4B;MAMjF,mBAAmB,CAAA;AAE5B,IAAA,WAAA,CACqC,eAAgC,EAC9B,WAA4B,EACvD,cAA8B,EAAA;QAFL,IAAA,CAAA,eAAe,GAAf,eAAe;QACb,IAAA,CAAA,WAAW,GAAX,WAAW;QACtC,IAAA,CAAA,cAAc,GAAd,cAAc;IACvB;AAEH,IAAA,IAAI,CAAC,QAAQ,EAAA;QACT,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,GAAQ,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC/D,QAAA,MAAM,GAAG,GAAG,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AACnH,QAAA,OAAO,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACxD,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,SAAA,EAAY,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA,CAAE,EAC9C,CAAA,aAAA,EAAgB,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA,WAAA,EAAc,QAAQ,CAAC,IAAI,CAAA,CAAE,CAChF;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAI;YACd,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC;YAC3D,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,MAAA,EAAS,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAA,SAAA,CAAW,EACtD,YAAY,CACf;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,YAAA,MAAM,IAAI;AACd,QAAA,CAAC,CAAC;IACN;IAEA,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,EAAA;AACnC,QAAA,MAAM,SAAS,GAAG,IAAIC,UAAQ,EAAE;AAChC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC;AACvC,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAC7B,QAAO,IAAI;AACP,gBAAA,KAAK,MAAM;oBACP,IAAG,QAAQ,EAAE;wBACT,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;oBACvC;yBAAO;wBACH,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;oBACpC;oBACA;AACJ,gBAAA,KAAK,YAAY;oBACb,IAAG,QAAQ,EAAE;AACT,wBAAA,KAAK,CAAC,SAAS,EAAE,YAAY,CAAC;oBAClC;yBAAO;wBACH,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;oBACpC;oBACA;AACJ,gBAAA;oBACI,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;;AAE5C,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,SAAS;IACpB;IAEA,WAAW,CAAC,UAAU,EAAE,SAAS,EAAA;AAC7B,QAAA,MAAM,GAAG,GAAG,CAAA,YAAA,EAAe,UAAU,CAAA,eAAA,EAAkB,SAAS,EAAE;AAClE,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;YAC9C,IAAI,MAAM,GAAG,EAAE;AACf,YAAA,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI;YACtB,IAAI,CAAC,IAAI,EAAE,aAAa,IAAE,CAAC,IAAI,EAAE,aAAa;AAAE,gBAAA,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC;AAC7G,YAAA,IAAI,IAAI,EAAE,mBAAmB,GAAC,CAAC;AAAE,gBAAA,MAAM,CAAC,IAAI,CAAC,qEAAqE,CAAC;AACnH,YAAA,IAAI,IAAI,EAAE,kBAAkB,GAAC,CAAC;AAAE,gBAAA,MAAM,CAAC,IAAI,CAAC,oEAAoE,CAAC;AACjH,YAAA,IAAI,IAAI,EAAE,mBAAmB,GAAC,CAAC,IAAE,IAAI,EAAE,kBAAkB,GAAC,CAAC,EAAE;AACzD,gBAAA,IAAI,IAAI,EAAE,WAAW,GAAC,CAAC;AAAE,oBAAA,MAAM,CAAC,IAAI,CAAC,wHAAwH,CAAC;AACzJ,qBAAA,IAAI,IAAI,EAAE,WAAW,GAAC,CAAC;AAAE,oBAAA,MAAM,CAAC,IAAI,CAAC,sIAAsI,CAAC;YACrL;YACA,IAAI,MAAM,GAAG,EAAE;AACf,YAAA,IAAI,IAAI,EAAE,aAAa,EAAE;gBACrB,IAAI,IAAI,EAAE,aAAa;oBAAE,MAAM,GAAG,aAAa;;oBAC1C,MAAM,GAAG,QAAQ;YAC1B;iBAAO;gBACH,IAAI,IAAI,EAAE,aAAa;oBAAE,MAAM,GAAG,QAAQ;YAC9C;AACA,YAAA,IAAI,MAAM,CAAC,MAAM,GAAC,CAAC,EAAE;AACjB,gBAAA,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAChC,oBAAA,MAAM,IAAI,OAAO,GAAC,MAAM,CAAC,CAAC,CAAC;gBAC/B;YACJ;;gBAAO,MAAM,IAAI,wCAAwC;AACzD,YAAA,OAAO,MAAM;AACjB,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,eAAe,CAAC,EAAE,EAAA;AACd,QAAA,MAAM,GAAG,GAAQ,CAAA,YAAA,EAAe,EAAE,EAAE;QACpC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;IACrC;+GA1FS,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAGhB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAChB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAAT,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAJpB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFhB,MAAM,EAAA,CAAA,CAAA;;4FAET,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAIQ,MAAM;2BAAC,gBAAgB;;0BACvB,MAAM;2BAAC,iBAAiB;;;ACrCjC;;;;;;;;;;;;;;AAcE;AAkCI,MAAO,qBAAsB,SAAQ,oBAAoB,CAAA;AAiD3D,IAAA,WAAA,CAC8B,QAA8B,EACxD,aAAqC,EACF,WAA4B,EACtD,kBAAsC,EACvC,cAA8B,EAC9B,UAAqB,EACe,UAA4B,EACrD,MAAc,EAAA;QAEjC,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,CAAC;QAPnC,IAAA,CAAA,WAAW,GAAX,WAAW;QACrC,IAAA,CAAA,kBAAkB,GAAlB,kBAAkB;QACnB,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,UAAU,GAAV,UAAU;QAC0B,IAAA,CAAA,UAAU,GAAV,UAAU;QACnC,IAAA,CAAA,MAAM,GAAN,MAAM;AAvDrB,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,cAAc;QAC7B,IAAA,CAAA,SAAS,GAAG,YAAY;AAEtB,QAAA,IAAA,CAAA,WAAW,GAAG;AACnB,YAAA,EAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAC;AAC7B,YAAA,EAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAC;AACxC,YAAA,EAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAC;AACxC,YAAA,EAAC,KAAK,EAAE,uBAAuB,EAAE,IAAI,EAAE,yBAAyB,EAAC;AACjE,YAAA,EAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAC;AACjC,YAAA,EAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,mBAAmB,EAAC;AAChD,YAAA,EAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAC;AACvC,YAAA,EAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,oBAAoB,EAAC;AAClD,YAAA,EAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAC;AAC/B,YAAA,EAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAC;AACpC,YAAA,EAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,iBAAiB,EAAC;AAC/C,YAAA,EAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,eAAe,EAAC;AAChD,YAAA,EAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,EAAC;AAC5C,YAAA,EAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAC;AACxC,YAAA,EAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC;SAC5B;QAED,IAAA,CAAA,sBAAsB,GAAU,EAAE;QAClC,IAAA,CAAA,8BAA8B,GAAU,EAAE;AAC1C,QAAA,IAAA,CAAA,gBAAgB,GAAQ,IAAIS,UAAQ,EAAE;AACtC,QAAA,IAAA,CAAA,aAAa,GAAQ;AACjB,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,EAAE,EAAE,EAAE;AACN,YAAA,SAAS,EAAE,EAAE;SAChB;AAEQ,QAAA,IAAA,CAAA,SAAS,GAAG;AACjB,YAAA,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAC;AAChC,YAAA,EAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,qBAAqB,EAAC;AACrD,YAAA,EAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAC;AACpC,YAAA,EAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,uBAAuB,EAAC;AACrD,YAAA,EAAC,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,EAAC;AACtD,YAAA,EAAC,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,oBAAoB,EAAC;AAC1D,YAAA,EAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAC;AACxC,YAAA,EAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAC;AACtC,YAAA,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAC;SACrC;AAEQ,QAAA,IAAA,CAAA,kBAAkB,GAAG;AAC1B,YAAA,EAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAC;SACjD;QAED,IAAA,CAAA,YAAY,GAAG,YAAY;AA2B3B,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,QAAQ,KAA8B;YAC9C,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAC,CAAC;AAC3C,QAAA,CAAC;QAjBG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,SAAS,CAAC,OAAO,IAAG;AAClD,YAAA,IAAI,cAAc;AAClB,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AACvB,gBAAA,QAAQ,MAAM,CAAC,QAAQ;AACnB,oBAAA,KAAK,eAAe;wBAChB,cAAc,GAAG,IAAI;wBACrB;;AAEZ,YAAA,CAAC,CAAC;YACF,IAAI,CAAC,cAAc,EAAE;AACjB,gBAAA,IAAI,CAAC,8BAA8B,GAAG,EAAE;YAC5C;AACJ,QAAA,CAAC,CAAC;IACN;IAMA,gBAAgB,GAAA;QACZ,IAAI,CAAC,eAAe,EAAE;QACtB,MAAM,IAAI,GAAG,IAAI;AACjB,QAAA,MAAM,kCAAkC,GAAG;AACvC,YAAA,UAAU,EAAE,WAAW;AACvB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,mBAAmB,EAAE,KAAK;YAC1B,iBAAiB,EAAE,MAAK;gBACpB,OAAO,IAAI,CAAC,sBAAsB;YACtC,CAAC;YACD,kBAAkB,EAAE,MAAK;AACrB,gBAAA,OAAO,EAAE;YACb,CAAC;YACD,yBAAyB,EAAE,MAAK;gBAC5B,OAAO,IAAI,CAAC,8BAA8B;YAC9C,CAAC;YACD,0BAA0B,EAAE,MAAK;AAC7B,gBAAA,OAAO,EAAE;YACb,CAAC;AACD,YAAA,yBAAyB,EAAE,CAAC,UAAU,KAAI;AACtC,gBAAA,IAAI,CAAC,8BAA8B,GAAG,UAAU;YACpD,CAAC;AACD,YAAA,0BAA0B,EAAE,CAAC,UAAU,KAAI;;YAE3C,CAAC;YACD,qBAAqB,EAAE,MAAK;AACxB,gBAAA,OAAO,EAAE;YACb;SACH;AACD,QAAA,MAAM,YAAY,GAAG,CAAC,GAAG,KAAI;AACzB,YAAA,OAAO,CAAA,sBAAA,EAAyB,GAAG,EAAE,IAAI,EAAE,EAAE,CAAA;uEACc,GAAG,EAAE,IAAI,EAAE,EAAE,CAAA;kDAClC,GAAG,EAAE,IAAI,EAAE,aAAa,CAAA;kDACxB,GAAG,EAAE,IAAI,EAAE,uBAAuB,CAAA;sCAC9C,GAAG,EAAE,IAAI,EAAE,IAAI,CAAA;;yBAE5B;AACjB,QAAA,CAAC;AAED,QAAA,MAAM,UAAU,GAAG,CAAC,GAAG,KAAI;YACvB,IAAI,EAAE,GAAG,OAAO;YAChB,IAAI,SAAS,GAAG,EAAE;AAClB,YAAA,IAAI,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE;gBACpB,IAAI,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,IAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,IAAE,CAAC;oBAAE,EAAE,GAAG,SAAS;qBAC/G;oBACD,IAAI,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,IAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAE,CAAC;wBAAE,EAAE,GAAG,OAAO;yBAC9F,IAAI,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,IAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAE,CAAC;wBAAE,EAAE,GAAG,OAAO;yBAClG,IAAI,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,IAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,IAAE,CAAC;wBAAE,EAAE,GAAG,SAAS;yBACtG,IAAI,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,IAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,IAAE,CAAC;wBAAE,EAAE,GAAG,SAAS;gBAC/G;AACA,gBAAA,IAAI,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;oBAAE,SAAS,IAAI,MAAM,GAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;AACtE,gBAAA,IAAI,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI;oBAAE,SAAS,IAAI,aAAa,GAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI;AACjF,gBAAA,IAAI,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS;oBAAE,SAAS,IAAI,gBAAgB,GAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS;AAC9F,gBAAA,IAAI,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS;oBAAE,SAAS,IAAI,gBAAgB,GAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS;YAClG;YACA,OAAO,CAAA;kCACe,EAAE,CAAA;qBACf;AACb,QAAA,CAAC;AAED,QAAA,MAAM,WAAW,GAAG,CAAC,GAAG,KAAI;YACxB,IAAI,GAAG,GAAG,EAAE;YACZ,IAAI,OAAO,GAAG,GAAG;AACjB,YAAA,MAAM,OAAO,GAAG,GAAG,EAAE,IAAI,EAAE,OAAO;YAClC,IAAI,OAAO,EAAE;gBACT,OAAO,GAAG,EAAE;gBACZ,IAAI,OAAO,EAAE,OAAO;AAAE,oBAAA,OAAO,IAAI,OAAO,EAAE,OAAO;gBACjD,IAAI,OAAO,EAAE,KAAK;AAAE,oBAAA,GAAG,IAAI,OAAO,EAAE,KAAK;gBACzC,IAAI,OAAO,EAAE,UAAU;AAAE,oBAAA,GAAG,IAAI,OAAO,EAAE,UAAU;gBACnD,IAAI,OAAO,EAAE,IAAI;AAAE,oBAAA,GAAG,IAAI,OAAO,EAAE,IAAI;gBACvC,IAAI,OAAO,EAAE,IAAI;AAAE,oBAAA,GAAG,IAAI,OAAO,GAAC,OAAO,EAAE,MAAM;gBACjD,IAAI,OAAO,EAAE,QAAQ;AAAE,oBAAA,GAAG,IAAI,KAAK,GAAC,OAAO,EAAE,QAAQ;YACzD;AACA,YAAA,OAAM,qCAAqC,GAAG,EAAE,IAAI,EAAE,EAAE,gEAAgE,GAAG,CAAA;wCAC/F,OAAO,CAAA;oBAC3B;AACZ,QAAA,CAAC;AAED,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa;AAExC,QAAA,MAAM,QAAQ,GAAG;AACb,YAAA,UAAU,EAAE,OAAO;AACnB,YAAA,aAAa,EAAE;gBACX,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;gBAC1C,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE;gBAClD,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAG;gBACtD,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAG;gBAClD,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAG;AACxD,gBAAA,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAG;AAClF,aAAA;YACD,aAAa;SAChB;AAED,QAAA,MAAM,4BAA4B,GAAG;AACjC,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE;AACX,gBAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;AAC3B,gBAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE;AAChC,gBAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE;AACxC;SACJ;AAED,QAAA,IAAI,YAAY,GAAG;AACf,YAAA;AACI,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,UAAU,EAAE,MAAM;AAClB,gBAAA,eAAe,EAAE,2BAA2B;gBAC5C,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;AACjD,gBAAA,YAAY,EAAE,sBAAsB;gBACpC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,iBAAiB,EAAE,IAAI,EAAE;AACxE,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;oBACA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;gBACrC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,KAAK,EAAE,GAAG;AACb,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,gBAAgB;AACvB,gBAAA,KAAK,EAAE,gBAAgB;AACvB,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,kCAAkC;AACzD,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;oBACA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;gBACrC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;gBACf,YAAY,EAAE,IAAI,CAAC,aAAa;AAChC,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,MAAM,EAAE,KAAK;AAChB,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,KAAK,EAAE,GAAG;AACV,gBAAA,YAAY,EAAE,UAAU;AACxB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,gBAAgB,EAAE,kBAAkB;AACpC,gBAAA,YAAY,EAAE,SAAS;AACvB,gBAAA,sBAAsB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;AAC5C,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACvC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,YAAY,EAAE,SAAS;AACvB,gBAAA,YAAY,EAAE,WAAW;AACzB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,gBAAgB,EAAE,mBAAmB;AACrC,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,KAAK,EAAE,GAAG;AACb,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,UAAU,EAAE,MAAM;AAClB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,SAAS,EAAE,yBAAyB;gBACpC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,UAAU,EAAE,UAAU;AACtB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,4BAA4B;AACnD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,QAAQ,EAAE,IAAI;gBACd,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,KAAK,EAAE,GAAG;AACb,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,UAAU,EAAE,YAAY;AACxB,gBAAA,eAAe,EAAE,2BAA2B;gBAC5C,cAAc,EAAE,IAAI,CAAC,kBAAkB;AACvC,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,QAAQ,EAAE,IAAI;gBACd,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,gBAAA,SAAS,EAAE,yBAAyB;AACvC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,YAAY,EAAE,oBAAoB;AAClC,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACvC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,cAAc;AACrB,gBAAA,KAAK,EAAE,cAAc;AACrB,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,KAAK,EAAE,GAAG;AACb,aAAA;AACD,YAAA,IAAI,CAAC;SACR;AACD,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE;YACrC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,YAAY,CAAC;QACpE;AACA,QAAA,OAAO,YAAY;IACvB;IAEO,yBAAyB,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,0BAA0B,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC5E,YAAA,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,IAAI;AACzC,YAAA,OAAO,MAAM;AACjB,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,OAAO,CAAC,OAAqB,EAAE,IAAU,EAAE,IAAU,EAAA;;AAEjD,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI;AAC3C,QAAA,OAAO,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI;AAC7D,aAAA,IAAI,CAAC,CAAC,OAAY,KAAI;AACnB,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AACpC,QAAA,CAAC,CAAC;IACV;IAEQ,MAAM,WAAW,CAAC,OAAY,EAAA;QAClC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;;YAEzB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;QACjD;AACA,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE;AAC5B,YAAA,IAAI;gBACA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;AAChD,oBAAA,IAAI,EAAE,kBAAkB;oBACxB,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE;AACrD,iBAAA,CAAC;AACF,gBAAA,IAAI,WAAW,KAAK,SAAS,EAAE;oBAC3B,OAAO,GAAG,WAAW;gBACzB;YACJ;YAAE,OAAO,EAAE,EAAE;;YAEb;QACJ;AACA,QAAA,OAAO,OAAO;IAClB;AAEQ,IAAA,gBAAgB,CAAC,OAAY,EAAA;QACjC,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;AAC5B,YAAA,GAAG,CAAC,UAAU,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,uBAAuB,CAAC;AAE1E,YAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE;AAC7B,gBAAA,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC;gBACzC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE;AAC9B,oBAAA,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC;AAC1C,oBAAA,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;gBAClC;YACJ;AAAO,iBAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE;AACnC,gBAAA,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC;YAC3C;AACA,YAAA,IAAI,GAAG,CAAC,YAAY,EAAE;AAClB,gBAAA,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;YACpC;AACA,YAAA,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC;AACrC,YAAA,OAAO,GAAG;AACd,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,gBAAgB,CAAC,IAAI,EAAA;AACjB,QAAA,OAAO,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,EAAE;IAC1E;AAEA,IAAA,iBAAiB,CAAC,IAAI,EAAA;AAClB,QAAA,IAAI,KAAK;QACT,IAAI,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE;YAC5B,KAAK,GAAG,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG;QACtC;aAAO,IAAI,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE;YACrC,KAAK,GAAG,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG;QACxC;aAAO,IAAI,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE;YACpC,KAAK,GAAG,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG;QACvC;AACA,QAAA,OAAO,KAAK;IAChB;AAEA,IAAA,iBAAiB,CAAC,IAAI,EAAA;AAClB,QAAA,IAAI,UAAU;QACd,IAAI,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE;YAC5B,UAAU,GAAG,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS;QACjD;aAAO,IAAI,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE;YACrC,UAAU,GAAG,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS;QACnD;aAAO,IAAI,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE;YACpC,UAAU,GAAG,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS;QAClD;AACA,QAAA,OAAOH,QAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE;IACxC;IAEO,2BAA2B,GAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,0BAA0B,EAAE,EAAE,EAAE,EAAE,CAAC;IACnE;AAEO,IAAA,QAAQ,CAAC,QAAQ,EAAA;AACpB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAK;AACpD,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,SAAA,CAAW,EACX,CAAA,yCAAA,EAA4C,QAAQ,CAAC,IAAI,CAAA,CAAE,CAC9D;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAI;YACf,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC;AACvD,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,qBAAqB,EACrB,CAAA,6BAAA,EAAgC,OAAO,CAAA,CAAE,CAC5C;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,MAAM,CAAC,QAAa,EAAA;AAChB,QAAA,IAAI,MAAM;AACV,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE;YAC1C,MAAM,GAAG,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG;QAC3C;AAAO,aAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE;YACnD,MAAM,GAAG,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG;QAC7C;AAAO,aAAA,IAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE;YACjD,MAAM,GAAG,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG;QAC5C;AACA,QAAA,OAAO,MAAM;IACjB;AAEA,IAAA,QAAQ,CAAC,QAAa,EAAA;AAClB,QAAA,IAAI,MAAM;AACV,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE;YAC5C,MAAM,GAAG,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK;QAC7C;AAAO,aAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE;YACrD,MAAM,GAAG,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK;QAC/C;AAAO,aAAA,IAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE;YACnD,MAAM,GAAG,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK;QAC9C;AACA,QAAA,OAAO,MAAM;IACjB;IAEA,WAAW,CAAC,GAAG,EAAE,IAAI,EAAA;QACjB,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AAC3C,QAAA,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,0CAA0C,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAClG,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,GAAC,MAAM,CAAC;AAC7C,QAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AAC9B,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;QAClC,OAAO,CAAC,KAAK,EAAE;AACf,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;IACtC;AAEA,IAAA,SAAS,CAAC,KAAK,EAAA;AACX,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC;AACpC,QAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,WAAA,CAAa,EACb,CAAA,sCAAA,CAAwC,CAC3C;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACzC;AAEA,IAAA,QAAQ,CAAC,QAAQ,EAAA;QACb,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,wBAAwB,EAAE;AAC5D,YAAA,IAAI,EAAE;AACF,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,IAAI,EAAE;AACT,aAAA;AACD,YAAA,SAAS,EAAE,KAAK;AACnB,SAAA,CAAC;QACF,OAAO,IAAI,CAAC,SAAS;IACzB;AAEA,IAAA,UAAU,CAAC,QAAQ,EAAA;QACf,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,wBAAwB,EAAE;AAC5D,YAAA,IAAI,EAAE;AACF,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,IAAI,EAAE;AACT,aAAA;AACD,YAAA,SAAS,EAAE,KAAK;AACnB,SAAA,CAAC;QACF,OAAO,IAAI,CAAC,SAAS;IACzB;AAEA,IAAA,uBAAuB,CAAC,QAAa,EAAA;AACjC,QAAA,IAAI,SAAS;AACb,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE;YAChD,SAAS,GAAG,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS;QACpD;AAAO,aAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE;YACzD,SAAS,GAAG,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS;QACtD;AAAO,aAAA,IAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE;YACvD,SAAS,GAAG,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS;QACrD;AACA,QAAA,OAAO,SAAS;IACpB;IAEA,eAAe,CAAC,QAAa,EAAE,IAAS,EAAA;QACpC,IAAI,EAAE,GAAG,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE;QAC3C,IAAI,CAAC,EAAE,EAAE;YACL,IAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE;gBACpC,EAAE,GAAG,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE;YACrC;iBAAO,IAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE;gBAC5C,EAAE,GAAG,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE;YACvC;iBAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE;gBAC5C,EAAE,GAAG,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE;YACtC;QACJ;AACA,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,MAAK;AACxD,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,gBAAA,CAAkB,EAClB,CAAA,sCAAA,CAAwC,CAC3C;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAI;AACf,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,YAAA,CAAc,EACd,CAAA,mCAAA,CAAqC,CACxC;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,QAAA,CAAC,CAAC;IACN;AAEO,IAAA,UAAU,CAAC,MAAY,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU;AAC3B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;IAC7B;AAEO,IAAA,kBAAkB,CAAC,IAAI,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,WAAW;AAC5B,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;IAC7B;AAEO,IAAA,gBAAgB,CAAC,QAAQ,EAAA;QAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,MAAM,WAAW,GAAG;AAClB,gBAAA,QAAQ,EAAE,kBAAkB;AAC5B,gBAAA,KAAK,EAAE,mBAAmB;AAC1B,gBAAA,OAAO,EAAE,CAAA,uEAAA,CAAyE;AAClF,gBAAA,YAAY,EAAE,KAAK;AACnB,gBAAA,WAAW,EAAE,6BAA6B;AAC1C,gBAAA,cAAc,EAAE,IAAI;AACpB,gBAAA,QAAQ,EAAE,+BAA+B;aAC1C;YACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACtD,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,SAAS,EAAE,KAAK;AACjB,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC;AACrC,gBAAA,IAAI,EAAE,CAAC,MAAM,KAAI;AACf,oBAAA,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE;wBACtB,OAAO,CAAC,KAAK,CAAC;oBAChB;AACA,oBAAA,IAAI,YAAY;oBAChB,IAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE;wBACtC,YAAY,GAAG,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE;oBAC7C;yBAAO,IAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE;wBAC9C,YAAY,GAAG,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE;oBAC/C;yBAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE;wBAC9C,YAAY,GAAG,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE;oBAC9C;AACA,oBAAA,IAAI,MAAM,EAAE,SAAS,EAAE;wBACnB,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,MAAK;AAC1D,4BAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,kBAAA,CAAoB,EACpB,CAAA,yCAAA,CAA2C,CAC9C;AACD,4BAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;4BACrC,OAAO,CAAC,IAAI,CAAC;AACb,wBAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAI;AACnB,4BAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,aAAA,CAAe,EACf,CAAA,0CAAA,CAA4C,CAC/C;AACD,4BAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;4BACjC,MAAM,CAAC,KAAK,CAAC;AACjB,wBAAA,CAAC,CAAC;oBACN;gBACF;AACD,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AA9kBS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAkDlB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAAf,sBAAA,EAAA,EAAA,EAAA,KAAA,EAEhB,iBAAiB,gGAIjB,0BAA0B,EAAA,EAAA,EAAA,KAAA,EAAAF,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAxD7B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFlB,MAAM,EAAA,CAAA,CAAA;;4FAET,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAmDQ,MAAM;2BAAC,gBAAgB;;0BAEvB,MAAM;2BAAC,iBAAiB;;0BAIxB,MAAM;2BAAC,0BAA0B;;;MCxG7B,UAAU,CAAA;AAAvB,IAAA,WAAA,GAAA;QACI,IAAA,CAAA,IAAI,GAAG,EAAE;QACT,IAAA,CAAA,cAAc,GAAG,EAAE;QACnB,IAAA,CAAA,OAAO,GAAG,EAAE;QACZ,IAAA,CAAA,iBAAiB,GAAG,IAAI;QACxB,IAAA,CAAA,WAAW,GAAG,KAAK;QACnB,IAAA,CAAA,IAAI,GAAG,CAAC;QACR,IAAA,CAAA,IAAI,GAAG,EAAE;IACb;AAAC;AAAA;;MCIY,6BAA6B,GAAG,IAAI,cAAc,CAAM,+BAA+B;MAKvF,qBAAqB,CAAA;AAO9B,IAAA,WAAA,CACqC,eAAgC,EAC9B,WAA4B,EACvD,cAA8B,EACQ,UAA4B,EAAA;QAHzC,IAAA,CAAA,eAAe,GAAf,eAAe;QACb,IAAA,CAAA,WAAW,GAAX,WAAW;QACtC,IAAA,CAAA,cAAc,GAAd,cAAc;QACwB,IAAA,CAAA,UAAU,GAAV,UAAU;QAT5D,IAAA,CAAA,oBAAoB,GAAQ,EAAE;QAC9B,IAAA,CAAA,uBAAuB,GAAQ,EAAE;QACjC,IAAA,CAAA,kBAAkB,GAAQ,EAAE;QAC5B,IAAA,CAAA,sBAAsB,GAAQ,EAAE;IAO7B;AAEH,IAAA,IAAI,CAAC,QAAQ,EAAA;QACT,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,GAAQ,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACjE,QAAA,MAAM,GAAG,GAAG,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AACnH,QAAA,OAAO,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,MAAW,KAAI;YACrE,MAAM,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,QAAQ,CAAC,EAAE;YAC1C,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,KAAI;gBACvF,OAAO,UAAU,CAAC,IAAI;AAC1B,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,eAAoB,KAAI;AACvE,gBAAA,MAAM,SAAS,GAAG;AACd,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;iBAC1B;AACD,gBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,YAAA,EAAe,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA,CAAE,EACjD,CAAA,aAAA,EAAgB,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA,cAAA,EAAiB,QAAQ,CAAC,IAAI,CAAA,CAAE,CACnF;AACD,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,gBAAA,OAAO,SAAS;AACpB,YAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAI;AAChB,gBAAA,OAAO,KAAK;AAChB,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAI;YACd,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC;YAC3D,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,MAAA,EAAS,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAA,YAAA,CAAc,EACzD,YAAY,CACf;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,YAAA,MAAM,IAAI;AACd,QAAA,CAAC,CAAC;IACN;IAEA,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAA;AACrC,QAAA,MAAM,SAAS,GAAG,IAAI,UAAU,EAAE;AAClC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC;AACvC,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAC7B,QAAO,IAAI;AACP,gBAAA;oBACI,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;;AAE5C,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,SAAS;IACpB;IAEA,eAAe,GAAA;AACX,QAAA,MAAM,MAAM,GAAG;AACX,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE;SACV;AACD,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AAC1E,YAAA,OAAO,CAAC,EAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;AAC7D,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,eAAe,CAAC,GAAG,EAAA;AACf,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC;AAClC,QAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,WAAA,CAAa,EACb,CAAA,gCAAA,CAAkC,CACrC;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACzC;AAEA,IAAA,qBAAqB,CAAC,EAAE,EAAA;QACpB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,EAAE,UAAU,EAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AAC7G,YAAA,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,IAAI;AACrC,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;gBAC9D,OAAO,GAAG,CAAC,IAAI;AACnB,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,uBAAuB,CAAC,EAAE,EAAA;QACtB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,EAAE,YAAY,EAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AAC/G,YAAA,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,IAAI;AACvC,YAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;gBACpE,OAAO,MAAM,CAAC,IAAI;AACtB,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,aAAa,CAAC,EAAE,EAAA;AACZ,QAAA,MAAM,GAAG,GAAQ,CAAA,cAAA,EAAiB,EAAE,EAAE;QACtC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;IACrC;AA/GS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAQlB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAChB,iBAAiB,wCAEjB,6BAA6B,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAXhC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFlB,MAAM,EAAA,CAAA,CAAA;;4FAET,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BASQ,MAAM;2BAAC,gBAAgB;;0BACvB,MAAM;2BAAC,iBAAiB;;0BAExB,MAAM;2BAAC,6BAA6B;;;ACEvC,MAAO,sBAAuB,SAAQ,oBAAoB,CAAA;AA+C5D,IAAA,WAAA,CAC8B,QAA8B,EACxD,aAAqC,EACF,WAA4B,EACtD,kBAAsC,EACvC,cAA8B,EAC9B,UAAqB,EACkB,UAA4B,EACxD,MAAc,EAAA;QAEjC,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,CAAC;QAPnC,IAAA,CAAA,WAAW,GAAX,WAAW;QACrC,IAAA,CAAA,kBAAkB,GAAlB,kBAAkB;QACnB,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,UAAU,GAAV,UAAU;QAC6B,IAAA,CAAA,UAAU,GAAV,UAAU;QACtC,IAAA,CAAA,MAAM,GAAN,MAAM;AArDrB,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,cAAc;QAC7B,IAAA,CAAA,SAAS,GAAG,aAAa;AAEvB,QAAA,IAAA,CAAA,WAAW,GAAG;AACnB,YAAA,EAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAC;AAC7B,YAAA,EAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,gBAAgB,EAAC;AAC7C,YAAA,EAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAC;AACvC,YAAA,EAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAC;AACnC,YAAA,EAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAC;AACrC,YAAA,EAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAC;AACzC,YAAA,EAAC,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAC;AAC5C,YAAA,EAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAC;AACtC,YAAA,EAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAC;AACrC,YAAA,EAAC,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,mBAAmB,EAAC;AACtD,YAAA,EAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAC;AACrC,YAAA,EAAC,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,kBAAkB,EAAC;AACjD,YAAA,EAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,qBAAqB,EAAC;AAC/C,YAAA,EAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,sBAAsB,EAAC;AACjD,YAAA,EAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAC;AAC3C,YAAA,EAAC,KAAK,EAAE,uBAAuB,EAAC,IAAI,EAAE,wBAAwB,EAAC;AAC/D,YAAA,EAAC,KAAK,EAAE,uBAAuB,EAAC,IAAI,EAAE,wBAAwB,EAAC;AAC/D,YAAA,EAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC;SAC5B;AAED,QAAA,IAAA,CAAA,kBAAkB,GAAQ,IAAI,UAAU,EAAE;AAC1C,QAAA,IAAA,CAAA,aAAa,GAAQ;AACjB,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,EAAE,EAAE,EAAE;AACN,YAAA,SAAS,EAAE,EAAE;SAChB;AAEQ,QAAA,IAAA,CAAA,SAAS,GAAG;AACjB,YAAA,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAC;AAChC,YAAA,EAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,qBAAqB,EAAC;AACrD,YAAA,EAAC,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,EAAC;AACtD,YAAA,EAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAC;AACxC,YAAA,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAC;SACrC;AAEQ,QAAA,IAAA,CAAA,kBAAkB,GAAG;AAC1B,YAAA,EAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAC;SACjD;QAED,IAAA,CAAA,YAAY,GAAG,cAAc;AAe7B,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,QAAQ,KAA8B;YAC9C,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAC,CAAC;AAC3C,QAAA,CAAC;IAJD;IAMA,gBAAgB,GAAA;QACZ,IAAI,CAAC,eAAe,EAAE;AAEtB,QAAA,MAAM,YAAY,GAAG,CAAC,GAAG,KAAI;AACzB,YAAA,OAAO,CAAA,6CAAA,EAAgD,GAAG,EAAE,IAAI,EAAE,EAAE,CAAA;sCAC1C,GAAG,EAAE,IAAI,EAAE,UAAU,CAAA;sCACrB,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAA;0BAC/B,GAAG,EAAE,IAAI,EAAE,IAAI,CAAA;qBACpB;AACb,QAAA,CAAC;AAED,QAAA,MAAM,aAAa,GAAG,CAAC,GAAG,KAAI;YAC1B,IAAI,KAAK,GAAG,EAAE;YACd,GAAG,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC,IAAI,KAAI;AACxC,gBAAA,KAAK,IAAI,uBAAuB,GAAC,IAAI,GAAC,QAAQ;AAClD,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,KAAK;AAChB,QAAA,CAAC;AAED,QAAA,MAAM,UAAU,GAAG,CAAC,GAAG,KAAI;AACvB,YAAA,MAAM,KAAK,GAAQ;AACf,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,SAAS,EAAE,SAAS;AACpB,gBAAA,SAAS,EAAE;aACd;YACD,IAAI,EAAE,GAAG,OAAO;YAChB,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,GAAG,KAAI;AAC1B,gBAAA,IAAI,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAE,CAAC;AAChE,oBAAA,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAE,CAAC,EAAE;oBAC1D,EAAE,GAAG,KAAK;gBACd;AACJ,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,CAAA,kCAAA,EAAqC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAA;kCACnC,EAAE,CAAA;qBACf;AACb,QAAA,CAAC;AAED,QAAA,MAAM,wBAAwB,GAAG,CAAC,GAAG,KAAI;AACrC,YAAA,MAAM,KAAK,GAAG,GAAG,EAAE,IAAI,EAAE,eAAe;YACxC,IAAI,KAAK,EAAE;AACP,gBAAA,IAAIiB,QAAM,CAAC,GAAG,EAAE,IAAI,EAAE,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;AACnD,oBAAA,OAAO,oBAAoB;gBAC/B;qBAAO;AACH,oBAAA,OAAO,KAAK;gBAChB;YACJ;iBAAO;AACH,gBAAA,OAAO,EAAE;YACb;AACJ,QAAA,CAAC;AAED,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa;AAExC,QAAA,MAAM,QAAQ,GAAG;AACb,YAAA,UAAU,EAAE,OAAO;AACnB,YAAA,aAAa,EAAE;gBACX,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;gBAC1C,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE;gBAClD,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAG;gBACtD,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAG;gBAClD,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAG;AACxD,gBAAA,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAG;AAClF,aAAA;YACD,aAAa;SAChB;AAED,QAAA,IAAI,YAAY,GAAG;AACf,YAAA;AACI,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,UAAU,EAAE,MAAM;AAClB,gBAAA,eAAe,EAAE,2BAA2B;gBAC5C,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;AACjD,gBAAA,YAAY,EAAE,sBAAsB;gBACpC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE;AACtE,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;oBACA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;gBACrC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,gBAAA,OAAO,EAAE;AACZ,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,KAAK,EAAE,gBAAgB;AACvB,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,KAAK,EAAE,GAAG;AACV,gBAAA,YAAY,EAAE,UAAU;AACxB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,gBAAgB,EAAE,kBAAkB;AACpC,gBAAA,YAAY,EAAE,gBAAgB;AAC9B,gBAAA,sBAAsB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;AAC5C,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACvC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,gBAAgB;AACvB,gBAAA,KAAK,EAAE,gBAAgB;AACvB,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;oBACA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;gBACrC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;gBACf,YAAY,EAAE,IAAI,CAAC,aAAa;AAChC,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,MAAM,EAAE,KAAK;AAChB,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,KAAK,EAAE,YAAY;AACnB,gBAAA,UAAU,EAAE,UAAU;AACtB,gBAAA,KAAK,EAAE,GAAG;AACV,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACvC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,UAAU,EAAE,QAAQ;AACpB,gBAAA,KAAK,EAAE,GAAG;AACV,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACvC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,UAAU,EAAE,YAAY;AACxB,gBAAA,eAAe,EAAE,2BAA2B;gBAC5C,cAAc,EAAE,IAAI,CAAC,kBAAkB;AACvC,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,QAAQ,EAAE,IAAI;gBACd,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,gBAAA,SAAS,EAAE,yBAAyB;AACvC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,iBAAiB;AACxB,gBAAA,KAAK,EAAE,iBAAiB;AACxB,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,cAAc,EAAE,wBAAwB;AACxC,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACvC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,KAAK,EAAE,eAAe;AACtB,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,YAAY,EAAE,oBAAoB;AAClC,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACvC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,UAAU,EAAE,WAAW;AACvB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,MAAM,EAAE,KAAK;AACb,gBAAA,kBAAkB,EAAE,CAAC,MAAM,KAAI;AAC3B,oBAAA,OAAO,MAAM,CAAC,KAAK,IAAI,EAAE;gBAC7B;AACH,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,KAAK,EAAE,qBAAqB;AAC5B,gBAAA,UAAU,EAAE,gBAAgB;AAC5B,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,MAAM,EAAE,KAAK;AAChB,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,oBAAoB;AAC3B,gBAAA,UAAU,EAAE,mBAAmB;AAC/B,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,MAAM,EAAE,KAAK;AACb,gBAAA,WAAW,EAAE,CAAC,MAAM,KAAI;AACtB,oBAAA,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,EAAE,kBAAkB;AACjD,oBAAA,IAAI,CAAC,SAAS;AAAE,wBAAA,OAAO,EAAE;AACzB,oBAAA,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC7D,CAAC;gBACD,kBAAkB,EAAE,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK;AAC5C,gBAAA,eAAe,EAAE,eAAe;AAChC,gBAAA,SAAS,EAAE,EAAC,UAAU,EAAE,QAAQ,EAAC,QAAQ,EAAE,QAAQ,EAAC,YAAY,EAAE,UAAU;AAC/E,aAAA;AACD,YAAA,IAAI,CAAC;SACR;AAED,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE;YACrC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,YAAY,CAAC;QACpE;AAEA,QAAA,OAAO,YAAY;IACvB;AAEA,IAAA,OAAO,CAAC,OAAqB,EAAE,IAAU,EAAE,IAAU,EAAA;;AAEjD,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI;AAC3C,QAAA,OAAO,KAAK,CAAC,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI;AAC/D,aAAA,IAAI,CAAC,CAAC,OAAY,KAAI;AACnB,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AACpC,QAAA,CAAC,CAAC;IACV;AAEQ,IAAA,WAAW,CAAC,OAAY,EAAA;QAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;;YAEzB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;QACjD;AACA,QAAA,OAAO,OAAO;IAClB;AAEQ,IAAA,gBAAgB,CAAC,OAAY,EAAA;QACjC,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;YAC5B,GAAG,CAAC,UAAU,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC;AAClD,YAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE;AAC7B,gBAAA,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC;YAC9C;AACA,YAAA,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC;AACrC,YAAA,OAAO,GAAG;AACd,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,iBAAiB,CAAC,IAAI,EAAA;AAClB,QAAA,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC;IACxC;IAEO,2BAA2B,GAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,6BAA6B,EAAE,EAAE,EAAE,EAAE,CAAC;IACtE;AAGA,IAAA,MAAM,CAAC,QAAa,EAAA;QAChB,OAAO,QAAQ,CAAC,aAAa;IACjC;IAEA,WAAW,CAAC,GAAG,EAAE,IAAI,EAAA;QACjB,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AAC3C,QAAA,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,0CAA0C,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAClG,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,GAAC,MAAM,CAAC;AAC7C,QAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AAC9B,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;QAClC,OAAO,CAAC,KAAK,EAAE;AACf,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;IACtC;AAEA,IAAA,QAAQ,CAAC,MAAW,EAAA;AAChB,QAAA,MAAM,IAAI,GAAG;AACT,YAAA,QAAQ,EAAE,gBAAgB;AAC1B,YAAA,KAAK,EAAE,kBAAkB;AACzB,YAAA,OAAO,EAAE,CAAA,oMAAA,CAAsM;AAC/M,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,WAAW,EAAE,6BAA6B;AAC1C,YAAA,cAAc,EAAE;SACnB;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACpD,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,SAAS,EAAE,KAAK;AACnB,SAAA,CAAC;AACF,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC5D,YAAA,IAAI,MAAM,EAAE,SAAS,EAAE;gBACnB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA,aAAA,EAAgB,MAAM,CAAC,EAAE,CAAA,UAAA,CAAY,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC1F,oBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,mBAAA,CAAqB,EACrB,CAAA,kEAAA,CAAoE,CACvE;AACD,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,gBAAA,CAAC,CAAC;YACN;iBAAO;AACH,gBAAA,OAAO,OAAO,CAAC,OAAO,EAAE;YAC5B;AACJ,QAAA,CAAC,CAAC;IACN;AAEO,IAAA,UAAU,CAAC,IAAU,EAAA;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,aAAa;QAC9B,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,YAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,EAAE;AACnC,YAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE;gBAClC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAC,CAAC;YAC3F;iBAAO;gBACH,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAC,CAAC;YAC9F;AACA,YAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE;AACrC,gBAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAC,CAAC;YAC9E;;AAEA;;;;AAII;AACJ,YAAA,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC;QAC5C;aAAO;AACH,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,UAAU,EAAE;QAC9C;AACA,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;IAC7B;AAhYS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAgDnB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAAf,sBAAA,EAAA,EAAA,EAAA,KAAA,EAEhB,iBAAiB,gGAIjB,6BAA6B,EAAA,EAAA,EAAA,KAAA,EAAAF,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAtDhC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cAFnB,MAAM,EAAA,CAAA,CAAA;;4FAET,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAiDQ,MAAM;2BAAC,gBAAgB;;0BAEvB,MAAM;2BAAC,iBAAiB;;0BAIxB,MAAM;2BAAC,6BAA6B;;;ACpF7C;;;;;;;;;;;;;;AAcE;MAgBW,eAAe,CAAA;IAoB1B,WAAA,CACwB,SAAwC,EACxC,UAAqB,EACG,IAAS,EAC9C,aAAoC,EACpC,cAAsC,EAAA;QAJzB,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,UAAU,GAAV,UAAU;QACc,IAAA,CAAA,IAAI,GAAJ,IAAI;QACzC,IAAA,CAAA,aAAa,GAAb,aAAa;QACb,IAAA,CAAA,cAAc,GAAd,cAAc;QApBhB,IAAA,CAAA,QAAQ,GAAQ,EAAE;QAClB,IAAA,CAAA,IAAI,GAAW,UAAU;QAEzB,IAAA,CAAA,MAAM,GAAY,KAAK;QACvB,IAAA,CAAA,SAAS,GAAY,KAAK;AACzB,QAAA,IAAA,CAAA,SAAS,GAA0B,IAAI,YAAY,EAAW;QAIxE,IAAA,CAAA,UAAU,GAAG,GAAG;QAChB,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,YAAY,GAAG,KAAK;QACpB,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,mBAAmB,GAAG,KAAK;AAUzB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAClB,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG;AACnB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;AACvB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;YACjC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,GAAG;AACxC,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE;AACtC,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAC9C,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC7B,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;YACzB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,MAAM;QACpE;AACA,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;IACvB;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,mBAAmB,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;IAC/E;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;IAC3B;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,EAAE;IACvE;AAEA,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,KAAKiB,QAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE;IAC1H;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,YAAY;IACpC;AAEA,IAAA,IAAI,iBAAiB,GAAA;QACnB,OAAO,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;IAClD;IAEA,aAAa,GAAA;QACX,OAAOA,QAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE;IAC3C;IAEA,iBAAiB,GAAA;AACf,QAAA,OAAOA,QAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC;IAChE;IAEA,OAAO,GAAA;AACL,QAAA,MAAM,SAAS,GAAsB,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;QACjF,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;YACzC,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YAC3B;AACJ,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAK;AACnD,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACtB,QAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3B,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAK;AACpD,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3B,QAAA,CAAC,CAAC;IACJ;IAEA,KAAK,GAAA;AACH,QAAA,MAAM,SAAS,GAAsB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC/E,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;YAC3C,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YAC3B;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAK;AAC3D,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3B,QAAA,CAAC,CAAC;IACJ;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB;QACF;AACA,QAAA,MAAM,IAAI,GAAG;YACX,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,UAAU,EAAE,IAAI,CAAC,UAAU;AAC3B,YAAA,UAAU,EAAE,GAAG;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,MAAM,EAAE;SACT;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,EAAE;AACtD,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,SAAS,EAAE,KAAK;AACjB,SAAA,CAAC;IACJ;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE;AACtC,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE;IAChD;AAvIW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,uGAuBF,eAAe,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAI,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,sBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAvB5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,oTC9B5B,m8GAmFA,EAAA,MAAA,EAAA,CAAA,k8EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAvB,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,UAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,YAAA,EAAA,QAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,KAAA,EAAA,WAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAuB,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDrDa,eAAe,EAAA,UAAA,EAAA,CAAA;kBAN3B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,cAGX,KAAK,EAAA,QAAA,EAAA,m8GAAA,EAAA,MAAA,EAAA,CAAA,k8EAAA,CAAA,EAAA;;0BAuBd;;0BACA;;0BACA;;0BAAY,MAAM;2BAAC,eAAe;;sBArBtC;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;AExCH;;;;;;;;;;;;;;AAcE;MAkBW,uBAAuB,CAAA;AAMlC,IAAA,WAAA,CAAmB,UAAqB,EAAA;QAArB,IAAA,CAAA,UAAU,GAAV,UAAU;IAC7B;AAEA,IAAA,MAAM,CAAC,MAA2B,EAAA;AAChC,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM;AACxB,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;IACzB;AAEA,IAAA,IAAI,YAAY,GAAA;QACd,MAAM,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1D,IAAI,UAAU,EAAE;AACd,YAAA,OAAON,QAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE;QACtC;aAAO;AACL,YAAA,OAAO,KAAK;QACd;IACF;AAEA,IAAA,IAAI,iBAAiB,GAAA;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE;AACrC,eAAA,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE;eAC9B,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC,KAAK;IAC7C;AAEA,IAAA,MAAM,CAAC,IAAS,EAAA;QACd,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;YAChC,OAAO,IAAI,CAAC,aAAa;QAC3B;AACA,QAAA,IAAI,MAAM;AACV,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE;YACxC,MAAM,GAAG,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG;QACrC;AAAO,aAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE;YACjD,MAAM,GAAG,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG;QACvC;AAAO,aAAA,IAAG,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE;YAC/C,MAAM,GAAG,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG;QACtC;AACA,QAAA,OAAO,MAAM;IACf;AAEA,IAAA,uBAAuB,CAAC,IAAS,EAAA;QAC/B,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,mBAAmB,CAAC,EAAE;YACvC,OAAO,IAAI,CAAC,mBAAmB;QACjC;AACA,QAAA,IAAI,SAAS;AACb,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE;YAC9C,SAAS,GAAG,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS;QAC9C;AAAO,aAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE;YACvD,SAAS,GAAG,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS;QAChD;AAAO,aAAA,IAAG,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE;YACrD,SAAS,GAAG,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS;QAC/C;AACA,QAAA,OAAO,SAAS;IAClB;IAEA,YAAY,GAAA;QACV,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QAClC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AAC3C,QAAA,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,0CAA0C,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;AAClG,QAAA,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,GAAC,MAAM,CAAC;AACvD,QAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AAC9B,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;QAClC,OAAO,CAAC,KAAK,EAAE;AACf,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;IACpC;IAEA,UAAU,GAAA;AACR,QAAA,MAAM,IAAI,GAAG;YACX,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YAC3B,UAAU,EAAE,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;AACnD,YAAA,UAAU,EAAE,GAAG;YACf,QAAQ,EAAE,IAAI,CAAC,IAAI;AACnB,YAAA,MAAM,EAAE;SACT;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,EAAE;AACrD,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,SAAS,EAAE,KAAK;AACjB,SAAA,CAAC;IACJ;AAEA,IAAA,OAAO,CAAC,MAAgC,EAAA;AACtC,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM;AACxB,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;AACvB,QAAA,OAAO,IAAI;IACb;+GAzFW,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA9B,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,iFChCpC,0YAiBC,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDeY,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,cAGpB,KAAK,EAAA,QAAA,EAAA,0YAAA,EAAA;;;MExBR,gBAAgB,CAAA;AAI3B,IAAA,WAAA,GAAA;QA6EA,IAAA,CAAA,iBAAiB,GAAG,UAAU,QAAQ,EAAA;AACpC,YAAA,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC;AACxD,QAAA,CAAC;QACD,IAAA,CAAA,qBAAqB,GAAG,UAAU,QAAQ,EAAA;YACxC,OAAO,QAAQ,CAAC,SAAS;AAC3B,QAAA,CAAC;IAlFe;IAEhB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAA;QAC3B,IAAI,CAAC,OAAO,EAAE;YACZ;QACF;AACA,QAAA,MAAM,WAAW,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,CAAC;QAC7E,IAAI,WAAW,EAAE;YACf,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;YACtF,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC;QACzC;IACF;IAEA,SAAS,CAAC,MAAM,EAAE,MAAM,EAAA;QACtB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC;IAClD;IACA,iBAAiB,CAAC,KAAK,GAAG,EAAE,EAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB;QACF;AACA,QAAA,CAAC,CAAC,KAAK,CAAC,MAAK;AACX,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE;AACrC,QAAA,CAAC,CAAC;IACJ;IACA,eAAe,GAAA;QACb,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE;QACpD,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;QACnD,YAAY,CAAC,OAAO,CAAC,CAAA,KAAA,EAAQ,IAAI,CAAC,OAAO,CAAA,YAAA,CAAc,EAAE,gBAAgB,CAAC;IAC5E;AAEA,IAAA,gBAAgB,CAAC,MAAM,EAAA;AACrB,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;IAC/B;AACQ,IAAA,gBAAgB,CAAC,MAAM,EAAA;QAC7B,IAAI,CAAC,MAAM,EAAE;YACX;QACF;AACA,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK;AAC7B,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW;AACtC,QAAA,IAAI,eAAe,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA,KAAA,EAAQ,IAAI,CAAC,OAAO,CAAA,cAAA,CAAgB,CAAC;QAChF,IAAI,SAAS,GAAQ,EAAE;QACvB,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;AAC/B,YAAA,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC;QACzC;AACA,QAAA,SAAS,CAAC,QAAQ,CAAC,GAAG,WAAW;AACjC,QAAA,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;QAC3C,YAAY,CAAC,OAAO,CAAC,CAAA,KAAA,EAAQ,IAAI,CAAC,OAAO,CAAA,cAAA,CAAgB,EAAE,eAAe,CAAC;AAE3E,QAAA,IAAI,gBAAgB,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA,KAAA,EAAQ,IAAI,CAAC,OAAO,CAAA,YAAA,CAAc,CAAC;AAC/E,QAAA,IAAI,UAAU;AACd,QAAA,IAAI,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE;YAC/B,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE;QAChD;aAAO;AACL,YAAA,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC;QAC3C;QACA,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,MAAM,KAAI;AAC/B,YAAA,IAAI,QAAQ,KAAK,MAAM,CAAC,KAAK,EAAE;AAC7B,gBAAA,MAAM,CAAC,iBAAiB,GAAG,IAAI;AAC/B,gBAAA,MAAM,CAAC,KAAK,GAAG,WAAW;YAC5B;AACF,QAAA,CAAC,CAAC;AACF,QAAA,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;QAC7C,YAAY,CAAC,OAAO,CAAC,CAAA,KAAA,EAAQ,IAAI,CAAC,OAAO,CAAA,YAAA,CAAc,EAAE,gBAAgB,CAAC;AAC1E,QAAA,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,MAAM,KAAI;AAC9D,YAAA,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE;AAC7B,gBAAA,MAAM,CAAC,iBAAiB,GAAG,IAAI;YACjC;AACF,QAAA,CAAC,CAAC;IACJ;AACA,IAAA,YAAY,CAAC,GAAG,EAAA;AACd,QAAA,OAAO,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI,GAAG,UAAU,GAAG,GAAG,EAAE,IAAI,EAAE,SAAS;IAC9G;IAEA,iBAAiB,GAAA;QACf,YAAY,CAAC,UAAU,CAAC,CAAA,KAAA,EAAQ,IAAI,CAAC,OAAO,CAAA,YAAA,CAAc,CAAC;QAC3D,YAAY,CAAC,UAAU,CAAC,CAAA,KAAA,EAAQ,IAAI,CAAC,OAAO,CAAA,cAAA,CAAgB,CAAC;IAC/D;AAOA,IAAA,WAAW,CAAE,IAAI,EAAA;QACf,OAAO,IAAI,CAAC,WAAW;IACzB;;+GAzFW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA,CAAA;;4FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACLD;;;;;;;;;;;;;;AAcE;MAYW,kBAAkB,CAAA;AAgB7B,IAAA,WAAA,CAAmB,aAAqC,EAAA;QAArC,IAAA,CAAA,aAAa,GAAb,aAAa;QAdhC,IAAA,CAAA,QAAQ,GAAG,EAAE;QAEJ,IAAA,CAAA,UAAU,GAAW,MAAM;QAC3B,IAAA,CAAA,YAAY,GAAW,MAAM;QAE7B,IAAA,CAAA,UAAU,GAAW,GAAG;QACxB,IAAA,CAAA,QAAQ,GAAW,GAAG;QACtB,IAAA,CAAA,UAAU,GAAW,GAAG;QACxB,IAAA,CAAA,WAAW,GAAW,CAAC;QAEhC,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,YAAY,GAAG,EAAE;AACjB,QAAA,IAAA,CAAA,qBAAqB,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC;QAGjE,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,SAAS,CAAC,OAAO,IAAG;YACpD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAW,KAAI;AAC7C,gBAAA,OAAO,MAAM,CAAC,MAAM,KAAK,IAAI;AAC/B,YAAA,CAAC,CAAC;YACF,IAAI,GAAG,GAAG,EAAE;AACZ,YAAA,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;gBAC7C,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE;AAC/C,oBAAA,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK;oBACxB;gBACF;YACF;AACA,YAAA,IAAI,CAAC,YAAY,GAAG,GAAG;AACzB,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,SAAS,KAAI;AACnD,YAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC5B,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;IACjD;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;IACjD;AAEA,IAAA,IAAI,YAAY,GAAA;QACd,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;AAC5E,YAAA,OAAO,IAAI;QACb;QACA,MAAM,KAAK,GAAQ,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;QACnD,MAAM,GAAG,GAAQ,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC/C,OAAO,GAAG,IAAI,KAAK;IACrB;AAEA,IAAA,IAAI,YAAY,GAAA;QACd,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;AAC9E,YAAA,OAAO,IAAI;QACb;AACA,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;QAClD,OAAO,KAAK,IAAI,CAAC;IACnB;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC;QACpB,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;AACjD,QAAA,MAAM,SAAS,GAAc;YAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,QAAQ,EAAE,IAAI,CAAC,YAAY;YAC3B,KAAK,EAAE,IAAI,CAAC,YAAY;YACxB,KAAK,EAAE,IAAI,CAAC,YAAY;SACzB;AACD,QAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,CAAC;IAC5C;AAGA,IAAA,YAAY,CAAC,SAAoB,EAAA;AAC/B,QAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,CAAC;IAC5C;+GA7EW,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAe,sBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,2PC1B/B,2xCA8BA,EAAA,MAAA,EAAA,CAAA,uhGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAd,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAe,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDJa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,cAGpB,KAAK,EAAA,QAAA,EAAA,2xCAAA,EAAA,MAAA,EAAA,CAAA,uhGAAA,CAAA,EAAA;;sBAMlB;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;;ME5BU,yBAAyB,CAAA;AANtC,IAAA,WAAA,GAAA;AASY,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,YAAY,EAAE;AASvD,IAAA;IAPC,yBAAyB,CAAC,MAAM,EAAE,OAAO,EAAA;AACvC,QAAA,MAAM,KAAK,GAAG;YACZ,MAAM;YACN;SACD;AACD,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC;IAC1C;+GAXW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,sMCRtC,ioBAgBM,EAAA,MAAA,EAAA,CAAA,62CAAA,CAAA,EAAA,CAAA,CAAA;;4FDRO,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,8BAA8B,cAG5B,KAAK,EAAA,QAAA,EAAA,ioBAAA,EAAA,MAAA,EAAA,CAAA,62CAAA,CAAA,EAAA;;sBAIlB;;sBACA;;;MEFU,gBAAgB,CAAA;AAa3B,IAAA,WAAA,GAAA;QAZS,IAAA,CAAA,KAAK,GAAG,aAAa;QACrB,IAAA,CAAA,QAAQ,GAAG,EAAE;QACb,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,MAAM,GAAG,IAAI;QACb,IAAA,CAAA,aAAa,GAAG,KAAK;QACrB,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,YAAY,GAAG,KAAK;AAEnB,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAO;AACnC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAO;IAE5B;IAEf,WAAW,GAAA;QACT,IAAI,CAAC,UAAU,GAAG;AAChB,YAAA,kBAAkB,EAAE,kBAAkB,GAAG,IAAI,CAAC,KAAK,GAAG,OAAO;SAC9D;IACH;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;IACvB;+GAvBW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,2VCT7B,8hBAeA,EAAA,MAAA,EAAA,CAAA,yuCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAhB,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDNa,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAP5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,cAGZ,KAAK,EAAA,QAAA,EAAA,8hBAAA,EAAA,MAAA,EAAA,CAAA,yuCAAA,CAAA,EAAA;;sBAIlB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;;MEZU,oBAAoB,CAAA;AA6B/B,IAAA,WAAA,GAAA;QA5BA,IAAA,CAAA,wBAAwB,GAAU,EAAE;QACpC,IAAA,CAAA,yBAAyB,GAAU,EAAE;QAE5B,IAAA,CAAA,WAAW,GAAG,QAAQ;QACtB,IAAA,CAAA,YAAY,GAAG,KAAK;QACpB,IAAA,CAAA,aAAa,GAAG,KAAK;QACrB,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,YAAY,GAAG,EAAE;QACjB,IAAA,CAAA,WAAW,GAAG,KAAK;QACnB,IAAA,CAAA,6BAA6B,GAAG,KAAK;AACpC,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAO;AAC1C,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAAO;AAC3C,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAO;AAC9C,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,YAAY,EAAO;AAC/C,QAAA,IAAA,CAAA,4BAA4B,GAAG,IAAI,YAAY,EAAO;AACtD,QAAA,IAAA,CAAA,6BAA6B,GAAG,IAAI,YAAY,EAAO;AACvD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAO;QAEhD,IAAA,CAAA,UAAU,GAAG,IAAI;QACjB,IAAA,CAAA,oBAAoB,GAAU,EAAE;QAChC,IAAA,CAAA,qBAAqB,GAAU,EAAE;QACjC,IAAA,CAAA,YAAY,GAAG,EAAE;QACjB,IAAA,CAAA,eAAe,GAAG,EAAE;QAcpB,IAAA,CAAA,uBAAuB,GAAU,EAAE;QASnC,IAAA,CAAA,wBAAwB,GAAU,EAAE;QASpC,IAAA,CAAA,SAAS,GAAG,KAAK;QA2IjB,IAAA,CAAA,WAAW,GAAG,MAAK;AACjB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YACtB,IAAI,CAAC,iBAAiB,EAAE;AAC1B,QAAA,CAAC;AAsED,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,CAAM,EAAE,CAAM,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IA9O/E;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE;QACrC;IACF;IAIA,IAAa,sBAAsB,CAAC,KAAU,EAAA;QAC5C,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,uBAAuB,GAAG,KAAK;YACpC,IAAI,CAAC,iBAAiB,EAAE;QAC1B;IACF;IAIA,IAAa,uBAAuB,CAAC,KAAU,EAAA;QAC7C,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,wBAAwB,GAAG,KAAK;YACrC,IAAI,CAAC,iBAAiB,EAAE;QAC1B;IACF;IAIA,IAAa,QAAQ,CAAC,KAAc,EAAA;AAClC,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;IACxB;IAEA,IAAa,uBAAuB,CAAC,KAAU,EAAA;QAC7C,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,wBAAwB,GAAG,KAAK;YACrC,IAAI,CAAC,iBAAiB,EAAE;QAC1B;IACF;IAEA,IAAa,wBAAwB,CAAC,KAAU,EAAA;QAC9C,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,yBAAyB,GAAG,KAAK;YACtC,IAAI,CAAC,iBAAiB,EAAE;QAC1B;IACF;AAEA,IAAA,UAAU,CAAC,IAAS,EAAA;AAClB,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;IACvC;AAEA,IAAA,wBAAwB,CAAC,IAAS,EAAA;QAChC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,YAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;YACvC,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC;YACpE,IAAI,CAAC,IAAI,EAAE;QACb;IACF;AAEA,IAAA,yBAAyB,CAAC,IAAS,EAAA;QACjC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,YAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC;YACxC,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC;YACtE,IAAI,CAAC,IAAI,EAAE;QACb;IACF;AAEA,IAAA,mBAAmB,CAAC,SAAS,EAAA;QAC3B,IAAG,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE;AACtC,YAAA,OAAO,KAAK;QACd;AACA,QAAA,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AAC9D,YAAA,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;QACpC;QACA,IAAI,QAAQ,GAAG,KAAK;QACpB,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC5C,YAAA,IAAG,IAAI,KAAK,SAAS,EAAE;gBACrB,QAAQ,GAAG,IAAI;YACjB;AACF,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC7C,YAAA,IAAG,IAAI,KAAK,SAAS,EAAE;gBACrB,QAAQ,GAAG,IAAI;YACjB;AACF,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,QAAQ;IACjB;AAEA,IAAA,mBAAmB,CAAC,IAAS,EAAA;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;gBAC1E,OAAO,IAAI,KAAK,IAAI;AACtB,YAAA,CAAC,CAAC;YACF,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC;AACpE,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;YACpC,IAAI,CAAC,IAAI,EAAE;QACb;IACF;AAEA,IAAA,oBAAoB,CAAC,IAAS,EAAA;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;gBAC5E,OAAO,IAAI,KAAK,IAAI;AACtB,YAAA,CAAC,CAAC;YACF,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC;AACtE,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;YACrC,IAAI,CAAC,IAAI,EAAE;QACb;IACF;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;IACzB;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;IACxB;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU;QACpC;IACF;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;QACzB;IACF;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;IACxB;IAEA,WAAW,CAAC,MAAqB,EAAE,YAAoB,EAAA;AACrD,QAAA,QAAQ,MAAM,CAAC,GAAG;AAChB,YAAA,KAAK,OAAO;AACV,gBAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC;gBAClC,MAAM,CAAC,eAAe,EAAE;gBACxB,MAAM,CAAC,cAAc,EAAE;gBACvB;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,IAAI,EAAE;AACX,gBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE;AAChC,gBAAA,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,KAAK,EAAE;gBAC1C,MAAM,CAAC,eAAe,EAAE;gBACxB,MAAM,CAAC,cAAc,EAAE;gBACvB;AACF,YAAA;gBACE,IAAI,CAAC,WAAW,EAAE;;AAEtB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;IACtC;AAEA,IAAA,aAAa,CAAC,MAAqB,EAAA;AACjC,QAAA,QAAQ,MAAM,CAAC,GAAG;AAChB,YAAA,KAAK,KAAK;gBACR,IAAI,CAAC,YAAY,EAAE;AACnB,gBAAA,IAAI,CAAC,YAAY,GAAG,EAAE;gBACtB;YACF;;IAEJ;;;IASA,kBAAkB,GAAA;QAChB,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,IAAI,CAAC,YAAY,KAAK,EAAE,EAAE;gBAC5B,IAAI,CAAC,iBAAiB,EAAE;YAC1B;QACF,CAAC,EAAE,EAAE,CAAC;IACR;IAEA,iBAAiB,GAAA;QACf,IAAI,+BAA+B,GAAU,EAAE;QAC/C,IAAI,gCAAgC,GAAU,EAAE;AAChD,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;YACnD,+BAA+B,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;gBAC9E,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;AACrD,YAAA,CAAC,CAAC;YACF,gCAAgC,GAAG,IAAI,CAAC;kBACpC,IAAI,CAAC;kBACL,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACnG;aAAO;AACL,YAAA,+BAA+B,GAAG,IAAI,CAAC,wBAAwB;AAC/D,YAAA,gCAAgC,GAAG,IAAI,CAAC,yBAAyB;QACnE;AAEA,QAAA,IAAI,CAAC,oBAAoB,GAAG,+BAA+B;AAC3D,QAAA,IAAI,CAAC,qBAAqB,GAAG,gCAAgC;IAC/D;AAEA,IAAA,eAAe,CAAC,SAAiB,EAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACvB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,YAAA,IAAI,SAAS,KAAK,EAAE,EAAE;gBACpB,IAAI,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;gBAEnC,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,GAAG,EAAE;AAC1C,oBAAA,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;gBACpC;qBAAO;oBACL,SAAS,GAAG,GAAG;gBACjB;AAEA,gBAAA,SAAS,GAAG,CAAA,EAAG,SAAS,CAAA,EAAG,SAAS,EAAE;AACtC,gBAAA,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE;gBAE5B,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE;AACxC,oBAAA,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;AAClC,oBAAA,IAAI,SAAS,KAAK,GAAG,EAAE;AACrB,wBAAA,IAAI,CAAC,yBAAyB,CAAC,SAAS,CAAC;AACzC,wBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC;oBACvC;yBAAO;AACL,wBAAA,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC;AACxC,wBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC;oBACxC;gBACF;qBAAO;AACL,oBAAA,IAAI,CAAC,YAAY,GAAG,EAAE;oBACtB;gBACF;YACF;AACA,YAAA,IAAI,CAAC,YAAY,GAAG,EAAE;YACtB,IAAI,CAAC,IAAI,EAAE;QACb;IACF;AAEA,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,uBAAuB,EAAE,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,wBAAwB,EAAE,MAAM,IAAI,CAAC;IAChG;+GA1QW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,imCCRjC,47LAkJA,EAAA,MAAA,EAAA,CAAA,mqVAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAgB,IAAA,CAAA,GAAA,EAAA,QAAA,EAAA,OAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,YAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FD1Ia,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,cAGhB,KAAK,EAAA,QAAA,EAAA,47LAAA,EAAA,MAAA,EAAA,CAAA,mqVAAA,CAAA,EAAA;;sBAMlB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAQA,SAAS;uBAAC,QAAQ;;sBAClB,SAAS;uBAAC,iBAAiB;;sBAa3B;;sBASA;;sBASA;;sBAIA;;sBAOA;;;AE7EH;;;;;;;;;;;;;;AAcE;MAsCW,kBAAkB,CAAA;IAQ7B,IAAa,OAAO,CAAE,EAAU,EAAA;AAC9B,QAAA,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,EAAE;QACrB,IAAI,CAAC,qBAAqB,EAAE;IAC9B;IAKA,IAAa,IAAI,CAAC,KAAU,EAAA;AAC1B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;IACpB;AAkKA,IAAA,WAAA,CACS,GAAqB,EACpB,kBAA0C,EAC1C,iBAA8C,EAAA;QAF/C,IAAA,CAAA,GAAG,GAAH,GAAG;QACF,IAAA,CAAA,kBAAkB,GAAlB,kBAAkB;QAClB,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QA3KlB,IAAA,CAAA,OAAO,GAAG,EAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAC;QAc1C,IAAA,CAAA,aAAa,GAAG,KAAK;QACrB,IAAA,CAAA,SAAS,GAAQ,EAAE;QACnB,IAAA,CAAA,aAAa,GAAQ,EAAE;QACvB,IAAA,CAAA,YAAY,GAAQ,qDAAqD;QACzE,IAAA,CAAA,cAAc,GAAG,YAAY;QAC7B,IAAA,CAAA,cAAc,GAAG,IAAI;;QAErB,IAAA,CAAA,eAAe,GAAG,KAAK;;QAEvB,IAAA,CAAA,YAAY,GAAG,KAAK;QACpB,IAAA,CAAA,WAAW,GAAG,CAAC;QACf,IAAA,CAAA,YAAY,GAAG,QAAQ;AACvB,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAC/B,IAAA,CAAA,UAAU,GAAG,MAAM;QACnB,IAAA,CAAA,YAAY,GAAG,MAAM;AACpB,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAkC;;AAEpE,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAE;AAC9B,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAE;AAC9B,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAE;AAC9B,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAE;QAE1C,IAAA,CAAA,KAAK,GAAG,MAAM;QAWd,IAAA,CAAA,aAAa,GAAQ,EAAE;;QAIvB,IAAA,CAAA,oBAAoB,GAAG,KAAK;QAE5B,IAAA,CAAA,mBAAmB,GAAG,IAAI;QAC1B,IAAA,CAAA,gBAAgB,GAAG,EAAE;QACrB,IAAA,CAAA,cAAc,GAAG,EAAE;QACnB,IAAA,CAAA,mBAAmB,GAAG,EAAE;QACxB,IAAA,CAAA,aAAa,GAAG,EAAE;QAElB,IAAA,CAAA,cAAc,GAAgB,IAAI;QAClC,IAAA,CAAA,YAAY,GAAgB,IAAI;QAIhC,IAAA,CAAA,iBAAiB,GAAG,KAAK;AAEzB,QAAA,IAAA,CAAA,YAAY,GAAQ;AAClB,YAAA,UAAU,EAAE,EAAE;SACf;QACD,IAAA,CAAA,eAAe,GAAG,EAAE;QACpB,IAAA,CAAA,aAAa,GAAO,EAAE;QACtB,IAAA,CAAA,cAAc,GAAU,EAAE;QAC1B,IAAA,CAAA,eAAe,GAAU,EAAE;QAC3B,IAAA,CAAA,sBAAsB,GAAU,EAAE;QAClC,IAAA,CAAA,uBAAuB,GAAU,EAAE;QAGnC,IAAA,CAAA,4BAA4B,GAAQ,EAAE;AACtC,QAAA,IAAA,CAAA,YAAY,GAAiB,IAAI,YAAY,EAAE;QAC/C,IAAA,CAAA,WAAW,GAAG,6BAA6B;AAC1B,QAAA,IAAA,CAAA,iBAAiB,GAA2B;AAC3D,YAAA,IAAI,EAAE,WAAW;AACjB,YAAA,GAAG,EAAE,UAAU;AACf,YAAA,IAAI,EAAE,WAAW;AACjB,YAAA,KAAK,EAAE,YAAY;AACnB,YAAA,MAAM,EAAE,QAAQ;SACjB;AAEM,QAAA,IAAA,CAAA,oBAAoB,GAAG;AAC5B,YAAA,KAAK,EAAE,cAAc;AACrB,YAAA,KAAK,EAAE,cAAc;AACrB,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AAC1B,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,WAAW,EAAE,YAAY;AACzB,YAAA,SAAS,EAAE,eAAe;AAC1B,YAAA,YAAY,EAAE,mBAAmB;AACjC,YAAA,kBAAkB,EAAE;AAClB,gBAAA,QAAQ,EAAE,CAAC,MAAM,EAAE,IAAI,KAAI;AACzB,oBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC;gBACnC,CAAC;AACD,gBAAA,SAAS,EAAE,CAAC,KAAK,KAAI;oBACnB,IAAI,CAAC,eAAe,EAAE;gBACxB,CAAC;AACF,aAAA;AACD,YAAA,iBAAiB,EAAE,IAAI;AACvB,YAAA,MAAM,EAAE,OAAO;AACf,YAAA,eAAe,EAAE,wBAAwB;AACzC,YAAA,qBAAqB,EAAE;AACrB,gBAAA,cAAc,EAAE,CAAC,MAAM,KAAI;AACzB,oBAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;gBACnC,CAAC;AACD,gBAAA,SAAS,EAAE,CAAC,KAAK,KAAI;oBACnB,IAAI,CAAC,eAAe,EAAE;gBACxB,CAAC;AACF,aAAA;SACF;AAMO,QAAA,IAAA,CAAA,sBAAsB,GAAG;AAC/B,YAAA,KAAK,EAAE,kBAAkB;AACzB,YAAA,KAAK,EAAE,kBAAkB;AACzB,YAAA,iBAAiB,EAAE,IAAI;AACvB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AACzB,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,WAAW,EAAE,cAAc;AAC3B,YAAA,SAAS,EAAE,MAAM;AACjB,YAAA,YAAY,EAAE,qBAAqB;AACnC,YAAA,kBAAkB,EAAE;AAClB,gBAAA,UAAU,EAAE,CAAC,IAAI,KAAI;AACnB,oBAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ;oBAC9B,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;AAC7E,oBAAA,CAAC,CAAC,KAAK,CAAC,MAAK;AACX,wBAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC;AAClD,oBAAA,CAAC,CAAC;AACF,oBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC;gBAC/D,CAAC;AACF,aAAA;AACD,YAAA,eAAe,EAAE,0BAA0B;AAC3C,YAAA,qBAAqB,EAAE;AACrB,gBAAA,SAAS,EAAE,CAAC,QAAiB,KAAI;AAC/B,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;wBACrB;oBACF;oBACA,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,KAAI;AAC9B,wBAAA,GAAG,CAAC,QAAQ,GAAG,QAAQ;AACzB,oBAAA,CAAC,CAAC;oBACF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,WAAW,EAAC,CAAC;AAChD,oBAAA,CAAC,CAAC,KAAK,CAAC,MAAK;AACX,wBAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC;AAClD,oBAAA,CAAC,CAAC;gBACJ,CAAC;AACF,aAAA;SACF;AAWC,QAAA,IAAI,CAAC,0BAA0B,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC;QAC5G,IAAI,CAAC,sBAAsB,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QAClF,IAAI,CAAC,0BAA0B,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;QAC3F,IAAI,CAAC,yBAAyB,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;IAC3F;IAEA,YAAY,CAAC,QAAQ,EAAE,YAAY,EAAA;QAC/B,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC/B,YAAA,OAAO,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC;QACxC;aAAO,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YACrC,OAAO,QAAQ,CAAC,MAAM;QAC1B;aAAO;YACH,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC7D;IACJ;IAIA,IAAa,iBAAiB,CAAC,KAAU,EAAA;AACvC,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;IAEjC;AAEA,IAAA,IAAI,aAAa,GAAA;QACf,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;IAC5D;IAEA,IAAa,YAAY,CAAC,KAAa,EAAA;AACrC,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;YACrB;QACF;AACA,QAAA,CAAC,CAAC,KAAK,CAAC,MAAK;YACX,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE;AACjC,YAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC;AAClD,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC;AACnF,QAAA,IAAI,UAAU,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YACzC,IAAI,CAAC,sBAAsB,EAAE;QAC/B;AACA,QAAA,OAAO,UAAU;IACnB;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AACrD,YAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;QAChC,CAAC,CAAC,CACH;QAED,IAAI,CAAC,mBAAmB,GAAG;AACzB,YAAA,mBAAmB,EAAE,wBAAwB;AAC7C,YAAA,iBAAiB,EAAE,sBAAsB;AACzC,YAAA,kBAAkB,EAAE,uBAAuB;AAC3C,YAAA,yBAAyB,EAAE,0BAA0B;AACrD,YAAA,yBAAyB,EAAE,wBAAwB;AACnD,YAAA,sBAAsB,EAAE,2BAA2B;SACpD;QAED,IAAI,CAAC,kBAAkB,GAAG;AACxB,YAAA,KAAK,EAAE,aAAa;AACpB,YAAA,UAAU,EAAE,cAAc;AAC1B,YAAA,YAAY,EAAE,6BAA6B;AAC3C,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,kBAAkB,EAAE,EAAC,YAAY,EAAE,mBAAmB,EAAC;AACvD,YAAA,wBAAwB,EAAE,2BAA2B;SACtD;AAED,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAC3B,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,qBAAqB,EAAE;YAC5B,IAAI,CAAC,uBAAuB,EAAE;YAC9B,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,4BAA4B,EAAE;YACnC,IAAI,CAAC,qBAAqB,EAAE;YAC5B,IAAI,CAAC,gBAAgB,EAAE;QACzB;IACF;AAEA,IAAA,WAAW,CAAC,OAAY,EAAA;QACtB,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE;AACvC,YAAA,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,OAAO,CAAC;QAC9C;IACF;AAEA,IAAA,uBAAuB,CAAC,KAAK,EAAA;QAC3B,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC;IAC/D;IAEA,cAAc,CAAC,KAAK,EAAE,IAAI,EAAA;AACxB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,CAAC,CAAC,KAAK,CAAC,MAAK;YACX,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE,YAAY,IAAI,GAAG;YACnE,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,OAAO;AACvD,YAAA,MAAM,UAAU,GAAG,YAAY,IAAI,MAAM,GAAG,MAAM,GAAG,YAAY,GAAG,CAAC;YACrE,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,GAAG,GAAG;YACnC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,CAAC,GAAG,UAAU;QAC/C,CAAC,EAAE,EAAE,CAAC;IACR;AAEA,IAAA,WAAW,CAAC,MAAM,EAAA;AAChB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;IAC7B;IAEA,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;YACrB;QACF;QACA,IAAI,CAAC,uBAAuB,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC;AACnE,QAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,uBAAuB,CAAC;AAChE,QAAA,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE;QAC5B,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE;AACvC,QAAA,CAAC,CAAC,KAAK,CAAC,MAAK;YACX,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE;AAC9B,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,oBAAoB,CAAC,KAAK,EAAA;QACxB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,GAAG,GAAG;QACnC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,CAAC;AAChC,QAAA,CAAC,CAAC,KAAK,CAAC,MAAK;AACX,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAC5B,CAAC,EAAE,GAAG,CAAC;IACT;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,YAAY,GAAG;AAClB,YAAA,UAAU,EAAE,EAAE;SACf;AACD,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;IAC7B;IAEA,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qBAAqB,EAAA;AACjF,QAAA,IAAI,CAAC,aAAa,GAAG,OAAO;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO;QAC7B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,EAAE;AACjC,QAAA,IAAI,IAAI,KAAK,UAAU,EAAE;AACvB,YAAA,IAAI,CAAC,cAAc,GAAG,QAAQ;AAC9B,YAAA,IAAI,CAAC,mBAAmB,GAAG,WAAW,IAAI,QAAQ;AAClD,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,YAAA,CAAC,CAAC,KAAK,CAAC,MAAK;AACX,gBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;YAChC,CAAC,EAAE,EAAE,CAAC;AACN,YAAA,CAAC,CAAC,KAAK,CAAC,MAAK;AACX,gBAAA,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE;YAC1B,CAAC,EAAE,GAAG,CAAC;QACT;AAAO,aAAA,IAAI,IAAI,KAAK,WAAW,EAAE;YAC/B,IAAI,CAAC,mBAAmB,GAAG,qBAAqB,CAAC,mBAAmB,KAAK,KAAK;AAC9E,YAAA,IAAI,CAAC,gBAAgB,GAAG,QAAQ;AAChC,YAAA,IAAI,CAAC,cAAc,GAAG,qBAAqB,EAAE,iBAAiB,EAAE;AAChE,YAAA,IAAI,CAAC,eAAe,GAAG,qBAAqB,EAAE,kBAAkB,EAAE;AAClE,YAAA,IAAI,CAAC,sBAAsB,GAAG,qBAAqB,CAAC,yBAAyB,EAAE;AAC/E,YAAA,IAAI,CAAC,uBAAuB,GAAG,qBAAqB,CAAC,0BAA0B,EAAE;AACjF,YAAA,IAAI,CAAC,mBAAmB,GAAG,WAAW;AACtC,YAAA,IAAI,CAAC,4BAA4B,GAAG,qBAAqB;AACzD,YAAA,CAAC,CAAC,KAAK,CAAC,MAAK;AACX,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;YAC7B,CAAC,EAAE,GAAG,CAAC;QACT;aAAO;AACL,YAAA,CAAC,CAAC,KAAK,CAAC,MAAK;AACX,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC/B,YAAA,CAAC,CAAC;QACJ;IACF;AAEA,IAAA,kBAAkB,CAAC,KAAK,EAAA;AACtB,QAAA,IAAI,SAAS;AACb,QAAA,IAAI,KAAK;AACT,QAAA,IAAI,OAAO,GAAGkB,QAAM,EAAE;QACtB,IAAI,aAAa,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,QAAA,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,KAAK,CAAC;QAC9C,QAAQ,KAAK;AACX,YAAA,KAAK,MAAM;gBACT,SAAS,GAAGA,QAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC;gBACzC,KAAK,GAAG,WAAW;gBACnB;AACF,YAAA,KAAK,KAAK;gBACR,SAAS,GAAGA,QAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;gBAC1C,KAAK,GAAG,UAAU;gBAClB;AACF,YAAA,KAAK,MAAM;gBACT,SAAS,GAAGA,QAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;gBACxC,KAAK,GAAG,WAAW;gBACnB;AACF,YAAA,KAAK,OAAO;gBACV,SAAS,GAAGA,QAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC;gBACzC,KAAK,GAAG,YAAY;gBACpB;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;oBACnB;gBACF;gBACA,SAAS,GAAGA,QAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACrC,gBAAA,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;oBACjE,OAAO,GAAGA,QAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACrC;gBACA,KAAK,GAAG,QAAQ;gBAChB,aAAa,GAAG,KAAK;gBACrB;AACF,YAAA;gBACE,SAAS,GAAGA,QAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;gBAC1C,KAAK,GAAG,UAAU;gBAClB;;QAEJ,MAAM,cAAc,GAAG,kBAAkB,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;QAClE,MAAM,YAAY,GAAG,kBAAkB,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;AAC9D,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,EAAE,YAAY,CAAC;QAExE,IAAI,aAAa,EAAE;AACjB,YAAA,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE;AACzB,YAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,gBAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;YACnC;QACF;AACA,QAAA,IAAI,KAAK,KAAK,QAAQ,EAAE;AACtB,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;YACvD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YACvC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QACvC;AACA,QAAA,MAAM,SAAS,GAAc;YAC3B,QAAQ,EAAE,IAAI,CAAC,cAAc;AAC7B,YAAA,KAAK,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC;AACrC,YAAA,KAAK,EAAE,KAAK;YACZ,UAAU,EAAE,IAAI,CAAC,mBAAmB;AACpC,YAAA,IAAI,EAAE;SACP;AAED,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,SAAS,CAAC;IACjD;AAEA,IAAA,IAAI,oBAAoB,GAAA;;QAEtB,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,YAAY,EAAE;YAC5C,OAAO,CAAA,EAAGA,QAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,MAAMA,QAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA,CAAE;QAClH;AACA,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,OAAO,CAAA,EAAGA,QAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI;QAChE;;QAEA,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,KAAK,QAAQ,EAAE;YACzD,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;QACzD;AACA,QAAA,OAAO,EAAE;IACX;IAEA,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAA;QAC/B,IAAI,KAAK,GAAG,EAAE;QACd,IAAI,KAAK,GAAG,EAAE;QACd,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,uBAAuB,GAAG,EAAE;YACjC,IAAI,IAAI,CAAC,sBAAsB,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1C,gBAAA,IAAI,CAAC,sBAAsB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACrE;YACA,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AAClD,gBAAA,IAAI,KAAK,GAAG,CAAC,EAAE;oBACb,KAAK,IAAI,IAAI;oBACb,KAAK,IAAI,IAAI;gBACf;AACA,gBAAA,KAAK,KAAK,CAAC,IAAI,CAAC,mBAAmB,GAAG,GAAG,GAAG,EAAE,IAAI,IAAI,CAAC;AACvD,gBAAA,KAAK,KAAK,CAAC,IAAI,CAAC,mBAAmB,GAAG,KAAK,GAAG,EAAE,IAAI,IAAI,CAAC;AAC3D,YAAA,CAAC,CAAC;QACJ;aAAO;AACL,YAAA,IAAI,CAAC,sBAAsB,GAAG,EAAE;YAChC,MAAM,SAAS,GAAG,IAAI,CAAC,4BAA4B,CAAC,qBAAqB,EAAE;YAC3E,IAAI,IAAI,CAAC,uBAAuB,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3C,gBAAA,IAAI,CAAC,uBAAuB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACvE;YACA,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AACnD,gBAAA,IAAI,KAAK,GAAG,CAAC,EAAE;oBACb,KAAK,IAAI,IAAI;oBACb,KAAK,IAAI,IAAI;gBACf;AACA,gBAAA,KAAK,IAAI,GAAG,GAAG,IAAI;AACnB,gBAAA,KAAK,IAAI,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC;AAClC,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,MAAM,SAAS,GAAc;YAC3B,QAAQ,EAAE,IAAI,CAAC,gBAAgB;AAC/B,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,KAAK,EAAE,KAAK;YACZ,UAAU,EAAE,IAAI,CAAC,mBAAmB;AACpC,YAAA,IAAI,EAAE;SACP;QACD,IAAI,CAAC,4BAA4B,CAAC,yBAAyB,CAAC,IAAI,CAAC,sBAAsB,CAAC;QACxF,IAAI,CAAC,4BAA4B,CAAC,0BAA0B,CAAC,IAAI,CAAC,uBAAuB,CAAC;AAC1F,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,SAAS,CAAC;IACjD;IAEA,WAAW,CAAC,KAAK,EAAE,MAAM,EAAA;AACvB,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC;AAC5C,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;IAC/B;AAEA,IAAA,iBAAiB,CAAC,KAAK,EAAA;AACrB,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;IAChC;AAEA,IAAA,aAAa,CAAC,KAAK,EAAA;AACjB,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,QAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;IACnC;AAEA,IAAA,6BAA6B,CAAC,IAAiB,EAAA;AAC7C,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC;IAC3D;AAEA,IAAA,2BAA2B,CAAC,IAAiB,EAAA;AAC3C,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC;QACzD,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,YAAY,EAAE;AAC5C,YAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;QACnC;IACF;AAEA,IAAA,gBAAgB,CAAC,KAAK,EAAA;AACpB,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;IAC9B;IAEA,UAAU,GAAA;QACR,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,QAAQ,EAAC,CAAC;IAC/C;IAEA,WAAW,GAAA;AACT,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;IAC/C;IAEA,YAAY,GAAA;QACV,OAAO,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;IACvD;IAEA,sBAAsB,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB;QACF;AACA,QAAA,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,OAAO,IAAG;YAC5C,IAAI,CAAC,0BAA0B,EAAE;AACnC,QAAA,CAAC,CAAC;QACF,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC;AACnD,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;IAC/B;IAEA,gBAAgB,GAAA;QACd,IAAI,CAAC,WAAW,GAAG;AACjB,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,YAAY,EAAE,QAAQ;AACtB,YAAA,QAAQ,EAAE,gBAAgB;YAC1B,SAAS,EAAE,IAAI,CAAC,SAAS;AACzB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,yBAAyB,EAAE,IAAI;AAC/B,YAAA,wBAAwB,EAAE,KAAK;AAC/B,YAAA,6BAA6B,EAAE,IAAI;AACnC,YAAA,0BAA0B,EAAE,IAAI;AAChC,YAAA,qBAAqB,EAAE,IAAI;AAC3B,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,aAAa,EAAE;AACb,gBAAA,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,KAAK;AACd,aAAA;AACD,YAAA,aAAa,EAAE,CAAC,MAAM,KAAI;AACxB,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;YAC7B,CAAC;AACD,YAAA,cAAc,EAAE,CAAC,MAAM,KAAI;AACzB,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;YAC7B,CAAC;YACD,YAAY,EAAE,MAAK;gBACjB,QAAQ,CAAC,gBAAgB,CAAc,iBAAiB,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;gBAC9F,QAAQ,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBACzF,QAAQ,CAAC,cAAc,CAAC,wBAAwB,CAAC,EAAE,KAAK,EAAE;gBAC1D,QAAQ,CAAC,gBAAgB,CAAc,uBAAuB,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YAC1G,CAAC;AACD,YAAA,aAAa,EAAE;;gBAEb,aAAa,EAAE,UAAU,MAAM,EAAA;oBAC7B,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;gBACtC,CAAC;gBACD,YAAY,EAAE,UAAU,MAAM,EAAA;oBAC5B,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC;gBACrC,CAAC;gBACD,uBAAuB,EAAE,UAAU,MAAM,EAAA;AACvC,oBAAA,QACI,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS;AAC7B,wBAAA,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC;AAC7B,wBAAA,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;gBAEpD,CAAC;gBACD,WAAW,EAAE,UAAU,MAAM,EAAA;AAC3B,oBAAA,QACI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY;AAClE,wBAAA,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC;AAC7B,wBAAA,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;gBAEhD,CAAC;gBACD,kBAAkB,EAAE,UAAU,MAAM,EAAA;AAClC,oBAAA,QACI,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS;AAC7B,wBAAA,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC;wBAC7B,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC;gBAEtC,CAAC;gBACD,gBAAgB,EAAE,UAAU,MAAM,EAAA;AAChC,oBAAA,QACI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY;AAClE,wBAAA,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC;gBAE/C,CAAC;gBACD,eAAe,EAAE,UAAU,MAAM,EAAA;AAC/B,oBAAA,QACI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY;AAClE,wBAAA,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;gBAEjD,CAAC;gBACD,gBAAgB,EAAE,UAAU,MAAM,EAAA;AAChC,oBAAA,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,KAAK,SAAS;gBACnF,CAAC;gBACD,kBAAkB,EAAE,UAAU,MAAM,EAAA;AAClC,oBAAA,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,KAAK,aAAa;gBACzF,CAAC;gBACD,eAAe,EAAE,UAAU,MAAM,EAAA;oBAC/B,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC;gBACvC,CAAC;AACF,aAAA;AACD,YAAA,YAAY,EAAE,CAAC,MAAM,KAAI;AACvB,gBAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YAC5B,CAAC;AACD,YAAA,oBAAoB,EAAE,CAAC,QAAQ,KAAI;AACjC,gBAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;oBACzB;gBACF;AACA,gBAAA,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,CAAC;AACjD,gBAAA,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,EAAE;oBAChD,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;oBAC3C,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAA,KAAA,EAAQ,KAAK,CAAA,CAAE,EAAE,MAAM,CAAC;gBAC1C;qBAAO;AACL,oBAAA,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAA,KAAA,EAAQ,KAAK,CAAA,CAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;gBACrD;AACA,gBAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;YAC/B,CAAC;YACD,YAAY,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;AACjC,YAAA,YAAY,EAAE,CAAC,QAAQ,KAAI;AACzB,gBAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;YACnC,CAAC;AACD,YAAA,WAAW,EAAE,CAAC,IAAI,KAAI;AACpB,gBAAA,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,KAAK;AAC/B,gBAAA,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC;AACnE,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;gBACvD,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK;gBAC1B,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO;AACnC,gBAAA,IAAI,CAAC,GAAG,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;;gBAG5D,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAK,EAAE,CAAC;AAChF,gBAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;oBAC7B,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,CAAC,oBAAoB,CAAC;gBAC7D;AACA,gBAAA,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI;AACvB,gBAAA,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5C,CAAC;AACD,YAAA,eAAe,EAAE,CAAC,QAAQ,KAAI;AAC5B,gBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;oBACpB;gBACF;AACA,gBAAA,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC;AAC3E,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;oBACpB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAC5B,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAC9B,IAAI,CAAC,uBAAuB,CAAC,MAAM,GAAG,CAAC,CAC1C;AACD,oBAAA,CAAC,CAAC,KAAK,CAAC,MAAK;AACX,wBAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;AACxE,oBAAA,CAAC,CAAC;gBACJ;gBACA,IAAI,CAAC,kBAAkB,EAAE;AACzB,gBAAA,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE;YAC5B,CAAC;AACD,YAAA,mBAAmB,EAAE,CAAC,QAAQ,KAAI;AAChC,gBAAA,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE;AAC5B,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;YAC1B,CAAC;AACD,YAAA,cAAc,EAAE,CAAC,QAAQ,KAAI;AAC3B,gBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;oBACpB;gBACF;gBACA,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK;AAC1C,gBAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,KAAK,MAAM;AACzC,gBAAA,IAAI,CAAC,uBAAuB,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC,MAAM,KAAI;AAC5E,oBAAA,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,EAAE;AAC1B,wBAAA,MAAM,CAAC,YAAY,GAAG,MAAM;AAC5B,wBAAA,MAAM,CAAC,eAAe,GAAG,MAAM;oBACjC;AACA,oBAAA,OAAO,MAAM;AACf,gBAAA,CAAC,CAAC;gBACF,IAAI,CAAC,kBAAkB,EAAE;AACzB,gBAAA,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE;AAC5B,gBAAA,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE;YAC5B,CAAC;AACD,YAAA,eAAe,EAAE,CAAC,QAAQ,KAAI;gBAC5B,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,kBAAkB,EAAE;oBAC9D;gBACF;AACA,gBAAA,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,MAAM,CAAC;YAClD,CAAC;AACD,YAAA,aAAa,EAAE,CAAC,QAAQ,KAAI;gBAC1B,IAAI,CAAC,yBAAyB,EAAE;YAClC,CAAC;SACF;IACH;AAEA,IAAA,cAAc,CAAC,QAAQ,EAAA;QACrB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,IAAI;AAC/C,QAAA,CAAC,CAAC,KAAK,CAAC,MAAK;AACX,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;AAClC,YAAA,CAAC,CAAC,KAAK,CAAC,MAAK;AACX,gBAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC;gBAChD,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE;YACnC,CAAC,EAAE,EAAE,CAAC;QACR,CAAC,EAAE,EAAE,CAAC;IACR;IAEA,iBAAiB,GAAA;AACf,QAAA,MAAM,gBAAgB,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA,KAAA,EAAQ,IAAI,CAAC,GAAG,CAAC,OAAO,CAAA,YAAA,CAAc,CAAC;QACrF,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC;QAC/C,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAC,KAAK,EAAE,UAAU,EAAC,CAAC;YAC1D,IAAI,CAAC,oBAAoB,EAAE;QAC7B;IACF;IAEA,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,MAAM,KAAI;AAClE,YAAA,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;YACpD,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AAChD,YAAA,OAAO,MAAM;AACf,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,aAAa,CAAC,MAAM,EAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,EAAE;AACzD,YAAA,OAAO,EAAE;QACX;AACA,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;QACjE,IAAI,CAAC,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE;AACjD,YAAA,OAAO,EAAE;QACX;AACA,QAAA,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,CAAC;AAC/C,QAAA,IAAI,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AAClC,YAAA,OAAO,uBAAuB;QAChC;AACA,QAAA,OAAO,EAAE;IACX;IACA,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAA;AACnC,QAAA,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,MAAM,KAAI;AAClE,YAAA,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,EAAE;AAC1B,gBAAA,MAAM,CAAC,IAAI,GAAG,CAAC,OAAO;YACxB;AACA,YAAA,OAAO,MAAM;AACf,QAAA,CAAC,CAAC;AACF,QAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,uBAAuB,EAAE;AACjD,YAAA,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,EAAE;AAC1B,gBAAA,MAAM,CAAC,IAAI,GAAG,CAAC,OAAO;YACxB;QACF;QACA,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE;IAC9B;IAEA,qBAAqB,GAAA;AACnB,QAAA,QAAO,IAAI,CAAC,GAAG,CAAC,OAAO;AACrB,YAAA,KAAK,cAAc;AACjB,gBAAA,IAAI,CAAC,eAAe,GAAG,cAAc;gBACrC;AACF,YAAA,KAAK,eAAe;AAClB,gBAAA,IAAI,CAAC,eAAe,GAAG,eAAe;gBACtC;AACF,YAAA,KAAK,yBAAyB;AAC5B,gBAAA,IAAI,CAAC,eAAe,GAAG,yBAAyB;gBAChD;AACF,YAAA,KAAK,iBAAiB;AACpB,gBAAA,IAAI,CAAC,eAAe,GAAG,sBAAsB;gBAC7C;AACF,YAAA,KAAK,YAAY;AACf,gBAAA,IAAI,CAAC,eAAe,GAAG,YAAY;gBACnC;AACF,YAAA,KAAK,gBAAgB;AACnB,gBAAA,IAAI,CAAC,eAAe,GAAG,gBAAgB;gBACvC;AACF,YAAA,KAAK,cAAc;AACjB,gBAAA,IAAI,CAAC,eAAe,GAAG,cAAc;gBACrC;AACF,YAAA,KAAK,UAAU;AACb,gBAAA,IAAI,CAAC,eAAe,GAAG,UAAU;gBACjC;AACF,YAAA,KAAK,gBAAgB;AACnB,gBAAA,IAAI,CAAC,eAAe,GAAG,SAAS;gBAChC;AACF,YAAA,KAAK,cAAc;AACjB,gBAAA,IAAI,CAAC,eAAe,GAAG,cAAc;gBACrC;AACF,YAAA,KAAK,kBAAkB;AACrB,gBAAA,IAAI,CAAC,eAAe,GAAG,kBAAkB;gBACzC;AACF,YAAA,KAAK,sBAAsB;AACzB,gBAAA,IAAI,CAAC,eAAe,GAAG,sBAAsB;gBAC7C;AACF,YAAA,KAAK,8BAA8B;AACjC,gBAAA,IAAI,CAAC,eAAe,GAAG,8BAA8B;gBACrD;AACF,YAAA,KAAK,UAAU;AACb,gBAAA,IAAI,CAAC,eAAe,GAAG,UAAU;gBACjC;AACF,YAAA,KAAK,aAAa;AAChB,gBAAA,IAAI,CAAC,eAAe,GAAG,aAAa;gBACpC;AACF,YAAA,KAAK,iBAAiB;AACpB,gBAAA,IAAI,CAAC,eAAe,GAAG,iBAAiB;gBACxC;;IAEN;IAEA,yBAAyB,CAAC,MAAM,EAAE,OAAO,EAAA;AACvC,QAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAC/D,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE;AACpC,QAAA,CAAC,CAAC,KAAK,CAAC,MAAK;YACX,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC;AACpD,QAAA,CAAC,CAAC;IACJ;IAEA,oBAAoB,GAAA;AAClB,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,WAAW;AACtE,QAAA,MAAM,kBAAkB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,OAAO,CAAC;AACtE,QAAA,MAAM,iBAAiB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;QACtE,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,EAAE,QAAQ,CAAC;AACzD,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC;QAC3D,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,iBAAiB,EAAE,QAAQ,CAAC;AACvD,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC;IAC3D;IAEA,aAAa,CAAC,UAAU,GAAG,EAAE,EAAA;AAC3B,QAAA,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;AAC/B,YAAA,IAAI,SAAS,CAAC,aAAa,EAAE;gBAC3B,SAAS,CAAC,qBAAqB,GAAG;AAChC,oBAAA,cAAc,EAAE,CAAC,MAAM,KAAI;AACzB,wBAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;oBACnC,CAAC;AACD,oBAAA,SAAS,EAAE,CAAC,KAAK,KAAI;wBACnB,IAAI,CAAC,eAAe,EAAE;oBACxB,CAAC;iBACF;YACH;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC;QAC3C,IAAI,CAAC,uBAAuB,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC;AACnE,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;AAC5B,YAAA,MAAM,UAAU,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CAAC;AAC5E,YAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAC9F,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,kBAAkB,EACxF,UAAU,CACb;AACD,YAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,qBAAqB;AACvF,gBAAA,IAAI,CAAC,oBAAoB,CAAC,qBAAqB;QACrD;AAAO,aAAA,KAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG;;QAE5D;AAAO,aAAA,KAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG;YAC3D,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC;QAC9D;AAAO,aAAA,IAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACzD,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC;QAChE;AAAQ,aAAA,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE;AACnC,YAAA,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,sBAAsB,CAAC;YACtE,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC;QAC9D;IACF;IAEA,uBAAuB,GAAA;QACrB,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,uBAAuB,CAAC;IACrE;IAEA,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACxE,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC;AACtE,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC;IAC7D;IAEA,kBAAkB,GAAA;QAChB,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,uBAAuB,CAAC;QAChE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE;IACtC;IAEA,gBAAgB,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;YACvD;QACF;AACA,QAAA,MAAM,eAAe,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA,KAAA,EAAQ,IAAI,CAAC,GAAG,CAAC,OAAO,CAAA,cAAA,CAAgB,CAAC;QACtF,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;YAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC;YAC7C,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,KAAK,KAAI;gBACvC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC,MAAM,KAAI;AACjD,oBAAA,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,EAAE;AAC1B,wBAAA,MAAM,CAAC,KAAK,GAAG,QAAQ;AACvB,wBAAA,MAAM,CAAC,iBAAiB,GAAG,IAAI;oBACjC;AACF,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;QACJ;IACF;IAEA,4BAA4B,GAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;YACvD;QACF;AACA,QAAA,MAAM,gBAAgB,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA,KAAA,EAAQ,IAAI,CAAC,GAAG,CAAC,OAAO,CAAA,YAAA,CAAc,CAAC;AACrF,QAAA,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,OAAO,gBAAgB,KAAK,WAAW,EAAE;YAC3E,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC;YAC9C,MAAM,aAAa,GAAG,EAAE;YACxB,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,QAAQ,KAAI;gBAChC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC,MAAM,KAAI;oBACjD,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,EAAE;AACnC,wBAAA,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;AAC1B,wBAAA,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI;oBAC7B;AACF,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;YACF,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC,MAAM,KAAI;gBACjD,IAAI,QAAQ,GAAG,KAAK;gBACpB,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,QAAQ,KAAI;oBACpC,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,EAAE;wBACnC,QAAQ,GAAG,IAAI;oBACjB;AACF,gBAAA,CAAC,CAAC;gBACF,IAAI,CAAC,QAAQ,EAAE;AACb,oBAAA,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC5B;AACF,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,uBAAuB,GAAG,aAAa;QAC9C;IACF;AAEA,IAAA,kBAAkB,CAAC,QAAQ,EAAA;QACzB,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,2BAA2B,CAAgB;QACrF,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,0BAA0B,CAAgB;QACxF,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,gCAAgC,CAAgB;QAC1F,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,iCAAiC,CAAgB;AAC5F,QAAA,IAAI,CAAC,UAAU,IAAI,CAAC,cAAc,EAAE;YAClC;QACF;AACA,QAAA,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW;AAC1C,QAAA,MAAM,SAAS,GAAG,cAAc,CAAC,WAAW;AAC5C,QAAA,MAAM,eAAe,GAAG,WAAW,GAAG,SAAS;AAC/C,QAAA,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE;AACrB,YAAA,UAAU,EAAE,SAAS,CAAC,GAAG,CAAC,uBAAuB,CAAC;QACpD;aAAO;AACL,YAAA,UAAU,EAAE,SAAS,CAAC,MAAM,CAAC,uBAAuB,CAAC;QACvD;QACA,IAAI,QAAQ,CAAC,IAAI,GAAG,eAAe,GAAG,CAAC,EAAE;AACvC,YAAA,WAAW,EAAE,SAAS,CAAC,GAAG,CAAC,wBAAwB,CAAC;QACtD;aAAO;AACL,YAAA,WAAW,EAAE,SAAS,CAAC,MAAM,CAAC,wBAAwB,CAAC;QACzD;IACF;AAEA,IAAA,OAAO,CAAC,QAAQ,EAAA;AACd,QAAA,MAAM,YAAY,GAAQ,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC;QAChG,OAAO,QAAQ,GAAG,YAAY;IAChC;;+GA97BW,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAO,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAV,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,2BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,eAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,SAAA,EAFhB,CAAC,2BAA2B,CAAC,2VClD5C,ssOA6LA,EAAA,MAAA,EAAA,CAAA,4r9BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAjB,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,qBAAA,EAAA,6BAAA,EAAA,gCAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,uBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,wBAAA,EAAA,6BAAA,EAAA,oBAAA,EAAA,6BAAA,EAAA,8BAAA,EAAA,8BAAA,EAAA,wBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,0BAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,uBAAA,EAAA,mBAAA,EAAA,wBAAA,EAAA,+BAAA,EAAA,wBAAA,EAAA,6BAAA,EAAA,+BAAA,EAAA,8BAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,+BAAA,EAAA,gBAAA,EAAA,yBAAA,EAAA,0BAAA,EAAA,mCAAA,EAAA,8BAAA,EAAA,qBAAA,EAAA,0BAAA,EAAA,wBAAA,EAAA,mBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,qCAAA,EAAA,mCAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,kCAAA,EAAA,sCAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,sCAAA,EAAA,sBAAA,EAAA,6BAAA,EAAA,4BAAA,EAAA,cAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,6BAAA,EAAA,+BAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,oBAAA,EAAA,0BAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,cAAA,EAAA,UAAA,EAAA,WAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,uBAAA,EAAA,2BAAA,EAAA,eAAA,EAAA,2BAAA,EAAA,qBAAA,EAAA,+BAAA,EAAA,4BAAA,EAAA,yBAAA,EAAA,OAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,+BAAA,EAAA,wBAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,8BAAA,EAAA,uBAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,4BAAA,EAAA,wBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,0BAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,gBAAA,EAAA,yBAAA,EAAA,+BAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,4BAAA,EAAA,wBAAA,EAAA,6BAAA,EAAA,yBAAA,EAAA,2CAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,4BAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,8BAAA,EAAA,mCAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,6BAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,6BAAA,EAAA,oBAAA,EAAA,gCAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,yBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,sBAAA,EAAA,iBAAA,EAAA,2BAAA,EAAA,iCAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,wBAAA,EAAA,uCAAA,EAAA,UAAA,EAAA,2BAAA,EAAA,yBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,cAAA,EAAA,SAAA,EAAA,4BAAA,EAAA,2CAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,kCAAA,EAAA,uCAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,iCAAA,EAAA,yBAAA,EAAA,qBAAA,EAAA,sBAAA,EAAA,yBAAA,EAAA,gCAAA,EAAA,qCAAA,EAAA,2BAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,qCAAA,EAAA,oBAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,4BAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,yBAAA,EAAA,iCAAA,EAAA,wBAAA,EAAA,4BAAA,EAAA,oCAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,yBAAA,EAAA,wBAAA,EAAA,2BAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,6BAAA,EAAA,yBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,8BAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,+BAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,eAAA,EAAA,2BAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,gCAAA,EAAA,0BAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,yBAAA,EAAA,wBAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,aAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,6BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,aAAA,EAAA,eAAA,EAAA,+BAAA,EAAA,gCAAA,EAAA,8BAAA,EAAA,mBAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,aAAA,EAAA,aAAA,EAAA,cAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,yBAAA,EAAA,sBAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,UAAA,EAAA,QAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,cAAA,EAAA,eAAA,EAAA,aAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,yBAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,uBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,cAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,qCAAA,EAAA,cAAA,EAAA,4BAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,aAAA,EAAA,aAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,0BAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,eAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,6BAAA,EAAA,0BAAA,EAAA,0BAAA,EAAA,4BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAyB,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,YAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,yBAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,gBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,eAAA,EAAA,WAAA,EAAA,UAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,cAAA,EAAA,eAAA,EAAA,YAAA,EAAA,WAAA,EAAA,cAAA,EAAA,aAAA,EAAA,+BAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,8BAAA,EAAA,+BAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDzIa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAP9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,UAAA,EAGd,KAAK,EAAA,SAAA,EACN,CAAC,2BAA2B,CAAC,EAAA,QAAA,EAAA,ssOAAA,EAAA,MAAA,EAAA,CAAA,4r9BAAA,CAAA,EAAA;;sBAGzC;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBAIA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAGA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBAkIA,SAAS;uBAAC,aAAa;;sBACvB,SAAS;uBAAC,aAAa;;sBACvB,SAAS;uBAAC,gBAAgB;;sBAyB1B;;sBASA;;;AExQH;;;;;;;;;;;;;;AAcE;AAkBI,MAAO,2BAA4B,SAAQ,iBAAiB,CAAA;IAM9D,WAAA,CACa,GAA8B,EACvC,aAAqC,EAC7B,QAAwB,EAChC,aAAmC,EACnC,UAAqB,EACc,UAA4B,EAAA;QAE/D,KAAK,CAAC,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC;QAPvD,IAAA,CAAA,GAAG,GAAH,GAAG;QAEJ,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAGmB,IAAA,CAAA,UAAU,GAAV,UAAU;QAXjD,IAAA,CAAA,KAAK,GAAG,gBAAgB;QAGxB,IAAA,CAAA,eAAe,GAAG,KAAK;IAWvB;IAES,QAAQ,GAAA;QACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;QAC7C,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;QACvC,KAAK,CAAC,QAAQ,EAAE;IACpB;AAEA,IAAA,mBAAmB,CAAC,MAAc,EAAA;QAC9B,QAAQ,MAAM;AACV,YAAA,KAAK,KAAK;AACN,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACJ,YAAA,KAAK,MAAM;AACP,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACJ,YAAA,KAAK,QAAQ;gBACT,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;oBAC9C,OAAO,GAAG,CAAC,QAAQ;AACvB,gBAAA,CAAC,CAAC;AACF,gBAAA,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC,aAAa,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,uBAAuB,KAAI;AACvG,oBAAA,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,GAAG,gBAAgB,GAAG,eAAe;AAC3E,oBAAA,IAAI,uBAAuB,CAAC,MAAM,GAAG,CAAC,EAAE;wBACpC,IAAI,CAAC,uBAAuB,CAAC,uBAAuB,EAAE,aAAa,EAAE,KAAK,CAAC;oBAC/E;yBAAO;AACH,wBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,KAAK,CAAC;oBAC7C;AACJ,gBAAA,CAAC,CAAC;gBACF;YACJ;;IAER;AAEA,IAAA,WAAW,CAAC,KAAU,EAAA;QAClB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;AAChD,QAAA,QAAO,KAAK,EAAE,MAAM;AAChB,YAAA,KAAK,WAAW;AAChB,YAAA,KAAK,YAAY;AACb,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC5B;AACJ,YAAA,KAAK,QAAQ;gBACT,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;gBACrC;AACJ,YAAA,KAAK,QAAQ;AACT,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACJ,YAAA,KAAK,QAAQ;AACT,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC3B;AACJ,YAAA,KAAK,cAAc;gBACf,IAAI,CAAC,gBAAgB,EAAE;gBACvB;AACJ,YAAA,KAAK,mBAAmB;gBACpB,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC1C;AACJ,YAAA;gBACI;;IAEZ;IAEA,eAAe,CAAC,MAAc,EAAE,IAAS,EAAA;AACrC,QAAA,IAAI,CAAC,UAAU,EAAE,sBAAsB,EAAE,IAAI,CAAC;YAC1C,MAAM;AACN,YAAA,IAAI,EAAE,QAAQ;YACd,IAAI;AACJ,YAAA,IAAI,EAAC;AACR,SAAA,CAAC;IACN;AAEA,IAAA,UAAU,CAAC,IAAS,EAAA;QAChB,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;IACzC;AAEA,IAAA,UAAU,CAAC,KAAU,EAAA;AACjB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,KAAK;AAC9B,QAAA,IAAG,KAAK,EAAE,OAAO,EAAE;YACf,IAAI,CAAC,WAAW,EAAE;QACtB;IACJ;AAEA,IAAA,WAAW,CAAC,KAAK,EAAA;AACb,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;IAChC;AAEA,IAAA,uBAAuB,CAAC,uBAAuB,EAAE,aAAa,EAAE,KAAK,EAAA;QACjE,MAAM,WAAW,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;YACrD,OAAO,IAAI,CAAC,IAAI;AACpB,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,IAAI,GAAG;AACT,YAAA,QAAQ,EAAE,+BAA+B;AACzC,YAAA,KAAK,EAAE,gBAAgB;AACvB,YAAA,OAAO,EAAE,CAAA,oDAAA,CAAsD;AAC/D,YAAA,UAAU,EAAE,kGAAkG;AAC9G,YAAA,UAAU,EAAE,WAAW;AACvB,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,WAAW,EAAE,6BAA6B;AAC1C,YAAA,QAAQ,EAAE,+BAA+B;AACzC,YAAA,cAAc,EAAE;SACnB;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACpD,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,SAAS,EAAE,KAAK;AACnB,SAAA,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AAC9C,YAAA,IAAI,MAAM,EAAE,SAAS,EAAE;AACnB,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,KAAK,CAAC;YAC7C;AACJ,QAAA,CAAC,CAAC;IACN;AA3HS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,gLAYxB,iBAAiB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAZpB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,sGChCxC,wxCA2BA,EAAA,MAAA,EAAA,CAAA,8GAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,WAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,cAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDKa,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBANvC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,cAGlB,KAAK,EAAA,QAAA,EAAA,wxCAAA,EAAA,MAAA,EAAA,CAAA,8GAAA,CAAA,EAAA;;0BAcZ,MAAM;2BAAC,iBAAiB;;;AE5CjC;;;;;;;;;;;;;;AAcE;MAoBW,MAAM,CAAA;AAElB;AAEM,MAAM,SAAS,GAAG;AACrB,IAAA,UAAU,EAAE,EAAE;AACd,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,WAAW,EAAE,EAAE;AACf,IAAA,UAAU,EAAE;;AAQV,MAAgB,eAAgB,SAAQ,mBAAmB,CAAA;IAK7D,IAAa,QAAQ,CAAC,IAAI,EAAA;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACtB;AACA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACvB;IAGA,IAAa,QAAQ,CAAC,IAAY,EAAA;AAChC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;IACvB;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACvB;AAyCA,IAAA,IAAI,YAAY,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,YAAY,KAAK,KAAK;IAClD;AAEA,IAAA,WAAA,CACc,cAA8B,EACH,UAA4B,EAC5B,WAA4B,EACvD,MAAe,EACf,KAAsB,EACtB,QAAmB,EACO,eAAiC,EAC3D,UAAsB,EAAA;AAEhC,QAAA,KAAK,EAAE;QATG,IAAA,CAAA,cAAc,GAAd,cAAc;QACa,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,WAAW,GAAX,WAAW;QACtC,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACkB,IAAA,CAAA,eAAe,GAAf,eAAe;QACzC,IAAA,CAAA,UAAU,GAAV,UAAU;QAxEf,IAAA,CAAA,OAAO,GAAG,KAAK;QAGxB,IAAA,CAAA,SAAS,GAAQ,EAAE;AAkBT,QAAA,IAAA,CAAA,UAAU,GAAsB,IAAI,YAAY,EAAO;QAO1D,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,MAAM,GAAQ,EAAE;QACb,IAAA,CAAA,UAAU,GAAG,YAAY;QACzB,IAAA,CAAA,WAAW,GAAQ,MAAM;QAC5B,IAAA,CAAA,SAAS,GAAG,KAAK;QACd,IAAA,CAAA,mBAAmB,GAAG,IAAI;QACpC,IAAA,CAAA,WAAW,GAAU,EAAE;QACvB,IAAA,CAAA,YAAY,GAAU,EAAE;QACxB,IAAA,CAAA,WAAW,GAAQ,EAAE;QACrB,IAAA,CAAA,OAAO,GAAQ,EAAE;QACjB,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,QAAQ,GAAQ,EAAE;QAClB,IAAA,CAAA,WAAW,GAAG,KAAK;QACnB,IAAA,CAAA,UAAU,GAAG,CAAC,EAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAC,EAAE,EAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAC,CAAC;QACrF,IAAA,CAAA,QAAQ,GAAG,EAAE;QAGb,IAAA,CAAA,QAAQ,GAAG,KAAK;QAEhB,IAAA,CAAA,SAAS,GAAQ,EAAE;AACnB,QAAA,IAAA,CAAA,wBAAwB,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,EAAC,OAAO,EAAE,GAAG,EAAC,CAAC;QAC9E,IAAA,CAAA,gBAAgB,GAAG,KAAK;QACxB,IAAA,CAAA,UAAU,GAAG,KAAK;AAElB,QAAA,IAAA,CAAA,YAAY,GAAiB,IAAI,YAAY,EAAE;AAE5B,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,4BAA4B,CAAC;QAE/E,IAAA,CAAA,QAAQ,GAAG,KAAK;AAmBZ,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC,kBAAkB,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAChG,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACjB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,IAAG;AACnC,YAAA,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;AACvB,YAAA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;AACd,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;YACtB;iBAAO;AACH,gBAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;YAC7B;QACJ,CAAC,CAAC,CACL;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACjB,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAU,KAAI;AACnC,YAAA,IAAI,KAAK,YAAY,aAAa,EAAE;gBAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI;AACtD,gBAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,UAAU,EAAE,WAAW;AACpD,gBAAA,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE;oBACtB;gBACF;gBACA,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAChD,gBAAA,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC;YACnC;QACJ,CAAC,CAAC,CACL;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACjB,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,SAAS,CAAC,MAAM,IAAG;YACpD,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;AAC5D,YAAA,IACI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;gBACvD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,KAAK,WAAW,CAAC,OAAO,EAAE,EAAE;gBAClD,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EACvC;AACE,gBAAA,IAAI,CAAC,SAAS,GAAG,WAAW;gBAC5B;YACJ;AACA,YAAA,IAAI,CAAC,SAAS,GAAG,WAAW;AAC5B,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAChB;YACJ;YACA,IAAI,CAAC,QAAQ,EAAE;QACnB,CAAC,CAAC,CACL;QACD,IAAI,CAAC,YAAY,EAAE;IACvB;AAEA,IAAA,IAAI,MAAM,GAAA;QACN,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IACrC;AAEA,IAAA,IAAI,0BAA0B,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;IAClF;AAEA,IAAA,IAAI,yBAAyB,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM;AACzE,cAAE,IAAI,CAAC,qBAAqB,CAAC;cAC3B,EAAE;IACZ;AAEA,IAAA,cAAc,CAAC,WAAmB,EAAA;QAC9B,OAAO,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,WAAW,CAAC;IAC1D;AAEA,IAAA,IAAI,qBAAqB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,uBAAuB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;IAC3F;;IAGU,oBAAoB,GAAA;AAC1B,QAAA,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;IACnF;AAEA,IAAA,IACI,8BAA8B,GAAA;QAC9B,OAAO,IAAI,CAAC,qBAAqB;IACrC;IAES,eAAe,CAAC,SAAS,GAAG,KAAK,EAAA;QACtC,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;QAChB,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;AAC3C,YAAA,IAAI,CAAC,cAAc,EAAE,aAAa,EAAE,KAAK,EAAE;QAC/C;AACA,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE;AAC9B,YAAA,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAC5E;QACA,IAAI,CAAC,aAAa,EAAE,aAAa,EAAE,gBAAgB,CAAC,QAAQ,EAAE,MAAK;AACjE,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,SAAS,GAAG,CAAC;AAClE,QAAA,CAAC,CAAC;IACN;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE;gBAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE;gBACtC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AACxC,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK;gBACxB,IAAI,CAAC,aAAa,EAAE;gBACpB;YACJ;AACA,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;YACrB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AACjF,gBAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,EAAE,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;gBACvE,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AACxC,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK;gBACxB,IAAI,CAAC,aAAa,EAAE;AACxB,YAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACZ,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AAC1B,YAAA,CAAC,CAAC;QACN;AACA,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACxB;IAEA,YAAY,GAAA;AACR,QAAA,IAAI;YACA,MAAM,IAAI,GAAG,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC;AAC5C,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,GAAG;QAC1D;QAAE,OAAO,KAAK,EAAE;AACZ,YAAA,IAAI,CAAC,QAAQ,GAAG,GAAG;QACvB;IACJ;AAEA,IAAA,eAAe,CAAC,QAAQ,EAAA;AACpB,QAAA,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC5B;QACJ;IACJ;IAEA,QAAQ,GAAA;QACJ,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,IAAE,KAAK;AACvD,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf;QACJ;IACJ;IAEA,YAAY,GAAA;AACR,QAAA,OAAO,EAAE;IACb;IAEA,SAAS,CAAC,OAAO,GAAG,IAAI,EAAE,aAAa,GAAG,KAAK,EAAE,IAAK,EAAE,KAAM,EAAA;AAC1D,QAAA,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,WAAW,EAAE;AACpC,YAAA,MAAM,SAAS,GAAG,OAAO,CAAC,yGAAyG,CAAC;YACpI,IAAI,CAAC,SAAS,EAAE;gBACZ;YACJ;QACJ;AACA,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,aAAa,CAAC;QAC3C;aAAO;YACH,IAAI,CAAC,gBAAgB,EAAE;QAC3B;IACJ;IAEA,UAAU,CAAC,OAAO,GAAG,IAAI,EAAE,aAAa,GAAG,KAAK,EAAE,IAAK,EAAE,KAAM,EAAA;QAC3D,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAC,OAAO,EAAE,OAAO,EAAC,CAAC;QACnC,IAAI,KAAK,EAAE;YACP,KAAK,CAAC,eAAe,EAAE;QAC3B;IACJ;IAEA,gBAAgB,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,mBAAmB,EAAE;AACjE,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;QACxB;aAAO;YACH,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA,EAAG,IAAI,CAAC,QAAQ,CAAA,CAAE,CAAC;QAClD;IACJ;IAEA,SAAS,GAAA;QACL,IAAI,CAAC,wBAAwB,EAAE;IACnC;IAEU,eAAe,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACvB;QACJ;QACA,IAAI,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AACvC,QAAA,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;QACvC,IAAI,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AACvC,QAAA,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;QACvC,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC/C,QAAA,IAAI,UAAU,KAAK,IAAI,CAAC,WAAW,EAAE;AACjC,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;QACpC;AACA,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU;IACjC;AAEA,IAAA,aAAa,CAAC,MAAM,EAAA;QAChB,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,KAAI;AACzB,YAAA,IAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE;AAC3B,gBAAA,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC;YACtB;AAAO,iBAAA,IAAG,QAAQ,CAAC,GAAG,CAAC,EAAE;AACrB,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;YAC3B;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,MAAM;IACjB;AAEA,IAAA,gBAAgB,CAAC,GAAG,EAAA;AAChB,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IACvD;AAEA,IAAA,eAAe,CAAC,GAAG,EAAA;AACf,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC;AAClC,QAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,WAAA,CAAa,EACb,CAAA,gCAAA,CAAkC,CACrC;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACzC;AAEA,IAAA,mBAAmB,CAAC,aAAa,EAAA;QAC7B,IAAI,QAAQ,GAAG,EAAE;QACjB,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAG;AACjC,YAAA,IAAI,KAAK,GAAG,CAAC,EAAE;gBACX,QAAQ,IAAI,GAAG;YACnB;YACA,QAAQ,IAAI,IAAI;AACpB,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,QAAQ;IACnB;AAEA,IAAA,oBAAoB,CAAC,aAAa,EAAA;QAC9B,IAAI,QAAQ,GAAG,EAAE;QACjB,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAG;AACjC,YAAA,IAAI,KAAK,GAAG,CAAC,EAAE;gBACX,QAAQ,IAAI,IAAI;YACpB;AACA,YAAA,QAAQ,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,CAAG;AAC3B,QAAA,CAAC,CAAC;AACF,QAAA,QAAQ,GAAG,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,CAAG;AAC1B,QAAA,OAAO,QAAQ;IACnB;IAEA,aAAa,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,OAAO,OAAO,CAAC,yGAAyG,CAAC;QAC7H;AACA,QAAA,OAAO,IAAI;IACf;IAEU,aAAa,GAAA;;AAEnB,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE;AACxI,YAAA,MAAM,YAAY,GAAQ;AACtB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,EAAE,EAAE,QAAQ;AACZ,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,IAAI,EAAE,YAAY;AAClB,gBAAA,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;aACvE;AACD,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE,oBAAoB,EAAE;AACvC,gBAAA,YAAY,CAAC,KAAK,GAAG,QAAQ;gBAC7B,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC;YAC5D;iBAAO;AACH,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC;YACvC;QACJ;IACJ;AAEA,IAAA,iBAAiB,CAAC,IAAY,EAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAI;YACvD,OAAO,OAAO,CAAC,IAAI;AACvB,QAAA,CAAC,CAAC;IACN;IAIU,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAClB,YAAA,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC;YACzE;QACJ;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACxD;QACJ;AAEA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE;AACzC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,KAAK,UAAU;AAChD,QAAA,MAAM,0BAA0B,GAAG,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC;AAE1F,QAAA,MAAM,IAAI,GAAQ;AACd,YAAA,QAAQ,EAAE,CAAA,MAAA,EAAS,IAAI,CAAC,UAAU,CAAA,CAAE;AACpC,YAAA,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,CAAA,oDAAA,EAAuD,WAAW,CAAA,CAAA,CAAG;AAC9E,YAAA,UAAU,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AAChC,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,WAAW,EAAE,6BAA6B;AAC1C,YAAA,QAAQ,EAAE,+BAA+B;AACzC,YAAA,cAAc,EAAE;SACnB;QAED,IAAI,0BAA0B,EAAE;AAC5B,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,YAAA,IAAI,CAAC,qBAAqB,GAAG,8DAA8D;AAC3F,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,YAAA,IAAI,CAAC,kBAAkB,GAAG,+HAA+H;AACzJ,YAAA,IAAI,CAAC,oBAAoB,GAAG,mBAAmB;AAC/C,YAAA,IAAI,CAAC,eAAe,GAAG,YAAY;YACnC,IAAI,CAAC,eAAe,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE;QAC5D;QAEA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACjE,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,SAAS,EAAE,KAAK;AACnB,SAAA,CAAC;QACF,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AAC3D,YAAA,IAAI,MAAM,EAAE,SAAS,EAAE;AACnB,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,gBAAA,MAAM,aAAa,GAAG,MAAM,CAAC,kBAAkB,IAAI,KAAK;AAExD,gBAAA,IAAI,aAAa;AACjB,gBAAA,IAAI,SAAS,IAAI,aAAa,EAAE;AAC5B,oBAAA,aAAa,GAAG,IAAI,CAAC,wBAAwB,EAAE;gBACnD;qBAAO;AACH,oBAAA,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC9E;AAEA,gBAAA,aAAa,CAAC,IAAI,CAAC,MAAK;oBACpB,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,EAAG,WAAW,CAAA,QAAA,CAAU,EACxB,wBAAwB,WAAW,CAAC,WAAW,EAAE,CAAA,EAAA,EAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAA,CAAG,CAC9E;AACD,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;oBACrC,IAAI,CAAC,gBAAgB,EAAE;AAC3B,gBAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAI;AACf,oBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,aAAA,CAAe,EACf,CAAA,iBAAA,EAAoB,WAAW,CAAC,WAAW,EAAE,CAAA,EAAA,EAAK,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,OAAO,IAAI,eAAe,CAAA,CAAE,CACxH;AACD,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,gBAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACZ,oBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AAC1B,gBAAA,CAAC,CAAC;YACN;AACJ,QAAA,CAAC,CAAC;IACN;IAEU,wBAAwB,GAAA;AAC9B,QAAA,OAAO,OAAO,CAAC,MAAM,CAAC,4DAA4D,CAAC;IACvF;IAEU,oBAAoB,GAAA;;AAE1B,QAAA,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC;IACzE;IAEU,cAAc,GAAA;;;AAGpB,QAAA,MAAM,OAAO,GAA8B;AACvC,YAAA,sBAAsB,EAAE,YAAY;AACpC,YAAA,YAAY,EAAE,UAAU;AACxB,YAAA,UAAU,EAAE,SAAS;AACrB,YAAA,cAAc,EAAE,aAAa;AAC7B,YAAA,iBAAiB,EAAE,gBAAgB;AACnC,YAAA,sBAAsB,EAAE,oBAAoB;AAC5C,YAAA,8BAA8B,EAAE,4BAA4B;AAC5D,YAAA,kBAAkB,EAAE,gBAAgB;AACpC,YAAA,SAAS,EAAE,eAAe;AAC1B,YAAA,cAAc,EAAE,aAAa;AAC7B,YAAA,gBAAgB,EAAE,eAAe;AACjC,YAAA,eAAe,EAAE,aAAa;AAC9B,YAAA,KAAK,EAAE;SACV;QACD,OAAO,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU;IACtD;AAjckB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAApB,cAAA,EAAA,EAAA,EAAA,KAAA,EAmErB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EACjB,iBAAiB,2FAIjB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAAZ,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAxEV,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,koBAJvB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,y9BAAA,CAAA,EAAA,CAAA,CAAA;;4FAIM,eAAe,EAAA,UAAA,EAAA,CAAA;kBALpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAE,cAEA,KAAK,EAAA,MAAA,EAAA,CAAA,y9BAAA,CAAA,EAAA;;0BAqEZ,MAAM;2BAAC,iBAAiB;;0BACxB,MAAM;2BAAC,iBAAiB;;0BAIxB,MAAM;2BAAC,gBAAgB;;sBAvE3B;;sBACA;;sBAGA;;sBASA;;sBAQA;;sBACA,SAAS;uBAAC,gBAAgB;;sBAC1B,SAAS;uBAAC,iBAAiB;;sBAmC3B,SAAS;uBAAC,eAAe;;sBAyFzB,WAAW;uBAAC,oCAAoC;;;MCtMxC,UAAU,CAAA;AAAvB,IAAA,WAAA,GAAA;QACI,IAAA,CAAA,OAAO,GAAQ,EAAE;QACjB,IAAA,CAAA,QAAQ,GAAQ,EAAE;QAClB,IAAA,CAAA,MAAM,GAAQ,EAAE;QAChB,IAAA,CAAA,OAAO,GAAW,EAAE;QACpB,IAAA,CAAA,UAAU,GAAW,EAAE;QACvB,IAAA,CAAA,OAAO,GAAW,EAAE;QACpB,IAAA,CAAA,IAAI,GAAW,CAAC;QAChB,IAAA,CAAA,cAAc,GAAW,EAAE;IAC/B;AAAC;AAAA;;MCMY,qBAAqB,CAAA;AAkB9B,IAAA,WAAA,CACuC,WAA4B,EAC7B,UAA4B,EACtD,cAA8B,EAC9B,iBAAoC,EAAA;QAHT,IAAA,CAAA,WAAW,GAAX,WAAW;QACZ,IAAA,CAAA,UAAU,GAAV,UAAU;QACpC,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QApB7B,IAAA,CAAA,KAAK,GAAU,EAAE;QACjB,IAAA,CAAA,MAAM,GAAU,EAAE;QAClB,IAAA,CAAA,YAAY,GAAG,KAAK;QAEpB,IAAA,CAAA,sBAAsB,GAAG,EAAE;QAC3B,IAAA,CAAA,uBAAuB,GAAG,EAAE;QAC5B,IAAA,CAAA,qBAAqB,GAAG,EAAE;QAE1B,IAAA,CAAA,8BAA8B,GAAG,EAAE;QACnC,IAAA,CAAA,+BAA+B,GAAG,EAAE;QACpC,IAAA,CAAA,6BAA6B,GAAG,EAAE;QAElC,IAAA,CAAA,yBAAyB,GAAQ,EAAE;QACnC,IAAA,CAAA,0BAA0B,GAAQ,EAAE;QACpC,IAAA,CAAA,wBAAwB,GAAQ,EAAE;IAQlC;AAEA,IAAA,IAAI,CAAC,QAAQ,EAAA;QACT,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,GAAQ,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACjE,QAAA,IAAI,IAAI;QACR,IAAI,QAAQ,EAAE;AACV,YAAA,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;QACzE;aAAO;AACH,YAAA,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC;QAC3D;QAEA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,MAAW,KAAI;YACnC,MAAM,EAAE,GAAG,QAAQ,GAAG,QAAQ,CAAC,EAAE,IAAI,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,MAAM,EAAE,EAAE,CAAC;YACpE,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAI;gBACnF,OAAO,OAAO,CAAC,IAAI;AACvB,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,eAAoB,KAAI;gBACvE,IAAI,CAAC,eAAe,EAAE;AAClB,oBAAA,OAAO,MAAM;gBACjB;AACA,gBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,WAAA,EAAc,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA,CAAE,EAChD,CAAA,aAAA,EAAgB,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA,aAAA,EAAgB,QAAQ,CAAC,IAAI,CAAA,CAAE,CAClF;AACD,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,gBAAA,OAAO,MAAM;AACjB,YAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAI;AAChB,gBAAA,OAAO,KAAK;AAChB,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAI;AACd,YAAA,IAAI,YAAY;YAChB,IAAI,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE;gBACpC,YAAY,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO;YACrD;iBAAO,IAAI,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE;gBAC1C,YAAY,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM;YACpD;AAAM,iBAAA,IAAI,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE;AAC5B,gBAAA,YAAY,GAAG,IAAI,EAAE,KAAK,EAAE,OAAO;YACvC;iBAAO;gBACH,YAAY,GAAG,2BAA2B;YAC9C;AACA,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,yBAAA,CAA2B,EAC3B,YAAY,CACf;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,YAAA,MAAM,IAAI;AACd,QAAA,CAAC,CAAC;IACN;IAEA,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAA;AACrC,QAAA,MAAM,SAAS,GAAG,IAAI,UAAU,EAAE;AAClC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC;AACvC,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAC7B,QAAO,IAAI;AACP,gBAAA;oBACI,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;;AAE5C,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,SAAS;IACpB;IAEO,0BAA0B,GAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,EAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;YACzI,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAI;gBACjD,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,EAAE;gBAC5D,OAAO,QAAQ,CAAC,IAAI;AACxB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,uBAAuB,GAAG,eAAe;AAC9C,YAAA,OAAO,eAAe;AAC1B,QAAA,CAAC,CAAC;IACN;IAEO,yBAAyB,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,EAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;YACvI,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,KAAI;gBAChD,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE;gBACzD,OAAO,OAAO,CAAC,IAAI;AACvB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,sBAAsB,GAAG,eAAe;AAC7C,YAAA,OAAO,eAAe;AAC1B,QAAA,CAAC,CAAC;IACN;IAEO,wBAAwB,GAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,EAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;YACtI,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,KAAI;gBAChD,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE;gBACxD,OAAO,OAAO,CAAC,IAAI;AACvB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,qBAAqB,GAAG,eAAe;AAC5C,YAAA,OAAO,eAAe;AAC1B,QAAA,CAAC,CAAC;IACN;+GAzHS,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAmBlB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EACjB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAAY,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAL,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AApBpB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFlB,MAAM,EAAA,CAAA,CAAA;;4FAET,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAoBQ,MAAM;2BAAC,iBAAiB;;0BACxB,MAAM;2BAAC,iBAAiB;;;MC1BpB,0BAA0B,CAAA;AANvC,IAAA,WAAA,GAAA;AASY,QAAA,IAAA,CAAA,eAAe,GAAsB,IAAI,YAAY,EAAO;QAEtE,IAAA,CAAA,eAAe,GAAG,KAAK;AAiBxB,IAAA;IAfC,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;IAC7B;IAEA,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;IAC9B;AAEA,IAAA,aAAa,CAAC,MAAM,EAAA;AAClB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;IACnC;AAEA,IAAA,cAAc,CAAC,MAAW,EAAA;QACxB,OAAO,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM;IACtE;+GArBW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,qKCTvC,6/BA4BA,EAAA,MAAA,EAAA,CAAA,urHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAnB,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,YAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDnBa,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBANtC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,cAGvB,KAAK,EAAA,QAAA,EAAA,6/BAAA,EAAA,MAAA,EAAA,CAAA,urHAAA,CAAA,EAAA;;sBAIlB;;sBACA;;;AEZH;;;;;;;;;;;;;;AAcE;MAWW,mBAAmB,CAAA;AAuB9B,IAAA,WAAA,GAAA;QAtBS,IAAA,CAAA,IAAI,GAAQ,EAAE;QACd,IAAA,CAAA,MAAM,GAAQ,EAAE;QAChB,IAAA,CAAA,KAAK,GAAG,EAAE;QACV,IAAA,CAAA,WAAW,GAAQ,EAAE;QACrB,IAAA,CAAA,QAAQ,GAAG,QAAQ;QACnB,IAAA,CAAA,YAAY,GAAG,KAAK;QACpB,IAAA,CAAA,WAAW,GAAG,EAAE;QAChB,IAAA,CAAA,gBAAgB,GAAG,MAAM;QACzB,IAAA,CAAA,eAAe,GAAG,cAAc;QAChC,IAAA,CAAA,gBAAgB,GAAG,IAAI;QACvB,IAAA,CAAA,gBAAgB,GAAG,IAAI;;QAEvB,IAAA,CAAA,gBAAgB,GAAG,KAAK;QACxB,IAAA,CAAA,YAAY,GAAU,EAAE;AACvB,QAAA,IAAA,CAAA,cAAc,GAAyB,IAAI,YAAY,EAAU;AACjE,QAAA,IAAA,CAAA,eAAe,GAAsB,IAAI,YAAY,EAAO;AAC5D,QAAA,IAAA,CAAA,oBAAoB,GAAsB,IAAI,YAAY,EAAO;AAE3E,QAAA,IAAA,CAAA,YAAY,GAAG,CAAC,EAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAC,CAAC;QAC1D,IAAA,CAAA,WAAW,GAAG,EAAE;QAChB,IAAA,CAAA,mBAAmB,GAAG,KAAK;IAEZ;AAEf,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC;IACjE;AAEA,IAAA,IAAI,YAAY,GAAA;QACd,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACzC,OAAO,IAAI,CAAC,KAAK;QACnB;AACA,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC;IACjF;AAEA,IAAA,IAAI,cAAc,GAAA;QAChB,IAAI,cAAc,GAAG,KAAK;AAC1B,QAAA,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,IAAG;AACjC,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE;gBAClD,cAAc,GAAG,IAAI;YACvB;AACF,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,cAAc;IACvB;AAEA,IAAA,aAAa,CAAC,KAAK,EAAA;AACjB,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB;QACF;QACA,IAAI,KAAK,EAAE,EAAE,KAAK,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE;YAC7C;QACF;AACA,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAC,CAAC;IACjD;AAEA,IAAA,aAAa,CAAC,MAAM,EAAA;QAClB,IAAI,IAAI,CAAC,gBAAgB,IAAI,MAAM,EAAE,IAAI,KAAK,MAAM,EAAE;YACpD;QACF;QACA,IAAI,MAAM,EAAE,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE;YAChD;QACF;AACA,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE;AACjC,YAAA,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC5B,gBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;YACvB;iBAAO;AACL,gBAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;YAC1B;AACA,YAAA,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ;AAC3B,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;QAC5B;AACA,QAAA,IAAI,MAAM,CAAC,QAAQ,EAAE;YACnB,MAAM,CAAC,QAAQ,EAAE;QACnB;AACA,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAC,CAAC;AACjE,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;IAClC;IAEA,eAAe,GAAA;QACb,KAAK,CAAC,MAAK;AACT,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AACjC,QAAA,CAAC,CAAC;IACJ;IAEA,uBAAuB,GAAA;QACrB,KAAK,CAAC,MAAK;AACT,YAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;AAClC,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;IACpC;AAEA,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM;IACxC;+GAjGW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,omBCzBhC,8rHA6FA,EAAA,MAAA,EAAA,CAAA,4hSAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,YAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA4C,0BAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDpEa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,cAGf,KAAK,EAAA,QAAA,EAAA,8rHAAA,EAAA,MAAA,EAAA,CAAA,4hSAAA,CAAA,EAAA;;sBAGlB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;;AE1CH;;;;;;;;;;;;;;AAcE;MAUW,2BAA2B,CAAA;AAwBtC,IAAA,WAAA,GAAA;QAtBS,IAAA,CAAA,KAAK,GAAG,EAAE;QACV,IAAA,CAAA,MAAM,GAAG,SAAS;QAClB,IAAA,CAAA,SAAS,GAAG,SAAS;QACrB,IAAA,CAAA,MAAM,GAAG,QAAQ;QACjB,IAAA,CAAA,QAAQ,GAAQ,SAAS;QACzB,IAAA,CAAA,SAAS,GAAQ,SAAS;QAC1B,IAAA,CAAA,KAAK,GAAQ,SAAS;QACtB,IAAA,CAAA,KAAK,GAAQ,SAAS;QACtB,IAAA,CAAA,MAAM,GAAQ,SAAS;QAEvB,IAAA,CAAA,KAAK,GAAG,EAAE;QACV,IAAA,CAAA,YAAY,GAAQ,EAAE;QACtB,IAAA,CAAA,YAAY,GAAQ,EAAE;QACtB,IAAA,CAAA,UAAU,GAAQ,IAAI;QACtB,IAAA,CAAA,UAAU,GAAG,KAAK;QAElB,IAAA,CAAA,YAAY,GAAG,KAAK;AAEnB,QAAA,IAAA,CAAA,eAAe,GAAsB,IAAI,YAAY,EAAO;AAC5D,QAAA,IAAA,CAAA,kBAAkB,GAA0B,IAAI,YAAY,EAAW;AACvE,QAAA,IAAA,CAAA,WAAW,GAAuB,IAAI,YAAY,EAAQ;IAErD;IAEf,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;IACzB;AAEA,IAAA,aAAa,CAAC,MAAM,EAAA;AAClB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;IACnC;AAEA,IAAA,YAAY,CAAC,MAAO,EAAA;AAClB,QAAA,IAAI,MAAM,IAAI,MAAM,EAAE;AACpB,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;QAC3B;AAAO,aAAA,IAAI,MAAM,KAAK,OAAO,EAAE;AAC7B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QAC1B;aAAO;AACL,YAAA,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY;QACxC;QACA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;IACjD;+GA3CW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,8lBCxBxC,8+EA0EA,EAAA,MAAA,EAAA,CAAA,kyEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA7C,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA6C,0BAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDlDa,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBANvC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,cAGxB,KAAK,EAAA,QAAA,EAAA,8+EAAA,EAAA,MAAA,EAAA,CAAA,kyEAAA,CAAA,EAAA;;sBAIlB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;;AEzCH,MAAM,mBAAmB,GAAG,+BAA+B;AAC3D,MAAM,mBAAmB,GAA0B,EAAE;AACrD,MAAM,eAAe,GAAmC,EAAE;AAE1D,SAAS,iBAAiB,CAAC,IAAY,EAAA;AACrC,IAAA,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE;QAC7B,OAAO,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACnD;AACA,IAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;AAC1B,QAAA,eAAe,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI;aAC/B,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,EAAE;AACxB,aAAA,IAAI,CAAC,CAAC,IAAI,KAAI;AACb,YAAA,mBAAmB,CAAC,IAAI,CAAC,GAAG,IAAI;AAChC,YAAA,OAAO,eAAe,CAAC,IAAI,CAAC;AAC5B,YAAA,OAAO,IAAI;AACb,QAAA,CAAC;AACA,aAAA,KAAK,CAAC,CAAC,GAAG,KAAI;AACb,YAAA,OAAO,eAAe,CAAC,IAAI,CAAC;AAC5B,YAAA,MAAM,GAAG;AACX,QAAA,CAAC,CAAC;IACN;AACA,IAAA,OAAO,eAAe,CAAC,IAAI,CAAC;AAC9B;MAQa,yBAAyB,CAAA;AANtC,IAAA,WAAA,GAAA;QAOW,IAAA,CAAA,SAAS,GAAG,KAAK;AAoB3B,IAAA;IAjBC,QAAQ,GAAA;QACN,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,wBAAwB,CAAC;AACnE,QAAA,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,YAAa,GAAG,mBAAmB;AAEzE,QAAA,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE;YAC7B,IAAI,CAAC,aAAa,GAAG,EAAC,aAAa,EAAE,mBAAmB,CAAC,IAAI,CAAC,EAAC;YAC/D;QACF;QAEA,iBAAiB,CAAC,IAAI;AACnB,aAAA,IAAI,CAAC,CAAC,IAAI,KAAI;YACb,IAAI,CAAC,aAAa,GAAG,EAAC,aAAa,EAAE,IAAI,EAAC;AAC5C,QAAA,CAAC;aACA,KAAK,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,aAAa,GAAG,EAAC,IAAI,EAAC;AAC7B,QAAA,CAAC,CAAC;IACN;+GApBW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,sHCnCtC,gVAaA,EAAA,MAAA,EAAA,CAAA,8bAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA9C,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDsBa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,cAGrB,KAAK,EAAA,QAAA,EAAA,gVAAA,EAAA,MAAA,EAAA,CAAA,8bAAA,CAAA,EAAA;;sBAGlB;;;AEpCH;;;;;;;;;;;;;;AAcE;MAyBW,iBAAiB,CAAA;AAuB5B,IAAA,WAAA,CAAoB,cAA8B,EAAA;QAA9B,IAAA,CAAA,cAAc,GAAd,cAAc;QArBzB,IAAA,CAAA,IAAI,GAAQ,EAAE;QACd,IAAA,CAAA,MAAM,GAAQ,EAAE;QAChB,IAAA,CAAA,QAAQ,GAAY,KAAK;QACzB,IAAA,CAAA,WAAW,GAAY,KAAK;QAC5B,IAAA,CAAA,QAAQ,GAAY,KAAK;QACzB,IAAA,CAAA,eAAe,GAAG,IAAI;AACrB,QAAA,IAAA,CAAA,UAAU,GAAsB,IAAI,YAAY,EAAE;AAClD,QAAA,IAAA,CAAA,UAAU,GAAsB,IAAI,YAAY,EAAE;AAClD,QAAA,IAAA,CAAA,iBAAiB,GAAsB,IAAI,YAAY,EAAE;QAWnE,IAAA,CAAA,UAAU,GAAG,KAAK;AAGhB,QAAA,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC;IACpE;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,SAAS,GAAG,kBAAkB,CAAC;gBAClC,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;AACzC,gBAAA,UAAU,EAAE;AACb,aAAA,CAAC;QACJ;QACA,IAAI,CAAC,UAAU,EAAE;AACjB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,SAAS,EAAE;QAClB;IACF;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;YACpD;QACF;AACA,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI;QAC5B,IAAI,CAAC,OAAO,GAAG;AACb,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI;SACpB;AACD,QAAA,IAAI,CAAC,MAAM,GAAG,gBAAgB,CAAC;AAC7B,YAAA,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa;AACpC,YAAA,KAAK,EAAE;gBACL,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,gBAAA,QAAQ,EAAE,CAAC,cAAc,EAAE,eAAe,EAAE,EAAC,aAAa,EAAE,WAAW,EAAC,KAAI;AAC1E,oBAAA,IAAI,CAAC,OAAO,GAAG,cAAc;AAC7B,oBAAA,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE;wBACtB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;wBACvC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI;oBACtC;AAAO,yBAAA,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE;AAC7B,wBAAA,IAAI;AACF,4BAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AAC7C,4BAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;AAC7B,4BAAA,IAAI,CAAC,WAAW,GAAG,OAAO;wBAC5B;wBAAE,OAAO,CAAC,EAAE;AACV,4BAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;wBACpC;oBACF;oBACA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;AAC9C,oBAAA,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC5C,wBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;oBACpC;yBAAO;AACL,wBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;oBACnC;gBACF;AACD;AACF,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;IACxB;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;YACtC;QACF;QACA,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG;AACb,YAAA,IAAI,EAAE,IAAI,CAAC,OAAO,IAAI;SACvB;QACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;IAClC;IAEA,SAAS,GAAA;QACP,MAAM,YAAY,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,QAAQ,KAAI;AACpD,YAAA,CAAC,CAAC,KAAK,CAAC,MAAK;AACX,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI;gBAC7B,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,WAAW,CAAC,EAAE;AACzC,oBAAA,QAAQ,EAAE;AACV,oBAAA,YAAY,GAAG,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC;gBACzC;AACA,gBAAA,YAAY,CAAC,YAAY,EAAE,IAAI,EAAE,QAAQ,CAAC;YAC5C,CAAC,EAAE,GAAG,CAAC;AACT,QAAA,CAAC;QACD,MAAM,YAAY,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;QAC3C,YAAY,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,GAAG,KAAI;YACvC,IAAI,CAAC,YAAY,EAAE;AACrB,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,IAAI,OAAO;AACX,QAAA,IAAI;AACF,YAAA,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;QAC7B;QAAE,OAAO,CAAC,EAAE;;QAEZ;QAEA,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;QAC/B;QAEA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC3C,IAAI,CAAC,MAAM,EAAE;YACX,IAAI,OAAO,EAAE;AACX,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;YAC/B;AACA,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;QACpC;aAAO;AACL,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;QACnC;IACF;IAEO,OAAO,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;IAC1B;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE;YACrB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY;AAE5C,YAAA,IAAG,IAAI,CAAC,MAAM,EAAE;AACd,gBAAA,IAAI,IAAI,CAAC,SAAS,EAAE;oBAClB,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;gBACrC;qBAAO;AACL,oBAAA,IAAI,CAAC,SAAS,GAAG,kBAAkB,CAAC;AAClC,wBAAA,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY;wBACtC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;AACzC,wBAAA,UAAU,EAAE;AACb,qBAAA,CAAC;gBACJ;YACF;QACF;AAAO,aAAA,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE;AAC1B,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBACpB,IAAI,CAAC,UAAU,EAAE;YACnB;QACF;AACA,QAAA,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE;AACtE,YAAA,KAAK,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3D;IACF;IAEO,QAAQ,CAAC,UAAe,SAAS,EAAA;AACtC,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;IAC/B;AAEA,IAAA,eAAe,CAAC,KAAK,EAAA;QACnB,KAAK,CAAC,eAAe,EAAE;QACvB,KAAK,CAAC,cAAc,EAAE;IACxB;AAEA,IAAA,WAAW,CAAC,KAAK,EAAA;QACf,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACjC;IAEA,cAAc,GAAA;QACZ,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAC,IAAI,EAAC,CAAC,CAAC;AAC3E,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC;AACvC,QAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,WAAA,CAAa,EACb,CAAA,sCAAA,CAAwC,CAC3C;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACvC;+GA1LW,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAwB,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,qcCvC9B,+RAIA,EAAA,MAAA,EAAA,CAAA,sdAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAvB,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDmCa,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAN7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,cAGb,KAAK,EAAA,QAAA,EAAA,+RAAA,EAAA,MAAA,EAAA,CAAA,sdAAA,CAAA,EAAA;;sBAIlB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAKA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,QAAQ,EAAE,EAAC,MAAM,EAAE,KAAK,EAAC;;;AEtDtC;;;;;;;;;;;;;;AAcE;AAgCI,MAAO,uBAAwB,SAAQ,eAAe,CAAA;AAqBxD,IAAA,WAAA,CACW,GAA0B,EACzB,SAAwB,EAChC,cAA8B,EACH,UAA4B,EACV,eAAgC,EACzC,WAA4B,EAC7C,MAAc,EACd,KAAqB,EACxC,QAAkB,EAAA;AAElB,QAAA,KAAK,CAAC,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,CAAC;QAVjF,IAAA,CAAA,GAAG,GAAH,GAAG;QACF,IAAA,CAAA,SAAS,GAAT,SAAS;QAG4B,IAAA,CAAA,eAAe,GAAf,eAAe;QACxB,IAAA,CAAA,WAAW,GAAX,WAAW;QAC5B,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,KAAK,GAAL,KAAK;QA3BV,IAAA,CAAA,MAAM,GAAQ,EAAE;AACxB,QAAA,IAAA,CAAA,KAAK,GAAuB,IAAI,YAAY,EAAQ;QAE9D,IAAA,CAAA,QAAQ,GAAG,QAAQ;QACnB,IAAA,CAAA,OAAO,GAAU,EAAE;QACnB,IAAA,CAAA,SAAS,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,KAAK,GAAQ,EAAE;QACf,IAAA,CAAA,QAAQ,GAAQ,EAAE;QAOT,IAAA,CAAA,UAAU,GAAG,aAAa;QAC1B,IAAA,CAAA,WAAW,GAAG,UAAU;QAqIjC,IAAA,CAAA,QAAQ,GAAQ,EAAE;IAvHlB;IAES,QAAQ,GAAA;QACb,KAAK,CAAC,QAAQ,EAAE;QAChB,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,OAAW,KAAI;AAC1D,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;AAC3B,QAAA,CAAC,CAAC;IACN;IAEmB,aAAa,GAAA;QAC5B,KAAK,CAAC,aAAa,EAAE;QACrB,MAAM,QAAQ,GAAG,EAAE;QACnB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE,CAAC;QACnD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,0BAA0B,EAAE,CAAC;QACpD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAK;YAC5B,IAAI,CAAC,sBAAsB,EAAE;AACjC,QAAA,CAAC,CAAC;IACN;IAEA,WAAW,GAAA;QACP,IAAI,CAAC,SAAS,EAAE;IACpB;AAEA,IAAA,qBAAqB,CAAC,KAAK,EAAA;AACvB,QAAA,QAAO,KAAK,CAAC,IAAI;AACb,YAAA,KAAK,MAAM;AACP,gBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;gBAChB;AACJ,YAAA,KAAK,OAAO;gBACR,IAAI,CAAC,gBAAgB,EAAE;gBACvB;AACJ,YAAA,KAAK,aAAa;AACd,gBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI;gBAC1B;;IAEZ;AAEA,IAAA,oBAAoB,CAAC,MAAM,EAAA;AACvB,QAAA,QAAQ,MAAM,CAAC,EAAE;AACb,YAAA,KAAK,MAAM;gBACP,IAAI,CAAC,IAAI,EAAE;gBACX;AACJ,YAAA,KAAK,QAAQ;gBACT,IAAI,CAAC,YAAY,EAAE;gBACnB;;IAEZ;IAES,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,EAAE;QAC/B,IAAI,CAAC,SAAS,EAAE;IACpB;IAEA,SAAS,GAAA;QACL,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAS,KAAI;YAC7B,IAAI,IAAI,EAAE,SAAS;AAAE,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AACjD,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;QAClB,IAAI,IAAI,CAAC,YAAY;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;IAC1D;IAEA,MAAM,IAAI,CAAC,KAAW,EAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE;YAC9B;QACJ;AACA,QAAA,IAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YACjB;QACJ;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE;AACnC,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACnB,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAI;gBAC3B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK;AACnC,YAAA,CAAC,CAAC;QACN;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACnC,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;gBAC3B;YACJ;AACA,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC7B,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;YACxB,IAAI,CAAC,gBAAgB,EAAE;AAC3B,QAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AAC1B,QAAA,CAAC,CAAC;IACN;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IAC/B;AAEA,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,sBAAsB,GAAG,iCAAiC,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA,CAAE,GAAG,EAAE,CAAC;IACtI;AAEA,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,MAAM,IAAI,GAAQ;AACd,YAAA,OAAO,EAAE,IAAI,CAAC,iBAAiB,IAAI,EAAE;AACrC,YAAA,MAAM,EAAE,IAAI,CAAC,gBAAgB,IAAI,EAAE;AACnC,YAAA,QAAQ,EAAE,IAAI,CAAC,kBAAkB,IAAI,EAAE;AACvC,YAAA,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE;AACpC,YAAA,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,cAAc,IAAI,EAAE;AAClD,YAAA,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,EAAE;AAC1C,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI;SAC/B;AACD,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;YAClB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE;QAC9B;AACA,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACpB,OAAO,IAAI,CAAC,QAAQ;IACxB;IAGA,IAAI,OAAO,CAAC,IAAI,EAAA;AACZ,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACxB;AAEA,IAAA,WAAW,CAAC,KAAK,EAAA;QACb,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;IAC3C;IAEA,sBAAsB,GAAA;QAClB,MAAM,sBAAsB,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC;QACzE,MAAM,uBAAuB,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC;QAC3E,MAAM,qBAAqB,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC;AACvE,QAAA,IAAI,CAAC,6BAA6B,GAAG,sBAAsB,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;QACtF,IAAI,CAAC,8BAA8B,GAAG,uBAAuB,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACtF,QAAA,IAAI,CAAC,4BAA4B,GAAG,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;QACnF,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE;QAClD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ;QACjD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE;AAChD,QAAA,IAAI,CAAC,GAAG,CAAC,8BAA8B,GAAG,EAAE;AAC5C,QAAA,IAAI,IAAI,CAAC,6BAA6B,EAAE;YACpC,IAAI,CAAC,GAAG,CAAC,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC;QACpF;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,+BAA+B,GAAG,EAAE;AAC7C,QAAA,IAAI,IAAI,CAAC,8BAA8B,EAAE;YACrC,IAAI,CAAC,GAAG,CAAC,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,8BAA8B,CAAC;QACtF;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,6BAA6B,GAAG,EAAE;AAC3C,QAAA,IAAI,IAAI,CAAC,4BAA4B,EAAE;YACnC,IAAI,CAAC,GAAG,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC;QAClF;IACJ;AAEA,IAAA,uBAAuB,CAAC,KAAM,EAAA;QAC1B,IAAI,uBAAuB,GAAG,EAAE;AAChC,QAAA,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE;AAChB,YAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;QAC/B;aAAO;YACH,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,KAAK,CAAC;AAClE,YAAA,uBAAuB,GAAG,CAAC,KAAK,CAAC;QACrC;AACA,QAAA,IAAI,CAAC,6BAA6B,GAAG,KAAK;QAC1C,KAAK,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,GAAG,CAAC,8BAA8B,GAAG,uBAAuB;AACrE,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,wBAAwB,CAAC,KAAM,EAAA;QAC3B,IAAI,uBAAuB,GAAG,EAAE;AAChC,QAAA,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE;AAChB,YAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;QAChC;aAAO;YACH,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC,KAAK,CAAC;AACpE,YAAA,uBAAuB,GAAG,CAAC,KAAK,CAAC;QACrC;AACA,QAAA,IAAI,CAAC,8BAA8B,GAAG,KAAK;QAC3C,KAAK,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,GAAG,CAAC,+BAA+B,GAAG,uBAAuB;AACtE,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,sBAAsB,CAAC,KAAM,EAAA;QACzB,IAAI,uBAAuB,GAAG,EAAE;AAChC,QAAA,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE;AAChB,YAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;QAC9B;aAAO;YACH,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,KAAK,CAAC;AAChE,YAAA,uBAAuB,GAAG,CAAC,KAAK,CAAC;QACrC;AACA,QAAA,IAAI,CAAC,4BAA4B,GAAG,KAAK;QACzC,KAAK,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,GAAG,CAAC,6BAA6B,GAAG,uBAAuB;AACpE,QAAA,CAAC,CAAC;IACN;AAjOS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA8C,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,EAAA,EAAA,KAAA,EAyBpB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EACjB,gBAAgB,aAChB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAApC,IAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA3BpB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,gKC9CpC,wzJAqHA,EAAA,MAAA,EAAA,CAAA,qdAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAuB,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAc,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,aAAA,EAAA,UAAA,EAAA,cAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,aAAA,EAAA,OAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,oBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDvEa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,cAGjB,KAAK,EAAA,QAAA,EAAA,wzJAAA,EAAA,MAAA,EAAA,CAAA,qdAAA,CAAA,EAAA;;0BA2BZ,MAAM;2BAAC,iBAAiB;;0BACxB,MAAM;2BAAC,gBAAgB;;0BACvB,MAAM;2BAAC,iBAAiB;;sBAzB5B;;sBACA;;;AEXC,MAAO,qBAAsB,SAAQ,mBAAmB,CAAA;AAc1D,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;QAZF,IAAA,CAAA,KAAK,GAAG,YAAY;QACpB,IAAA,CAAA,QAAQ,GAAG,eAAe;QAC1B,IAAA,CAAA,WAAW,GAAG,QAAQ;QACtB,IAAA,CAAA,WAAW,GAAG,IAAI;AAGjB,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,YAAY,EAAQ;AAChC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAQ;AACpC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAO;AAChC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAW;QAWlD,IAAA,CAAA,KAAK,GAAG,KAAK;IAPb;IAEA,IAAa,IAAI,CAAC,CAAM,EAAA;QACpB,IAAI,IAAI,CAAC,YAAY;AACjB,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,CAAC;IACtC;IAIA,IAAa,IAAI,CAAC,GAAY,EAAA;AAC1B,QAAA,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,YAAY,EAAE;IAC/C;AAEqD,IAAA,gBAAgB,CAAC,KAAoB,EAAA;QACtF,IAAI,CAAC,aAAa,EAAE;IACxB;IAES,eAAe,GAAA;QACpB,KAAK,CAAC,eAAe,EAAE;IAC3B;IAEA,aAAa,GAAA;AACT,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;AACjB,QAAA,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE;AAC1B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B;IAEA,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;IACzB;IAEA,UAAU,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ;AACpC,iBAAA,IAAI,CAAC,CAAC,OAAwB,KAAI;gBAC/B,IAAI,OAAO,CAAC,MAAM;oBAAE,IAAI,CAAC,cAAc,EAAE;;oBACpC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;AAClD,YAAA,CAAC,CAAC;QACV;;YAAO,IAAI,CAAC,cAAc,EAAE;IAChC;IAEA,cAAc,GAAA;QACV,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;QAC5C,IAAI,CAAC,aAAa,EAAE;IACxB;+GA9DS,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,yBAAA,EAAA,0BAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA7BpB;;;;;;;;;;;;;;;;;;;;;;;;;AAyBL,QAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,29BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAArD,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAII,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBA/BjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,QAAA,EACpB;;;;;;;;;;;;;;;;;;;;;;;;;AAyBL,QAAA,CAAA,EAAA,UAAA,EAEO,KAAK,EAAA,MAAA,EAAA,CAAA,29BAAA,CAAA,EAAA;;sBAIhB,YAAY;uBAAC,aAAa;;sBAC1B;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAMA;;sBAOA;;sBAIA,YAAY;uBAAC,yBAAyB,EAAE,CAAC,QAAQ,CAAC;;;ACvDvD,MAAM,IAAI,CAAA;AAAV,IAAA,WAAA,GAAA;QAOI,IAAA,CAAA,YAAY,GAAqB,IAAI;QACrC,IAAA,CAAA,QAAQ,GAA0E,UAAU;IAChG;AAAC;AAED,MAAM,IAAI,CAAA;AAsBT;AAED,MAAM,eAAe,CAAA;AAArB,IAAA,WAAA,GAAA;QAkBI,IAAA,CAAA,SAAS,GAAG,EAAE;IAGlB;AAAC;0BAEY,WAAW,CAAA;AAGvB;MAKY,yBAAyB,CAAA;AAGlC,IAAA,WAAA,GAAA;QAFA,IAAA,CAAA,eAAe,GAAG,CAAC;IAGhB;AAEI,IAAA,mBAAmB,CACtB,QAAQ,EACR,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,UAAU,GAAG,EAAE;;IAEf,eAAA,GAAyB,EAAE,EAC3B,aAAA,GAAuB,EAAE,EACzB,iBAAsC,IAAI,GAAG,EAAE,EAC/C,WAAA,GAAqB,EAAE,EACvB,eAAA,GAAyB,EAAE,EAC3B,kBAAA,GAA4B,EAAE,EAC9B,kBAAkB,GAAG,KAAK,EAC1B,cAAc,GAAG,GAAG,EAAA;AAEpB,QAAA,MAAM,MAAM,GAAG,IAAI,QAAQ,EAAE;;QAG7B,IAAI,CAAC,kBAAkB,EAAE;AACrB,YAAA,OAAO,IAAI,CAAC,gBAAgB,CACxB,QAAQ,EAAE,cAAc,EAAE,WAAW,EACrC,iBAAiB,EAAE,cAAc,CACpC;QACL;;QAGA,IAAI,cAAc,GAAG,IAAI;AACzB,QAAA,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,CAAC;QACnE,IAAI,CAAC,QAAQ,EAAE;AACX,YAAA,cAAc,GAAG,cAAc,CAAC,QAAQ,CAAC;AACzC,YAAA,cAAc,CAAC,KAAK,GAAG,GAAG;AAC1B,YAAA,cAAc,CAAC,IAAI,GAAG,EAAE;AACxB,YAAA,cAAc,CAAC,IAAI,GAAG,GAAG;AACzB,YAAA,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC;QAClC;;AAGA,QAAA,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU;QAC3C,MAAM,YAAY,GAAG,EAAE;AACvB,QAAA,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;AACjD,YAAA,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC;AAC/B,YAAA,MAAM,CAAC,KAAK,GAAG,IAAI;AACnB,YAAA,MAAM,CAAC,UAAU,GAAG,aAAa;AACjC,YAAA,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;AAC5B,YAAA,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;AACzB,YAAA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;AAC1B,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU;QAC3C,MAAM,YAAY,GAAG,EAAE;AACvB,QAAA,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;YACzD,IAAI,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;;;AAG9B,gBAAA,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC5B;YACJ;AACA,YAAA,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC;AAC/B,YAAA,MAAM,CAAC,KAAK,GAAG,IAAI;AACnB,YAAA,MAAM,CAAC,UAAU,GAAG,aAAa;AACjC,YAAA,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;AAC5B,YAAA,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;AACzB,YAAA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;AAC1B,QAAA,CAAC,CAAC;;AAGF,QAAA,kBAAkB,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACjD,YAAA,IAAI,QAAQ,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAClF,gBAAA,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;gBAC/D,IAAI,YAAY,EAAE;oBACd,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,aAAa;AAC3D,oBAAA,IAAI,KAAK,KAAK,aAAa,EAAE;wBACzB,MAAM,MAAM,GAAG,sBAAsB,CAAC,YAAY,EAAE,KAAK,CAAC;AAC1D,wBAAA,MAAM,CAAC,KAAK,GAAG,IAAI;AACnB,wBAAA,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC/B,wBAAA,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;AACzB,wBAAA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;oBAC1B;gBACJ;YACJ;AACJ,QAAA,CAAC,CAAC;;QAGF,MAAM,YAAY,GAAG,EAAE;;QAGvB,MAAM,WAAW,GAAG,EAAE;AACtB,QAAA,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE;AACpC,QAAA,MAAM,CAAC,EAAE,GAAG,iBAAiB,CAAC,EAAE;AAChC,QAAA,MAAM,CAAC,IAAI,GAAG,iBAAiB,CAAC,IAAI;AACpC,QAAA,MAAM,CAAC,SAAS,GAAG,kBAAkB,CAAC,cAAc,CAAC;AACrD,QAAA,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,EAAE,cAAc,CAAC;AAC9D,QAAA,MAAM,CAAC,IAAI,GAAG,gBAAgB;AAC9B,QAAA,MAAM,CAAC,KAAK,GAAG,GAAG;AAClB,QAAA,MAAM,CAAC,MAAM,GAAG,GAAG;AACnB,QAAA,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;AACxB,QAAA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;;QAGtB,MAAM,SAAS,GAAG,EAAE;AACpB,QAAA,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;YAC3D,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AAClC,gBAAA,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B;AACJ,QAAA,CAAC,CAAC;QAEF,MAAM,WAAW,GAAG,EAAE;AACtB,QAAA,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;;AAEtB,YAAA,IAAI,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBAC1D;YACJ;YACA,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,EAAE,cAAc,CAAC;YAClD,IAAI,QAAQ,EAAE;AACV,gBAAA,QAAQ,CAAC,KAAK,GAAG,GAAG;AACpB,gBAAA,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC1B,gBAAA,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;YAC5B;AACJ,QAAA,CAAC,CAAC;;;;AAKF,QAAA,MAAM,UAAU,GAAG;AACf,YAAA,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,cAAc,GAAG,CAAC,cAAc,CAAC,GAAG,EAAE,EAAE;YAChE,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE;YAC9C,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE;YACvC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE;YACrC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE;SACxC;AACD,QAAA,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAEpE,MAAM,OAAO,GAAG,GAAG;QACnB,MAAM,WAAW,GAAG,cAAc,IAAI,OAAO,GAAG,CAAC,CAAC;AAClD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC;AAClD,QAAA,MAAM,UAAU,GAAG,WAAW,GAAG,IAAI;;QAGrC,MAAM,KAAK,GAA2B,EAAE;QACxC,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,KAAI;AAC7B,YAAA,MAAM,CAAC,GAAG,OAAO,GAAG,UAAU,GAAG,CAAC;AAClC,YAAA,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAG,EAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,QAAA,CAAC,CAAC;;AAEF,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAAE,YAAA,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,OAAO;AACrE,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YAAE,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,OAAO;AACxD,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,OAAO;;AAGtD,QAAA,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC3F,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG,EAAE;AAChB,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,GAAG,EAAE,CAAC;;AAGpD,QAAA,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;YACpB,kBAAkB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC;AACrD,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;AACxB,YAAA,IAAI,EAAE,CAAC,KAAK,KAAK,KAAK,EAAE;AACpB,gBAAA,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;YAC1B;AACJ,QAAA,CAAC,CAAC;;;;AAMF,QAAA,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU;AAC3C,QAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,EAAE;AAC9B,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AAChC,YAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE;YACjF,IAAI,QAAQ,KAAK,UAAU;AAAE,gBAAA,OAAO;AAEpC,YAAA,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,IAAI,OAAO,CAAC,IAAI,IAAI,EAAE;AAC3D,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,MAAM,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE;;AAGvD,YAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACtB,gBAAA,MAAM,aAAa,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC;gBACtD,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;YAC5D;;AAGA,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC3C,gBAAA,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC;AAC/C,gBAAA,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC;gBACrD,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC/C;;YAGA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,EAAE;gBAChC,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;;AAE3F,gBAAA,IAAI,YAAY,KAAK,MAAM,EAAE;AACzB,oBAAA,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC;gBAC/D;qBAAO;oBACH,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;AACnD,oBAAA,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC;gBAC/D;YACJ;AACJ,QAAA,CAAC,CAAC;;;;;;;;;AAWF,QAAA,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACzB,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,eAAe,EAAE;AACjC,gBAAA,IAAI,CAAC,WAAW,GAAG,eAAe;AAClC,gBAAA,IAAI,CAAC,YAAY,GAAG,cAAc;YACtC;AAAO,iBAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,EAAE;AACnE,gBAAA,IAAI,CAAC,WAAW,GAAG,sBAAsB;AACzC,gBAAA,IAAI,CAAC,YAAY,GAAG,mDAAmD;YAC3E;iBAAO;AACH,gBAAA,IAAI,CAAC,YAAY,GAAG,WAAW;YACnC;AACJ,QAAA,CAAC,CAAC;QACF,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,KAAK,eAAe,EAAE;AAC7D,YAAA,IAAI,cAAc,CAAC,UAAU,KAAK,IAAI,IAAI,cAAc,CAAC,gBAAgB,KAAK,IAAI,EAAE;AAChF,gBAAA,cAAc,CAAC,WAAW,GAAG,sBAAsB;AACnD,gBAAA,cAAc,CAAC,YAAY,GAAG,mDAAmD;YACrF;iBAAO;AACH,gBAAA,cAAc,CAAC,YAAY,GAAG,WAAW;YAC7C;QACJ;;AAGA,QAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU;AACvC,QAAA,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACzB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;AAC1E,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;AACtE,YAAA,IAAI,KAAK,IAAI,KAAK,EAAE;gBAChB,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC3C;AACJ,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,cAAc,KAAK,IAAI,EAAE;YACzB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;AACxB,gBAAA,IAAI,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,EAAE,CAAC,KAAK,KAAK,KAAK,EAAE;AACzC,oBAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;AACtB,oBAAA,GAAG,CAAC,MAAM,GAAG,cAAc,CAAC,EAAE;AAC9B,oBAAA,GAAG,CAAC,UAAU,GAAG,cAAc,CAAC,IAAI;AACpC,oBAAA,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,EAAE;AAClB,oBAAA,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC,IAAI;oBACxB,cAAc,CAAC,GAAG,EAAE,4BAA4B,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;AACrE,oBAAA,GAAG,CAAC,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AACjE,0BAAE,gBAAgB,GAAG,qBAAqB;AAC9C,oBAAA,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;gBACvB;AACJ,YAAA,CAAC,CAAC;QACN;;;QAIA,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;AAC9C,QAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAAe;AAC5C,QAAA,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,IAAG;YACtB,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;gBACjC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;YAChC;AACJ,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU;QACtC,IAAI,sBAAsB,GAAG,KAAK;;AAGlC,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AAChC,YAAA,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,IAAI,OAAO,CAAC,IAAI,IAAI,EAAE;AAC3D,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC3C,gBAAA,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC;AAC/C,gBAAA,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC;AACrD,gBAAA,IAAI,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBACtD,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC1C;YACJ;AACJ,QAAA,CAAC,CAAC;;;QAIF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC;QACnD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC;;AAGnD,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,EAAuB;AAChD,QAAA,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACzB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;AAC1E,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;AACtE,YAAA,IAAI,KAAK,IAAI,KAAK,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACxE,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;oBAAE,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC;AAC1D,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;oBAAE,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC;gBAC1D,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC/B,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;YACnC;AACJ,QAAA,CAAC,CAAC;;AAGF,QAAA,WAAW,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AAC5B,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE;AAC7B,YAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU;AACjC,YAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB;AACxC,YAAA,MAAM,KAAK,GAAa,CAAC,OAAO,CAAC;AACjC,YAAA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;AAEpB,YAAA,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACrB,gBAAA,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE;gBAC7B,IAAI,OAAO,KAAK,OAAO,IAAI,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;;oBAEjD,IAAI,IAAI,GAAG,OAAO;AAClB,oBAAA,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;wBACrB,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;wBAC7B,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;wBACpC,IAAI,GAAG,IAAI;oBACf;AACA,oBAAA,SAAS;gBACb;gBACA,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;gBACxC,IAAI,SAAS,EAAE;AACX,oBAAA,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;wBAC3B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACxB,4BAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AACrB,4BAAA,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC;AAC7B,4BAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;wBACxB;AACJ,oBAAA,CAAC,CAAC;gBACN;YACJ;AACJ,QAAA,CAAC,CAAC;;AAGF,QAAA,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACzB,YAAA,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAClC,MAAM,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;YACjC,MAAM,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;AACjC,YAAA,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE;gBAAE;;AAGhB,YAAA,IAAI,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK;gBAAE;AAC3B,YAAA,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;AAChC,YAAA,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC;gBAAE;AACpE,YAAA,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;AAChC,YAAA,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC;gBAAE;YAEpE,sBAAsB,GAAG,IAAI;YAC7B,MAAM,eAAe,GAAG,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC;AAClD,YAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;AACtB,YAAA,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,EAAE;AAClB,YAAA,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC,IAAI;AACxB,YAAA,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,EAAE;AAClB,YAAA,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC,IAAI;AACxB,YAAA,GAAG,CAAC,QAAQ,GAAG,eAAe,GAAG,gBAAgB,GAAG,aAAa;AACjE,YAAA,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,KAAK,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,aAAa;AAC/D,YAAA,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,KAAK,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,aAAa;YAC/D,IAAI,eAAe,EAAE;AACjB,gBAAA,cAAc,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YACnD;AAAO,iBAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;AACvB,gBAAA,cAAc,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;YAC5D;iBAAO;AACH,gBAAA,cAAc,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YACnD;AACA,YAAA,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;AACvB,QAAA,CAAC,CAAC;;QAGF,IAAI,CAAC,sBAAsB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,KAAK,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;AAC3G,YAAA,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,GAAG,YAAY,GAAG,WAAW;AACxE,YAAA,YAAY,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;AAChC,gBAAA,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;AAC/B,oBAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;AACtB,oBAAA,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE;AAC1B,oBAAA,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,IAAI;AAChC,oBAAA,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE;AAC1B,oBAAA,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,IAAI;AAChC,oBAAA,GAAG,CAAC,QAAQ,GAAG,UAAU;AACzB,oBAAA,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;AACf,oBAAA,GAAG,CAAC,MAAM,GAAG,CAAC;AACd,oBAAA,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;AACvB,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC,CAAC;QACN;;;AAIA,QAAA,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAAuB;AAC7D,QAAA,kBAAkB,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACjD,YAAA,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AAC7C,iBAAC,IAAI,CAAC,QAAQ,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC5E,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,IAAI,CAAC,UAAU;AACxC,YAAA,IAAI,QAAQ,IAAI,MAAM,EAAE;gBACpB,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;oBACvC,sBAAsB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,EAAE,CAAC;gBACnD;gBACA,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;YACpD;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAC1C,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,EAAE,CAAC,KAAK,KAAK,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CACjG;AACD,QAAA,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YACtD,IAAI,iBAAiB,GAAG,KAAK;AAC7B,YAAA,eAAe,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;gBACnC,MAAM,OAAO,GAAG,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBACzD,IAAI,OAAO,EAAE;AACT,oBAAA,WAAW,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;wBAC7B,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;4BAC1B,iBAAiB,GAAG,IAAI;AACxB,4BAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;AACtB,4BAAA,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE;AAC1B,4BAAA,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,IAAI;AAChC,4BAAA,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC,EAAE;AACxB,4BAAA,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC,IAAI;4BAC9B,cAAc,CAAC,GAAG,EAAE,4BAA4B,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AACvE,4BAAA,GAAG,CAAC,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC;AACnE,kCAAE,gBAAgB,GAAG,qBAAqB;AAC9C,4BAAA,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;wBACvB;AACJ,oBAAA,CAAC,CAAC;gBACN;AACJ,YAAA,CAAC,CAAC;;YAGF,IAAI,CAAC,iBAAiB,EAAE;AACpB,gBAAA,eAAe,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;AACnC,oBAAA,WAAW,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AAC7B,wBAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;AACtB,wBAAA,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE;AAC1B,wBAAA,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,IAAI;AAChC,wBAAA,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC,EAAE;AACxB,wBAAA,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC,IAAI;wBAC9B,cAAc,CAAC,GAAG,EAAE,4BAA4B,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AACvE,wBAAA,GAAG,CAAC,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC;AACnE,8BAAE;AACF,+BAAG,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,qBAAqB,GAAG,UAAU,CAAC;AAC7D,wBAAA,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;AACvB,oBAAA,CAAC,CAAC;AACN,gBAAA,CAAC,CAAC;YACN;QACJ;AAAO,aAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;;YAE/B,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC;AAC1F,YAAA,eAAe,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;AACnC,gBAAA,WAAW,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;;AAE7B,oBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAC9B,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,EAAE;AACvD,yBAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,EAAE,CAAC,CAC3D;oBACD,IAAI,CAAC,MAAM,EAAE;AACT,wBAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;AACtB,wBAAA,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE;AAC1B,wBAAA,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,IAAI;AAChC,wBAAA,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC,EAAE;AACxB,wBAAA,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC,IAAI;wBAC9B,cAAc,CAAC,GAAG,EAAE,4BAA4B,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AACvE,wBAAA,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,qBAAqB,GAAG,UAAU;AACpE,wBAAA,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;oBACvB;AACJ,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC,CAAC;QACN;;;AAIA,QAAA,MAAM,YAAY,GAAG,CAAC,GAAG,WAAW,CAAC;;AAErC,QAAA,cAAc,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;AAC1B,YAAA,IAAI,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;gBAC9D,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;gBACzD,IAAI,UAAU,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE;AACvD,oBAAA,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;gBACjC;YACJ;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,WAAW,CAAC,OAAO,CAAC,CAAC,WAAW,KAAI;AAChC,YAAA,YAAY,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AAC9B,gBAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;AACtB,gBAAA,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC,EAAE;AACxB,gBAAA,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC,IAAI;AAC9B,gBAAA,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC,EAAE;AAC3B,gBAAA,GAAG,CAAC,UAAU,GAAG,WAAW,CAAC,IAAI;AACjC,gBAAA,GAAG,CAAC,MAAM,GAAG,CAAC;gBACd,cAAc,CAAC,GAAG,EAAE,6BAA6B,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AACzE,gBAAA,GAAG,CAAC,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC,EAAE,CAAC;AACpE,sBAAE,gBAAgB,GAAG,qBAAqB;AAC9C,gBAAA,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;AACvB,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB;QAC9C,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACvC,QAAA,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;AACvC,YAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE;AACnD,YAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE;AACnD,YAAA,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;AAAE,gBAAA,OAAO,KAAK;AAClE,YAAA,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;AAAE,gBAAA,OAAO,KAAK;AAClE,YAAA,OAAO,IAAI;AACf,QAAA,CAAC,CAAC;;;;;AAMF,QAAA,MAAM,YAAY,GAAG,CAAC,CAAC,KAAI;AACvB,YAAA,IAAI,CAAC,CAAC,QAAQ,KAAK,gBAAgB;gBAAE,OAAO,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,CAAC,CAAC;AAC7B,YAAA,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,CAAC,CAAC;YAC7B,OAAO,CAAC,CAAC;AACb,QAAA,CAAC;AACD,QAAA,MAAM,cAAc,GAAG,IAAI,GAAG,EAAe;QAC7C,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACzB,YAAA,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;YACtD,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;AACxC,YAAA,IAAI,CAAC,QAAQ,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,EAAE;AACzD,gBAAA,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;YAChC;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;AAElD,QAAA,OAAO,MAAM;IACjB;AAEA;;;AAGG;IACK,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAAA;QAC7F,IAAI,cAAc,GAAG,IAAI;AACzB,QAAA,MAAM,MAAM,GAAG,IAAI,QAAQ,EAAE;AAC7B,QAAA,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,CAAC;QACnE,IAAI,CAAC,QAAQ,EAAE;AACX,YAAA,cAAc,GAAG,cAAc,CAAC,QAAQ,CAAC;AACzC,YAAA,cAAc,CAAC,KAAK,GAAG,GAAG;AAC1B,YAAA,cAAc,CAAC,IAAI,GAAG,EAAE;AACxB,YAAA,cAAc,CAAC,IAAI,GAAG,GAAG;AACzB,YAAA,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC;QAClC;QACA,IAAI,iBAAiB,GAAG,EAAE;QAC1B,IAAI,IAAI,GAAG,CAAC;AACZ,QAAA,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;AACjD,YAAA,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC;AAC/B,YAAA,MAAM,CAAC,KAAK,GAAG,IAAI;AACnB,YAAA,MAAM,CAAC,IAAI,GAAG,GAAG;AACjB,YAAA,IAAI,GAAG,IAAI,GAAG,GAAG;AACjB,YAAA,MAAM,CAAC,IAAI,GAAG,IAAI;AAClB,YAAA,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;AAC9B,YAAA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;AAC1B,QAAA,CAAC,CAAC;QAEF,MAAM,eAAe,GAAG,GAAG;AAC3B,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC;QACxB,MAAM,SAAS,GAAG,EAAE;QACpB,IAAI,eAAe,GAAG,GAAG;QACzB,MAAM,WAAW,GAAG,EAAE;AACtB,QAAA,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE;AACpC,QAAA,MAAM,CAAC,EAAE,GAAG,iBAAiB,CAAC,EAAE;AAChC,QAAA,MAAM,CAAC,IAAI,GAAG,iBAAiB,CAAC,IAAI;AACpC,QAAA,MAAM,CAAC,SAAS,GAAG,kBAAkB,CAAC,cAAc,CAAC;AACrD,QAAA,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,EAAE,cAAc,CAAC;AAC9D,QAAA,MAAM,CAAC,IAAI,GAAG,gBAAgB;AAC9B,QAAA,MAAM,CAAC,KAAK,GAAG,GAAG;AAClB,QAAA,MAAM,CAAC,MAAM,GAAG,GAAG;AACnB,QAAA,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;AACxB,QAAA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;AACtB,QAAA,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;YAC3D,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AAClC,gBAAA,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,eAAe,GAAG,GAAG;QAC1B,IAAI,cAAc,GAAG,GAAG;QAExB,MAAM,WAAW,GAAG,EAAE;QACtB,IAAI,SAAS,GAAG,CAAC;AACjB,QAAA,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI;YACnB,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,EAAE,cAAc,CAAC;YAClD,IAAI,QAAQ,EAAE;AACV,gBAAA,QAAQ,CAAC,KAAK,GAAG,GAAG;AACpB,gBAAA,QAAQ,CAAC,IAAI,GAAG,eAAe;AAC/B,gBAAA,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe;gBACpC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,GAAG,GAAG;AACjD,gBAAA,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC1B,gBAAA,SAAS,EAAE;AACX,gBAAA,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;YAC5B;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,cAAc,GAAG,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG;AACzC,QAAA,IAAI,SAAS,KAAK,CAAC,EAAE;AACjB,YAAA,IAAI,CAAC,eAAe,GAAG,GAAG;QAC9B;AAAO,aAAA,IAAI,SAAS,KAAK,CAAC,EAAE;AACxB,YAAA,IAAI,CAAC,eAAe,GAAG,GAAG;QAC9B;AAAO,aAAA,IAAI,SAAS,IAAI,CAAC,EAAE;AACvB,YAAA,IAAI,CAAC,eAAe,GAAG,EAAE;YACzB,cAAc,GAAG,EAAE;QACvB;aAAO;AACH,YAAA,IAAI,CAAC,eAAe,GAAG,EAAE;QAC7B;QAEA,IAAI,WAAW,EAAE;AACb,YAAA,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,KAAI;AACvB,gBAAA,IAAI,KAAK,CAAC,KAAK,KAAK,GAAG,EAAE;AACrB,oBAAA,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe;oBACjC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,GAAG,cAAc;gBAChE;AACJ,YAAA,CAAC,CAAC;QACN;QAEA,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;YACzC,eAAe,GAAG,GAAG;QACzB;AAEA,QAAA,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI;AACrB,YAAA,GAAG,CAAC,IAAI,GAAG,eAAe,GAAG,GAAG;AAChC,YAAA,GAAG,CAAC,IAAI,GAAG,eAAe;AAC1B,YAAA,eAAe,GAAG,eAAe,GAAG,GAAG;AAC3C,QAAA,CAAC,CAAC;QAEF,IAAI,gBAAgB,GAAG,CAAC;QACxB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,KAAI;YACxB,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC3B,gBAAA,gBAAgB,GAAG,gBAAgB,GAAG,CAAC;YAC3C;AACJ,QAAA,CAAC,CAAC;QAEF,iBAAiB,GAAG,EAAE;QACtB,IAAI,WAAW,GAAG,GAAG;QACrB,IAAI,UAAU,GAAG,CAAC;AAClB,QAAA,IAAI,gBAAgB,KAAK,CAAC,EAAE;YACxB,WAAW,GAAG,GAAG;QACrB;aAAO,IAAI,gBAAgB,IAAI,CAAC,IAAI,gBAAgB,GAAG,CAAC,EAAE;YACtD,WAAW,GAAG,EAAE;YAChB,UAAU,GAAG,EAAE;QACnB;aAAO,IAAI,gBAAgB,IAAI,CAAC,IAAI,gBAAgB,GAAG,EAAE,EAAE;YACvD,WAAW,GAAG,EAAE;YAChB,UAAU,GAAG,EAAE;QACnB;aAAO;YACH,WAAW,GAAG,EAAE;YAChB,UAAU,GAAG,EAAE;QACnB;QAEA,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU,KAAI;YAC7B,IAAI,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAChC,gBAAA,UAAU,CAAC,IAAI,GAAG,GAAG;AACrB,gBAAA,UAAU,CAAC,IAAI,GAAG,WAAW;AAC7B,gBAAA,WAAW,GAAG,WAAW,GAAG,UAAU;AACtC,gBAAA,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;AAClC,gBAAA,IAAI,UAAU,CAAC,KAAK,KAAK,IAAI,EAAE;AAC3B,oBAAA,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;gBAChC;YACJ;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;YAC7C,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,cAAc,KAAK,IAAI,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,EAAE,CAAC,KAAK,KAAK,KAAK,IAAI,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE;AAC5F,gBAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;AACtB,gBAAA,GAAG,CAAC,MAAM,GAAG,cAAc,CAAC,EAAE;AAC9B,gBAAA,GAAG,CAAC,UAAU,GAAG,cAAc,CAAC,IAAI;AACpC,gBAAA,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,EAAE;AAClB,gBAAA,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC,IAAI;gBACxB,cAAc,CAAC,GAAG,EAAE,4BAA4B,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;AACrE,gBAAA,GAAG,CAAC,QAAQ,GAAG,qBAAqB;AACpC,gBAAA,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;YACvB;QACJ;AAEA,QAAA,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;YAC7C,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACzB,gBAAA,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,WAAW,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;AAC5C,oBAAA,MAAM,GAAG,GAAG,WAAW,CAAC,EAAE,CAAC;AAC3B,oBAAA,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI,IAAI,GAAG,CAAC,KAAK,KAAK,KAAK,EAAE;wBAC3C;oBACJ;AACA,oBAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;AACtB,oBAAA,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE;AACnB,oBAAA,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,IAAI;AACzB,oBAAA,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE;AACnB,oBAAA,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,IAAI;AACzB,oBAAA,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AAC5D,wBAAA,GAAG,CAAC,MAAM;4BACN,GAAG,CAAC,MAAM,KAAK,aAAa;gCAC5B,GAAG,CAAC,MAAM,KAAK,KAAK;gCACpB,GAAG,CAAC,MAAM,KAAK,aAAa;gCAC5B,GAAG,CAAC,MAAM,KAAK;AACX,kCAAE,CAAC,GAAG,CAAC;AACf,wBAAA,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,IAAI,GAAG,aAAa;oBAC9D;yBAAO;wBACH,cAAc,CAAC,GAAG,EAAE,4BAA4B,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBAC/D;oBACA,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;AAClC,oBAAA,GAAG,CAAC,QAAQ,GAAG,UAAU;AACzB,oBAAA,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;gBACvB;YACJ;QACJ;AAEA,QAAA,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,WAAW,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;AAC5C,YAAA,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,WAAW,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;AAC5C,gBAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;gBACtB,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE;gBAC/B,GAAG,CAAC,UAAU,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,IAAI;gBACrC,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE;gBAC/B,GAAG,CAAC,UAAU,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,IAAI;AACrC,gBAAA,GAAG,CAAC,MAAM,GAAG,CAAC;gBACd,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,EAAA;oBAC3C,OAAO,GAAG,CAAC,EAAE,KAAK,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE;AACxC,gBAAA,CAAC,CAAC;gBACF,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACjC,oBAAA,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;gBAClD;qBAAO;AACH,oBAAA,cAAc,CAAC,GAAG,EAAE,6BAA6B,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;gBACxF;AACA,gBAAA,GAAG,CAAC,QAAQ,GAAG,qBAAqB;AACpC,gBAAA,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;YACvB;QACJ;AAEA,QAAA,OAAO,MAAM;IACjB;+GAzuBS,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cAFtB,MAAM,EAAA,CAAA,CAAA;;4FAET,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA;;AA6uBD;AAEA,SAAS,MAAM,CAAC,GAAW,EAAE,GAAW,EAAA;AACpC,IAAA,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;AACvC;AAEA,SAAS,kBAAkB,CAAC,KAAY,EAAE,IAAY,EAAE,eAAe,GAAG,GAAG,EAAA;AACzE,IAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM;IAC1B,IAAI,KAAK,KAAK,CAAC;QAAE;IAEjB,MAAM,KAAK,GAAG,EAAE;AAChB,IAAA,MAAM,KAAK,GAAG,KAAK,GAAG,eAAe;AAErC,IAAA,IAAI,KAAK,KAAK,CAAC,EAAE;AACb,QAAA,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI;AACpB,QAAA,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,GAAG,KAAK,IAAI,CAAC,CAAC;QACpC;IACJ;IAEA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,KAAK,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC;;IAE9D,MAAM,WAAW,GAAG,UAAU,IAAI,KAAK,GAAG,CAAC,CAAC;AAC5C,IAAA,MAAM,SAAS,GAAG,KAAK,IAAI,CAAC,eAAe,GAAG,WAAW,IAAI,CAAC,CAAC;IAE/D,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,KAAI;AACpB,QAAA,EAAE,CAAC,IAAI,GAAG,IAAI;QACd,EAAE,CAAC,IAAI,GAAG,SAAS,IAAI,CAAC,GAAG,UAAU,CAAC;AAC1C,IAAA,CAAC,CAAC;AACN;AAEA,SAAS,kBAAkB,CAAC,OAAO,EAAA;IAC/B,MAAM,SAAS,GAAG,EAAE;AACpB,IAAA,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;QAC3C,IAAI,SAAS,GAAG,EAAE;QAClB,IAAI,KAAK,GAAG,EAAE;AACd,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACrB,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;QAC9C;aAAO;AACH,YAAA,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO;QACjC;QACA,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACjC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;AACvC,gBAAA,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE;AACzB,oBAAA,KAAK,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG;gBACpD;AACA,gBAAA,KAAK,GAAG,KAAK,GAAG,GAAG;AACvB,YAAA,CAAC,CAAC;QACN;aAAO;AACH,YAAA,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI;QAC1B;AACA,QAAA,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;AACzB,QAAA,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;AACzB,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,SAAS;AACpB;AAEA;AACA;AACA;AACA,SAAS,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAA;AACjD,IAAA,MAAM,CAAC,kBAAkB,GAAG,OAAO,GAAG,OAAO,CAAC,kBAAkB,GAAG,SAAS;AAC5E,IAAA,MAAM,CAAC,kBAAkB,GAAG,OAAO,GAAG,OAAO,CAAC,kBAAkB,GAAG,SAAS;IAC5E,MAAM,CAAC,qBAAqB,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,cAAc,GAAG,EAAE;IACzG,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,WAAW,GAAG,EAAE;AAEzF,IAAA,MAAM,QAAQ,GAAG,CAAC,UAAU,EAAE,IAAI,KAAI;AAClC,QAAA,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;AACvB,YAAA,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,CAAA,EAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAA,EAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAA,CAAE,CAAC,CAAC;QACxF;AACA,QAAA,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI;AAAE,YAAA,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC9D,QAAA,OAAO,EAAE;AACb,IAAA,CAAC;IACD,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,KAAI;AACzC,QAAA,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAClD,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC5F,QAAA,OAAO,MAAM,GAAG,CAAA,EAAG,CAAC,CAAA,EAAA,EAAK,MAAM,CAAA,CAAE,GAAG,CAAC;AACzC,IAAA,CAAC;IAED,MAAM,KAAK,GAAG,EAAE;AAChB,IAAA,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC3C,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE;QACrG,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE;AACnC,QAAA,IAAI,CAAC;AAAE,YAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;YAC9B,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;AAC3D,YAAA,MAAM,CAAC,gBAAgB,GAAG,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QACjI;aAAO,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AAChC,YAAA,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,cAAc,GAAG,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC;YACjF,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,eAAe,GAAG,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC3K;AACJ,IAAA,CAAC,CAAC;AACF,IAAA,MAAM,CAAC,eAAe,GAAG,KAAK;AAClC;AAEA,SAAS,YAAY,CAAC,UAAU,EAAE,SAAS,EAAA;AACvC,IAAA,IAAI,UAAU,KAAK,IAAI,EAAE;AACrB,QAAA,OAAO,IAAI;IACf;AACA,IAAA,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,EAAA;AACtC,QAAA,OAAO,EAAE,CAAC,EAAE,KAAK,UAAU;AAC/B,IAAA,CAAC,CAAC;IACF,IAAI,MAAM,EAAE;AACR,QAAA,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC;AACnC,QAAA,IAAI,CAAC,IAAI,GAAG,iBAAiB;AAC7B,QAAA,OAAO,IAAI;IACf;AACA,IAAA,OAAO,IAAI;AACf;AAEA,SAAS,cAAc,CAAC,MAAM,EAAA;AAC1B,IAAA,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE;AACvB,IAAA,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE;AACnB,IAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;AACvB,IAAA,IAAI,CAAC,IAAI,GAAG,UAAU;;;;AAItB,IAAA,IAAI,MAAM,CAAC,0BAA0B,IAAI,IAAI,EAAE;AAC3C,QAAA,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,0BAA0B,KAAK,SAAS,GAAG,IAAI,GAAG,KAAK;AACtF,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB;IAC3C;SAAO;AACH,QAAA,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,yBAAyB,CAAC,KAAK,KAAK,GAAG,IAAI,GAAG,KAAK;AAClF,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,eAAe,CAAC,KAAK,KAAK,GAAG,IAAI,GAAG,KAAK;IACtE;AACA,IAAA,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE;AACjD,IAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,YAAY;;;;IAIrC,IAAI,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,YAAY,GAAG,eAAe;;;;;AAMpF,IAAA,IAAI,IAAI,CAAC,MAAM,KAAK,eAAe,EAAE;AACjC,QAAA,IAAI,CAAC,SAAS,GAAG,YAAY;IACjC;SAAO;AACH,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,0BAA0B;AAC7C,QAAA,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,EAAE;AAC5D,YAAA,IAAI,CAAC,SAAS,GAAG,GAAG;QACxB;aAAO;AACH,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,uBAAuB,KAAK,IAAI,IAAI,MAAM,CAAC,aAAa,KAAK,IAAI;AACtF,kBAAE,QAAQ,GAAG,SAAS;QAC9B;IACJ;AACA,IAAA,OAAO,IAAI;AACf;AAEA,SAAS,YAAY,CAAC,OAAO,EAAA;AACzB,IAAA,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE;AACzB,IAAA,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE;AACtB,IAAA,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;AAC1B,IAAA,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,UAAU,KAAK,IAAI,GAAG,YAAY,GAAG,eAAe;AAC5E,IAAA,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ,KAAK,KAAK,GAAG,IAAI,GAAG,KAAK;AACzD,IAAA,MAAM,CAAC,eAAe,GAAG,OAAO,CAAC,iBAAiB,KAAK,KAAK,GAAG,IAAI,GAAG,KAAK;AAC3E,IAAA,MAAM,CAAC,IAAI,GAAG,YAAY;AAC1B,IAAA,MAAM,CAAC,UAAU,GAAG,aAAa;AACjC,IAAA,OAAO,MAAM;AACjB;AAEA,SAAS,sBAAsB,CAAC,YAAY,EAAE,UAA4C,EAAA;AACtF,IAAA,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE;AACzB,IAAA,MAAM,CAAC,EAAE,GAAG,YAAY,CAAC,EAAE;AAC3B,IAAA,MAAM,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI;AAC/B,IAAA,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC,SAAS,GAAG,aAAa,GAAG,eAAe;AACxE,IAAA,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC,SAAS,IAAI,YAAY,CAAC,QAAQ,GAAG,KAAK,GAAG,IAAI;AAC9E,IAAA,MAAM,CAAC,eAAe,GAAG,YAAY,CAAC,iBAAiB,KAAK,KAAK,GAAG,IAAI,GAAG,KAAK;AAChF,IAAA,MAAM,CAAC,IAAI,GAAG,UAAU,KAAK,gBAAgB,GAAG,eAAe,GAAG,YAAY;AAC9E,IAAA,MAAM,CAAC,UAAU,GAAG,UAAU;AAC9B,IAAA,OAAO,MAAM;AACjB;AAEA;AACA;AACA;AACA;AACA,SAAS,4BAA4B,CAAC,YAAY,EAAE,UAAU,EAAA;AAC1D,IAAA,IAAI,UAAU,CAAC,MAAM,KAAK,OAAO,IAAI,UAAU,CAAC,MAAM,KAAK,IAAI,EAAE;QAC7D,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAC/C;AACA,IAAA,IAAI,YAAY,CAAC,MAAM,KAAK,eAAe,EAAE;;;QAGzC,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE;IAChD;AACA,IAAA,IAAI,YAAY,CAAC,UAAU,KAAK,IAAI,IAAI,YAAY,CAAC,gBAAgB,KAAK,IAAI,EAAE;;;QAG5E,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE;IACvD;AACA,IAAA,IAAI,UAAU,CAAC,MAAM,KAAK,KAAK,IAAI,YAAY,CAAC,gBAAgB,KAAK,KAAK,EAAE;QACxE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACtC;IACA,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE;AACtC;AAEA;AACA;AACA;AACA,SAAS,6BAA6B,CAAC,QAAQ,EAAE,WAAW,EAAA;IACxD,MAAM,QAAQ,GAAG,CAAC,EAAE,QAAQ,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC9E,IAAI,QAAQ,EAAE;AACV,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,IAAI,QAAQ,CAAC,MAAM,KAAK,IAAI,EAAE;YACzD,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE;QAC9C;QACA,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE;IACrC;;;AAGA,IAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,eAAe,EAAE;QACrC,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IACjD;AACA,IAAA,IAAI,QAAQ,CAAC,UAAU,KAAK,IAAI,IAAI,QAAQ,CAAC,gBAAgB,KAAK,IAAI,EAAE;QACpE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC;IACxD;AACA,IAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,YAAY,IAAI,QAAQ,CAAC,gBAAgB,KAAK,KAAK,EAAE;QACzE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACtC;IACA,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE;AACtC;AAEA;AACA,SAAS,cAAc,CAAC,GAAG,EAAE,EAAa,EAAA;AACtC,IAAA,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,KAAK;AACrB,IAAA,GAAG,CAAC,YAAY,GAAG,EAAE,CAAC,MAAM;IAC5B,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC;AACpC;AAEA,SAAS,SAAS,CAAC,SAAS,EAAA;AACxB,IAAA,OAAO,SAAS,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;AACnC;AAEA,MAAM,QAAQ,CAAA;AAAd,IAAA,WAAA,GAAA;QACI,IAAA,CAAA,KAAK,GAAQ,EAAE;QACf,IAAA,CAAA,KAAK,GAAQ,EAAE;IAkBnB;AAjBI,IAAA,OAAO,CAAC,SAAS,EAAA;QACb,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,EAAA;AACzC,YAAA,OAAO,EAAE,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE;AACjC,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,QAAQ,EAAE;AACX,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;QAC9B;IACJ;AACA,IAAA,WAAW,CAAC,SAAS,EAAA;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,CAAC;AAC/D,QAAA,IAAI,IAAI,IAAI,CAAC,EAAE;AACX,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS;QAChC;IACJ;AACA,IAAA,OAAO,CAAC,SAAS,EAAA;AACb,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;IAC9B;AACH;;MC5iCY,cAAc,CAAA;AACzB,IAAA,WAAA,CAA+C,eAAgC,EAAA;QAAhC,IAAA,CAAA,eAAe,GAAf,eAAe;IAAoB;AAElF;;;AAGG;AACH,IAAA,MAAM,YAAY,GAAA;QAChB,MAAM,SAAS,GAAG,qBAAqB;AACvC,QAAA,MAAM,UAAU,GAAG;AACjB,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE;SACR;;QAGD,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;AACjH,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,cAAc,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;AAExG,QAAA,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;AAElF,QAAA,MAAM,aAAa,GAAG,YAAY,EAAE,IAAI,IAAI,EAAE;AAC9C,QAAA,MAAM,WAAW,GAAG,UAAU,EAAE,IAAI,IAAI,EAAE;;QAG1C,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAErE,QAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB;;QAG7C,MAAM,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,YAAiB,KAAI;YAC5D,MAAM,UAAU,GAAQ,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAC1D,IAAI,UAAU,EAAE;;gBAEd,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,EAAE,aAAa,CAAC;;gBAE/C,OAAO;AACL,oBAAA,GAAG,YAAY;AACf,oBAAA,cAAc,EAAE,UAAU,CAAC,cAAc,IAAI,EAAE;;AAE/C,oBAAA,GAAG,UAAU;AACb,oBAAA,WAAW,EAAE;iBACd;YACH;;YAEA,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,EAAE,gBAAgB,CAAC;YAClD,OAAO;AACL,gBAAA,GAAG,YAAY;AACf,gBAAA,WAAW,EAAE;aACd;AACH,QAAA,CAAC,CAAC;QAEF,OAAO;AACL,YAAA,OAAO,EAAE,aAAa;YACtB;SACD;IACH;AAEA;;AAEG;AACH,IAAA,MAAM,eAAe,CAAC,OAAA,GAAiB,EAAE,EAAA;AACvC,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE;SACR;AAED,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC;AAC5E,QAAA,MAAM,aAAa,GAAG,MAAM,EAAE,IAAI,IAAI,EAAE;;AAGxC,QAAA,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,QAAa,KAAK,QAAQ,CAAC,IAAI,EAAE,MAAM,KAAK,QAAQ,CAAC;IACpF;AAEA;;AAEG;AACH,IAAA,MAAM,aAAa,CAAC,OAAA,GAAiB,EAAE,EAAA;AACrC,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE;SACR;AAED,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC;AAC1E,QAAA,OAAO,MAAM,EAAE,IAAI,IAAI,EAAE;IAC3B;AAEA;;AAEG;AACH,IAAA,MAAM,aAAa,GAAA;QACjB,MAAM,GAAG,GAAG,sBAAsB;AAElC,QAAA,IAAI;AACF,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,GAAG,EAAE,YAAY,CAAC;AAC9E,YAAA,OAAO,MAAM,EAAE,IAAI,IAAI,EAAE;QAC3B;QAAE,OAAO,KAAK,EAAE;;AAEd,YAAA,OAAO,EAAE;QACX;IACF;AAEA;;AAEG;AACH,IAAA,MAAM,gBAAgB,GAAA;AACpB,QAAA,IAAI;;YAEF,MAAM,GAAG,GAAG,yCAAyC;YACrD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC;AACnD,YAAA,OAAO,MAAM,EAAE,IAAI,IAAI,EAAE;QAC3B;QAAE,OAAO,KAAK,EAAE;;AAEd,YAAA,MAAM,MAAM,GAAG;AACb,gBAAA,QAAQ,EAAE,SAAS;AACnB,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,KAAK,EAAE;aACR;AAED,YAAA,IAAI;AACF,gBAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,CAAC;AACxE,gBAAA,OAAO,MAAM,EAAE,IAAI,IAAI,EAAE;YAC3B;YAAE,OAAO,aAAa,EAAE;;AAEtB,gBAAA,IAAI;oBACF,MAAM,GAAG,GAAG,yBAAyB;AACrC,oBAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,GAAG,EAAE,YAAY,CAAC;AAC9E,oBAAA,OAAO,MAAM,EAAE,IAAI,IAAI,EAAE;gBAC3B;gBAAE,OAAO,WAAW,EAAE;;AAEpB,oBAAA,OAAO,EAAE;gBACX;YACF;QACF;IACF;AAEA;;AAEG;AACH,IAAA,MAAM,UAAU,GAAA;QACd,MAAM,GAAG,GAAG,mBAAmB;AAE/B,QAAA,IAAI;AACF,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,GAAG,EAAE,YAAY,CAAC;AAC9E,YAAA,OAAO,MAAM,EAAE,IAAI,IAAI,EAAE;QAC3B;QAAE,OAAO,KAAK,EAAE;;AAEd,YAAA,OAAO,EAAE;QACX;IACF;AAnKW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,kBACL,iBAAiB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAD1B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFb,MAAM,EAAA,CAAA,CAAA;;4FAEP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;0BAEc,MAAM;2BAAC,iBAAiB;;;ACZvC;MAiCa,4BAA4B,CAAA;AA4CvC,IAAA,WAAA,CACU,yBAAoD,EACpD,cAA8B,EACL,eAAgC,EAC9B,WAA4B,EACvD,MAAc,EACd,SAAqD,EAC7B,IAAS,EAAA;QANjC,IAAA,CAAA,yBAAyB,GAAzB,yBAAyB;QACzB,IAAA,CAAA,cAAc,GAAd,cAAc;QACW,IAAA,CAAA,eAAe,GAAf,eAAe;QACb,IAAA,CAAA,WAAW,GAAX,WAAW;QACtC,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,SAAS,GAAT,SAAS;QACe,IAAA,CAAA,IAAI,GAAJ,IAAI;QAjDtC,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,aAAa,GAAG,KAAK;QACrB,IAAA,CAAA,WAAW,GAAG,IAAI;QACV,IAAA,CAAA,iBAAiB,GAKd,IAAI;QACP,IAAA,CAAA,YAAY,GAAQ,IAAI;QACxB,IAAA,CAAA,aAAa,GAAG,KAAK;QACZ,IAAA,CAAA,YAAY,GAAG,IAAI;QACnB,IAAA,CAAA,aAAa,GAAG,GAAG;QACpC,IAAA,CAAA,UAAU,GAAG,qBAAqB;QAClC,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,mBAAmB,GAAG,EAAE;QACxB,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,eAAe,GAAG,KAAK;QAOvB,IAAA,CAAA,SAAS,GAAG,EAAE;QACd,IAAA,CAAA,eAAe,GAAG,EAAE;QAEpB,IAAA,CAAA,oBAAoB,GAAG,KAAK;QAC5B,IAAA,CAAA,0BAA0B,GAAG,KAAK;QAClC,IAAA,CAAA,gCAAgC,GAAG,KAAK;QACxC,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,YAAY,GAAG,CAAC;QAChB,IAAA,CAAA,YAAY,GAAG,CAAC;;QAGhB,IAAA,CAAA,UAAU,GAAU,EAAE;AACtB,QAAA,IAAA,CAAA,cAAc,GAAwB,IAAI,GAAG,EAAE;QAC/C,IAAA,CAAA,QAAQ,GAAU,EAAE;QACpB,IAAA,CAAA,WAAW,GAAU,EAAE;QACvB,IAAA,CAAA,cAAc,GAAU,EAAE;QAC1B,IAAA,CAAA,kBAAkB,GAAG,IAAI;AAWvB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ;IACnC;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,wBAAwB,EAAE;AAC/B,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,EAAE;AAC/E,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,IAAG,SAAS,GAAG,IAAI,GAAE,KAAK;IACnD;IAEA,wBAAwB,GAAA;AACtB,QAAA,OAAO,CAAC,GAAG,CAAC,sCAAsC,EAAE;AAClD,YAAA,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE;AACxB,YAAA,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI;AAC5B,YAAA,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,aAAa;AAC9C,YAAA,uBAAuB,EAAE,IAAI,CAAC,YAAY,CAAC,uBAAuB;AAClE,YAAA,0BAA0B,EAAE,IAAI,CAAC,YAAY,CAAC,0BAA0B;AACxE,YAAA,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO;AACnC,SAAA,CAAC;QACF,MAAM,QAAQ,GAAG,GAAG;AACpB,QAAA,MAAM,eAAe,GAAG;AACtB,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,KAAK,EAAE,QAAQ;AACf,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE,KAAK;SACb;AAED,QAAA,IAAI,CAAC;AACF,aAAA,GAAG,CAAC,CAAA,WAAA,EAAc,IAAI,CAAC,YAAY,CAAC,EAAE,CAAA,SAAA,CAAW,EAAE,eAAe,EAAE,EAAE;AACtE,aAAA,IAAI,CAAC,CAAC,MAAM,KAAI;AACf,YAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI;AAC3B,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AAExB,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AAChD,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,gBAAA,IAAI,CAAC,cAAc,GAAG,EAAE;gBACxB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;AACtC,gBAAA,IAAI,CAAC,eAAe,GAAG,6CAA6C;AACpE,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YACxB;iBAAO;AACL,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,QAAQ,CAAC;gBACrE,MAAM,QAAQ,GAAG,EAAE;AACnB,gBAAA,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,KAAK,EAAE,IAAI,EAAE,EAAE;AACxC,oBAAA,eAAe,CAAC,IAAI,GAAG,IAAI;AAC3B,oBAAA,MAAM,WAAW,GAAG,IAAI,CAAC;AACtB,yBAAA,GAAG,CACF,CAAA,WAAA,EAAc,IAAI,CAAC,YAAY,CAAC,EAAE,CAAA,SAAA,CAAW,EAC7C,eAAe,EACf,EAAE;AAEH,yBAAA,IAAI,CAAC,CAAC,UAAU,KAAI;wBACnB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC/B,4BAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1B,wBAAA,CAAC,CAAC;AACJ,oBAAA,CAAC,CAAC;AACJ,oBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;gBAC5B;gBACA,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAK;AAC9B,oBAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAC5B,yBAAA,GAAG,CAAC,CAAA,WAAA,EAAc,IAAI,CAAC,YAAY,CAAC,EAAE,CAAA,aAAA,CAAe,EAAE,EAAE,EAAE,EAAE;AAC7D,yBAAA,IAAI,CAAC,CAAC,MAAM,KAAI;AACf,wBAAA,IAAI,CAAC,WAAW,GAAG,EAAE;wBACrB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AAC1B,4BAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;AAC5B,wBAAA,CAAC,CAAC;AACJ,oBAAA,CAAC,CAAC;AAEJ,oBAAA,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC;AACvC,wBAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AAClC,wBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;AAChC,wBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACnC,wBAAA,IAAI,CAAC,cAAc,CAAC,gBAAgB,EAAE;AACvC,qBAAA,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAI;wBAClB,MAAM,CAAC,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,iBAAiB,CAAC,GAAG,OAAO;AAC/E,wBAAA,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC;AAC7D,wBAAA,IAAI,CAAC,kBAAkB,GAAG,CAAC,SAAS;AAEpC,wBAAA,IAAI,aAAa,CAAC,MAAM,KAAK,WAAW,EAAE;4BACxC,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE;AACnD,4BAAA,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,GAAG,EAAE;wBACpE;AACA,wBAAA,IAAI,WAAW,CAAC,MAAM,KAAK,WAAW,EAAE;4BACtC,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;wBACzC;AACA,wBAAA,IAAI,cAAc,CAAC,MAAM,KAAK,WAAW,EAAE;4BACzC,IAAI,CAAC,WAAW,GAAG,cAAc,CAAC,KAAK,IAAI,EAAE;wBAC/C;AACA,wBAAA,IAAI,iBAAiB,CAAC,MAAM,KAAK,WAAW,EAAE;4BAC5C,IAAI,CAAC,cAAc,GAAG,iBAAiB,CAAC,KAAK,IAAI,EAAE;wBACrD;AACF,oBAAA,CAAC,CAAC;AAEF,oBAAA,OAAO,CAAC,GAAG,CAAC,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,MAAK;wBACxD,IAAI,CAAC,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC;AACzD,wBAAA,IAAI,CAAC,UAAU;AACb,4BAAA,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK;AAC7B,kCAAE;kCACA,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI;AACjC,wBAAA,IAAI,CAAC,eAAe;AAClB,4BAAA,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK;AAC7B,kCAAE;kCACA,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI;AACjC,wBAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,cAAc;wBAC9C,IAAI,CAAC,cAAc,EAAE;AACvB,oBAAA,CAAC,CAAC;AACJ,gBAAA,CAAC,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;QAEJ,SAAS,oBAAoB,CAAC,SAAS,EAAA;YACrC,MAAM,OAAO,GAAG,EAAE;YAClB,MAAM,YAAY,GAAG,EAAE;AACvB,YAAA,SAAS,EAAE,IAAI,CAAC,CAAC,MAAM,KAAI;gBACzB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACvC,oBAAA,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AAC9B,oBAAA,MAAM,EAAE,GAAG,IAAI,WAAW,EAAE;AAC5B,oBAAA,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE;AACjB,oBAAA,EAAE,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;AACrB,oBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClB;AACF,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,OAAO;QAChB;AAEA,QAAA,SAAS,UAAU,GAAA;AACjB,YAAA,MAAM,EAAE,GAAG,IAAI,WAAW,EAAE;AAC5B,YAAA,EAAE,CAAC,EAAE,GAAG,EAAE;AACV,YAAA,EAAE,CAAC,IAAI,GAAG,aAAa;AACvB,YAAA,OAAO,EAAE;QACX;AACF,IAAA,CAAC;IAED,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,MAAM,KAC3D,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC,CACvE;IACH;IAEA,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,UAAU,GAAG,wCAAwC;AAC1D,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,cAAc;AAC9C,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;IAC3B;AAEA,IAAA,kBAAkB,CAAC,KAAK,EAAA;QACtB,IAAI,CAAC,cAAc,EAAE;IACvB;IAEA,cAAc,GAAA;;AAEX,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,MAAM,WAAW,GAAG,EAAE;QACtB,IAAI,SAAS,GAAG,IAAI;QACpB,IAAI,eAAe,GAAG,EAAE;AAExB,QAAA,SAAS,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI;YACvD,QAAS,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,eAAe;AAC3C,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YACtB;QACF;QAEA,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,SAAS,CAAC;AAEjE,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC;AACzB,aAAA,GAAG,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE;AACvB,aAAA,IAAI,CAAC,CAAC,OAAO,KAAI;AAChB,YAAA,eAAe,GAAG,OAAO,IAAI,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,EAAE;AAC/D,QAAA,CAAC,CAAC;QACH,MAAM,gCAAgC,GAAG,IAAI,CAAC,kBAAkB,CAC/D,SAAS,EACT,8BAA8B,CAC9B;AACD,QAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,kBAAkB,CACnD,SAAS,EACT,kBAAkB,CAClB,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAErB,IAAI,YAAY,GAAG,EAAE;QACrB,IAAI,cAAc,GAAG,EAAE;AACvB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC;AACnB,aAAA,GAAG,CAAC,oBAAoB,EAAE,EAAE,EAAE,EAAE;AAChC,aAAA,IAAI,CAAC,CAAC,QAAQ,KAAI;YACjB,MAAM,gBAAgB,GAAG,EAAE;AAC3B,YAAA,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AAC3D,gBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE;oBAC1B,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAC/C,MAAM,EACN,YAAY,CACb;AACD,oBAAA,MAAM,MAAM,GAAG,IAAI,CAAC;AACjB,yBAAA,GAAG,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE;AAC/C,yBAAA,IAAI,CAAC,CAAC,GAAG,KAAI;wBACZ,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;4BAC9B,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;AACtB,gCAAA,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,EAAE,CAAC;AACzC,4BAAA,CAAC,CAAC;wBACJ;6BAAO;4BACL,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,GAAG,CAAC,IAAI,CAAC;wBAC/C;AACF,oBAAA,CAAC,CAAC;AACJ,oBAAA,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC/B;AACF,YAAA,CAAC,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,MAAK;;AAEtC,gBAAA,cAAc,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;AAC5B,oBAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE;wBACzC,EAAE,EAAE,EAAE,CAAC,EAAE;wBACT,IAAI,EAAE,EAAE,CAAC,IAAI;wBACb,aAAa,EAAE,EAAE,CAAC,aAAa;wBAC/B,uBAAuB,EAAE,EAAE,CAAC,uBAAuB;wBACnD,0BAA0B,EAAE,EAAE,CAAC,0BAA0B;wBACzD,OAAO,EAAE,EAAE,CAAC,OAAO;AACpB,qBAAA,CAAC;AACJ,gBAAA,CAAC,CAAC;;AAEF,gBAAA,MAAM,kBAAkB,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,KACnD,IAAI,CAAC;qBACF,GAAG,CAAC,CAAA,WAAA,EAAc,MAAM,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,EAAE;qBAClD,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,IAAI,IAAI,EAAE;AAC7B,qBAAA,KAAK,CAAC,MAAM,EAAE,CAAC,CACnB;gBACD,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,iBAAiB,KAAI;oBACzD,MAAM,eAAe,GAAG,EAAE;AAC1B,oBAAA,iBAAiB,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AACpC,wBAAA,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AACpB,4BAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE;AAC7D,gCAAA,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;4BACzB;AACF,wBAAA,CAAC,CAAC;AACJ,oBAAA,CAAC,CAAC;;AAGF,oBAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CACnD,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC,OAAO,MAAM,SAAS,CAAC,EAAE,CACpE;oBACD,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAC7C,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,KAAK,SAAS,CAAC,EAAE,CACtC;AAED,oBAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;oBAChF,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;oBAC9D,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;oBAClE,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,eAAe,CAAC,MAAM,CAAC;;AAGrE,oBAAA,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,IACzC,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,CAC1E;oBACD,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,UAAU,CAAC,MAAM,CAAC;oBAC3D,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AAC1B,wBAAA,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE;AAC/C,wBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,wBAAA,EAA2B,CAAC,GAAG,EAAE;4BAC3C,EAAE,EAAE,CAAC,CAAC,EAAE;4BACR,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,IAAI,CAAC,CAAC,QAAQ;AACxC,4BAAA,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM;AACtB,4BAAA,WAAW,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC1C,4BAAA,YAAY,EAAE,SAAS;AACxB,yBAAA,CAAC;AACJ,oBAAA,CAAC,CAAC;AACF,oBAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACnG,oBAAA,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC9B,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AAC/B,4BAAA,OAAO,CAAC,GAAG,CAAC,CAAA,qBAAA,EAAwB,CAAC,GAAG,EAAE;gCACxC,EAAE,EAAE,CAAC,CAAC,EAAE;AACR,gCAAA,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE;gCACxB,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,IAAI,CAAC,CAAC,QAAQ;AACxC,gCAAA,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM;gCACtB,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC,IAAI;AACnC,6BAAA,CAAC;AACJ,wBAAA,CAAC,CAAC;oBACJ;yBAAO;;wBAEL,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,4BAAA,OAAO,CAAC,GAAG,CAAC,kDAAkD,EAAE;gCAC9D,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE;gCAC1B,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE;gCAC1C,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI;gCAC9C,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI;AAC/B,6BAAA,CAAC;wBACJ;oBACF;oBAEA,IAAI,CAAC,iBAAiB,GAAG;wBACvB,cAAc;wBACd,SAAS;AACT,wBAAA,cAAc,EAAE,eAAe;wBAC/B,eAAe;qBAChB;AACD,oBAAA,IAAI,CAAC,eAAe,CAClB,cAAc,EAAE,SAAS,EAAE,eAAe,EAC1C,eAAe,EAAE,kBAAkB,EAAE,eAAe,CACrD;AACD,oBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACxB,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,MAAM,iBAAiB,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB;QACF;AACA,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI;AACF,YAAA,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;AACvC,gBAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AAClC,gBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;AAChC,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACnC,gBAAA,IAAI,CAAC,cAAc,CAAC,gBAAgB,EAAE;AACvC,aAAA,CAAC;YACF,MAAM,CAAC,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,iBAAiB,CAAC,GAAG,OAAO;AAC/E,YAAA,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC;AAC/D,YAAA,IAAI,CAAC,kBAAkB,GAAG,CAAC,SAAS;AAEpC,YAAA,IAAI,aAAa,CAAC,MAAM,KAAK,WAAW,EAAE;gBACxC,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE;AACnD,gBAAA,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,GAAG,EAAE;YACpE;AACA,YAAA,IAAI,WAAW,CAAC,MAAM,KAAK,WAAW,EAAE;gBACtC,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;YACzC;AACA,YAAA,IAAI,cAAc,CAAC,MAAM,KAAK,WAAW,EAAE;gBACzC,IAAI,CAAC,WAAW,GAAG,cAAc,CAAC,KAAK,IAAI,EAAE;YAC/C;AACA,YAAA,IAAI,iBAAiB,CAAC,MAAM,KAAK,WAAW,EAAE;gBAC5C,IAAI,CAAC,cAAc,GAAG,iBAAiB,CAAC,KAAK,IAAI,EAAE;YACrD;AAEA,YAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,gBAAA,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,iBAAiB;AAC7F,gBAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CACnD,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC,OAAO,MAAM,SAAS,CAAC,EAAE,CACpE;gBACD,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAC7C,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,KAAK,SAAS,CAAC,EAAE,CACtC;AACD,gBAAA,IAAI,CAAC,eAAe,CAClB,cAAc,EAAE,SAAS,EAAE,cAAc,EACzC,eAAe,EAAE,kBAAkB,EAAE,eAAe,CACrD;YACH;QACF;gBAAU;AACR,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK;QAC5B;IACF;IAEA,cAAc,CAAC,cAAc,EAAE,EAAE,EAAA;AAC/B,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE;AACrD,YAAA,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB;AACA,QAAA,OAAO,cAAc;IACvB;IAEA,kBAAkB,CAAC,EAAE,EAAE,QAAQ,EAAA;QAC7B,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;IACvC;AAEA,IAAA,eAAe,CACb,cAAc,EAAE,iBAAiB,EAAE,cAAc,EACjD,eAAe,GAAG,EAAE,EAAE,kBAAkB,GAAG,EAAE,EAAE,eAAe,GAAG,EAAE,EAAA;AAEnE,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC;AACrB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC;QACrB,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC;YAC1D;QACF;AACA,QAAA,IAAI;;YAEF,MAAM,cAAc,GAAG,IAAI;YAE3B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,yBAAyB,CAAC,mBAAmB,CACpE,IAAI,CAAC,YAAY,EACjB,cAAc,EACd,IAAI,CAAC,WAAW,EAChB,iBAAiB,EACjB,cAAc,EACd,EAAE,EACF,eAAe,EACf,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,QAAQ,EACb,eAAe,EACf,kBAAkB,EAClB,IAAI,CAAC,kBAAkB,EACvB,cAAc,CACf;QACH;QAAE,OAAO,GAAG,EAAE;YACZ;QACF;QAEA,IAAI,YAAY,GAAG,CAAC;AACpB,QAAA,IAAI,CAAC,gCAAgC,GAAG,KAAK;AAC7C,QAAA,IAAI,CAAC,0BAA0B,GAAG,KAAK;AACvC,QAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;QACjC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;AACrC,YAAA,IAAI,EAAE,CAAC,KAAK,KAAK,GAAG,EAAE;gBACpB,IAAI,CAAC,YAAY,EAAE;YACrB;YACA,IAAI,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;gBAC1B,IAAI,CAAC,YAAY,EAAE;YACrB;AACA,YAAA,IAAI,EAAE,CAAC,KAAK,KAAK,GAAG,EAAE;AACpB,gBAAA,YAAY,EAAE;YAChB;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,gCAAgC,GAAG,IAAI,CAAC;QAC/C;AACA,QAAA,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC;QACzC;AAEA,QAAA,IAAI,YAAY,GAAG,CAAC,EAAE;AACpB,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACnC;QACA,IAAI,CAAC,YAAY,EAAE;IACrB;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU;IACpC;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;IACxB;IAEA,YAAY,GAAA;AACV,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY;AACjC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa;QACnC,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,gBAAgB,CAAC;QACnD,MAAM,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;;;QAGvC,IAAI,gBAAgB,GAAQ,IAAI;AAChC,QAAA,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,YAAY,CAAC,gBAAgB,CAAC,CAAC;AAC9D,QAAA,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAEhE,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC;AAC1C,QAAA,MAAM,KAAK,GAAQ,GAAG,CAAC,IAAI,EAAE;QAC7B,IAAI,IAAI,EAAE,IAAI;QAEd;AACG,aAAA,IAAI,CAAC,OAAO,EAAE,MAAM;AACpB,aAAA,IAAI,CAAC,QAAQ,EAAE,MAAM;AACrB,aAAA,IAAI,CAAC,SAAS,EAAE,UAAU,IAAI,OAAO,GAAG,EAAE,CAAC,GAAG,GAAG,GAAG,QAAQ;AAC5D,aAAA,IAAI,CAAC,qBAAqB,EAAE,eAAe,CAAC;;;QAI/C,MAAM,iBAAiB,GAAG;AACxB,cAAE,EAAE,CAAC,aAAa,CAAC,KAAK;AACxB,cAAE,EAAE,CAAC,YAAY;QAEnB,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE;;AAG3B,QAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC;QAClE,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,QAAQ,EAAE,CAAC;AAExD,QAAA,MAAM,UAAU,GAAG,CAAC,CAAM,KAAI;YAC5B,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC;AACzC,QAAA,CAAC;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;QAC5E;aAAO;YACL,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;QAC1C;AACA,QAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;QAE3B,MAAM,UAAU,GAAQ;AACrB,aAAA,eAAe;aACf,KAAK,CACJ,MAAM,EACN;AACG,aAAA,SAAS;aACT,EAAE,CAAC,UAAU,CAAM,EAAA;YAClB,OAAO,CAAC,CAAC,EAAE;AACb,QAAA,CAAC;aACA,QAAQ,CAAC,GAAG;aACZ,QAAQ,CAAC,CAAC,CAAC;AAEf,aAAA,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,aAAa,EAAE;AAClC,aAAA,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;AAE7D,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;AACrC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;AAErC,QAAA,IAAI,GAAG;aACJ,SAAS,CAAC,aAAa;aACvB,IAAI,CAAC,KAAK;AACV,aAAA,KAAK;aACL,MAAM,CAAC,GAAG;AACV,aAAA,IAAI,CAAC,OAAO,EAAE,MAAM;AACpB,aAAA,IAAI,CAAC,YAAY,EAAE,iBAAiB,CAAC;;;;;;;;AASxC,QAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;QACtC;aACG,MAAM,CAAC,MAAM;AACb,aAAA,KAAK,CAAC,cAAc,EAAE,UAAU,CAAC,EAAA;AAChC,YAAA,IAAI,CAAC,CAAC,QAAQ,KAAK,gBAAgB;AAAE,gBAAA,OAAO,GAAG;YAC/C,IAAI,QAAQ,CAAC,CAAC,CAAC;AAAE,gBAAA,OAAO,IAAI;AAC5B,YAAA,OAAO,IAAI;AACb,QAAA,CAAC;AACA,aAAA,KAAK,CAAC,gBAAgB,EAAE,UAAU,CAAC,EAAA;;AAElC,YAAA,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,MAAM;AACvC,QAAA,CAAC;AACA,aAAA,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAA;AAC1B,YAAA,IAAI,CAAC,CAAC,QAAQ,KAAK,gBAAgB;AAAE,gBAAA,OAAO,SAAS;YACrD,IAAI,QAAQ,CAAC,CAAC,CAAC;AAAE,gBAAA,OAAO,SAAS;AACjC,YAAA,OAAO,SAAS;AAClB,QAAA,CAAC;AACA,aAAA,KAAK,CAAC,kBAAkB,EAAE,UAAU,CAAC,EAAA;AACpC,YAAA,IAAI,CAAC,CAAC,QAAQ,KAAK,gBAAgB;gBAAE,OAAO,IAAI,CAAC;YACjD,IAAI,QAAQ,CAAC,CAAC,CAAC;gBAAE,OAAO,OAAO,CAAC;YAChC,OAAO,KAAK,CAAC;AACf,QAAA,CAAC,CAAC;AAEJ,QAAA,IAAI,GAAG;aACJ,SAAS,CAAC,OAAO;aACjB,IAAI,CAAC,KAAK;AACV,aAAA,KAAK;aACL,MAAM,CAAC,GAAG;AACV,aAAA,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;QAExB;aACG,MAAM,CAAC,OAAO;AACd,aAAA,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,EAAA;YAC7B,MAAM,eAAe,GAAG,sCAAsC;YAC9D,MAAM,6BAA6B,GACjC,gDAAgD;YAClD,MAAM,YAAY,GAAG,mCAAmC;YAExD,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;;;AAG/B,gBAAA,IAAI,CAAC,CAAC,SAAS,KAAK,YAAY,IAAI,CAAC,CAAC,MAAM,KAAK,eAAe,EAAE;AAChE,oBAAA,OAAO,6BAA6B;gBACtC;AACA,gBAAA,OAAO,YAAY;YACrB;YACA,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;;;AAG7B,gBAAA,OAAO,eAAe;YACxB;AACA,YAAA,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,EAAE;AACnB,gBAAA,OAAO,sCAAsC;YAC/C;AACA,YAAA,OAAO,EAAE;AACX,QAAA,CAAC;AACA,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE;AACb,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE;AACb,aAAA,IAAI,CAAC,OAAO,EAAE,IAAI;AAClB,aAAA,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;;;;AAKvB,QAAA,MAAM,WAAW,GAAG,CAAC,CAAM,KAAY;YACrC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;gBAC7B,OAAO,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,IAAI,SAAS,GAAG,SAAS;YAC5E;AACA,YAAA,QAAQ,CAAC,CAAC,SAAS;AACjB,gBAAA,KAAK,QAAQ,EAAE,OAAO,SAAS,CAAC;AAChC,gBAAA,KAAK,SAAS,EAAE,OAAO,SAAS,CAAC;AACjC,gBAAA,KAAK,YAAY,EAAE,OAAO,SAAS,CAAC;AACpC,gBAAA,KAAK,SAAS;AACd,gBAAA,SAAS,OAAO,SAAS,CAAC;;AAE9B,QAAA,CAAC;;;QAGD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;aAC7E,MAAM,CAAC,QAAQ;aACf,IAAI,CAAC,IAAI,EAAE,CAAC,CAAM,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;aACxD,IAAI,CAAC,IAAI,EAAE,CAAC,CAAM,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE;AAC5D,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC;AACX,aAAA,IAAI,CAAC,MAAM,EAAE,CAAC,CAAM,KAAK,WAAW,CAAC,CAAC,CAAC;;;AAGvC,aAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,YAAY,IAAI,SAAS,GAAG,OAAO;AAC7G,aAAA,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;;;;AAK1B,QAAA,MAAM,eAAe,GAAG,CAAC,QAA4B,KAAY;AAC/D,YAAA,IAAI,CAAC,QAAQ;AAAE,gBAAA,OAAO,EAAE;AACxB,YAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YACrF,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,QAAQ;YAChF,MAAM,MAAM,GAAG,EAAE;AACjB,YAAA,OAAO,SAAS,CAAC,MAAM,GAAG;kBACtB,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG;kBACjC,SAAS;AACf,QAAA,CAAC;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,UAAqB,CAAM,EAAA;YACnC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;YACzB,MAAM,WAAW,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC;AAE3C,YAAA,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM;AACzB,iBAAA,IAAI,CAAC,GAAG,EAAE,CAAC;AACX,iBAAA,IAAI,CAAC,GAAG,EAAE,EAAE;AACZ,iBAAA,IAAI,CAAC,MAAM,EAAE,kBAAkB;AAC/B,iBAAA,KAAK,CAAC,WAAW,EAAE,KAAK;AACxB,iBAAA,KAAK,CAAC,aAAa,EAAE,QAAQ;iBAC7B,IAAI,CAAC,WAAW,CAAC;YAEpB,MAAM,IAAI,GAAI,IAAI,CAAC,IAAI,EAAqB,CAAC,OAAO,EAAE;AACtD,YAAA,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM;iBACpB,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC;iBACpB,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC;iBACpB,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC;iBAC5B,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC;AAC9B,iBAAA,IAAI,CAAC,MAAM,EAAE,mBAAmB;AAChC,iBAAA,IAAI,CAAC,SAAS,EAAE,GAAG;AACnB,iBAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAClB,QAAA,CAAC,CAAC;;AAIF,QAAA,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;QAE1C,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC,KAAI;YAChC,MAAM,sBAAsB,GAAG,EAAE;AACjC,YAAA,WAAW,CAAC,KAAK,EAAE,CAAC,EAAE,sBAAsB,CAAC;AAC/C,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,YAAA;AAClB,YAAA,aAAa,EAAE;AACjB,QAAA,CAAC,CAAC;AAEF,QAAA,SAAS,MAAM,GAAA;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,EAAA;AAChC,gBAAA,OAAO,YAAY,GAAG,CAAC,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,GAAG;AACnD,YAAA,CAAC,CAAC;YAEF;iBACG,MAAM,CAAC,MAAM;AACb,iBAAA,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,EAAA;AACrB,gBAAA,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI;AACtB,YAAA,CAAC;AACA,iBAAA,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,EAAA;AACrB,gBAAA,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI;AACtB,YAAA,CAAC;AACA,iBAAA,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,EAAA;AACrB,gBAAA,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI;AACtB,YAAA,CAAC;AACA,iBAAA,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,EAAA;AACrB,gBAAA,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI;AACtB,YAAA,CAAC,CAAC;YAEJ;iBACG,MAAM,CAAC,OAAO;AACd,iBAAA,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,EAAA;gBACpB,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,EACtB,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,EAClB,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;gBAExB,OAAO,CAAC,GAAG,CAAC;AACd,YAAA,CAAC;AACA,iBAAA,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,EAAA;gBACpB,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,EACtB,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,EAClB,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;gBAExB,OAAO,CAAC,GAAG,EAAE;AACf,YAAA,CAAC,CAAC;YAEJ;iBACG,MAAM,CAAC,MAAM;AACb,iBAAA,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,iBAAA,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,EAAA;AACpB,gBAAA,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI;AACtB,YAAA,CAAC;AACA,iBAAA,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,EAAA;AACpB,gBAAA,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI;AACtB,YAAA,CAAC;iBACA,SAAS,CAAC,SAAS;AACnB,iBAAA,IAAI,CAAC,UAAqB,CAAM,EAAE,CAAC,EAAA;AAClC,gBAAA,IAAI,CAAC,KAAK,CAAC,EAAE;AACX,oBAAA,EAAE,CAAC,MAAM,CAAC,IAAI;AACX,yBAAA,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,EAAA;AAChC,wBAAA,OAAO,GAAG;AACZ,oBAAA,CAAC;AACA,yBAAA,IAAI,CAAC,MAAM,EAAE,UAAU,CAAM,EAAA;wBAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;AAC3B,wBAAA,OAAO,CAAC;AACV,oBAAA,CAAC;AACA,yBAAA,IAAI,CAAC,IAAI,EAAE,UAAU,CAAM,EAAA;AAC1B,wBAAA,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI;AACtB,oBAAA,CAAC,CAAC;gBACN;qBAAO;AACL,oBAAA,EAAE,CAAC,MAAM,CAAC,IAAI;AACX,yBAAA,IAAI,CAAC,eAAe,EAAE,UAAU,CAAM,EAAA;AACrC,wBAAA,OAAO,GAAG;AACZ,oBAAA,CAAC;AACA,yBAAA,IAAI,CAAC,MAAM,EAAE,UAAU,CAAM,EAAA;AAC5B,wBAAA,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI;AACtB,oBAAA,CAAC;AACA,yBAAA,IAAI,CAAC,IAAI,EAAE,UAAU,CAAM,EAAA;AAC1B,wBAAA,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI;AACtB,oBAAA,CAAC,CAAC;gBACN;AAEA,gBAAA,EAAE,CAAC,MAAM,CAAC,IAAI;AACX,qBAAA,IAAI,CAAC,eAAe,EAAE,KAAK;AAC3B,qBAAA,IAAI,CAAC,OAAO,EAAE,MAAM;AACpB,qBAAA,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,EAAA;AACtB,oBAAA,OAAO,MAAM;AACf,gBAAA,CAAC;AACA,qBAAA,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC;AACtC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC;AAED,QAAA,SAAS,aAAa,GAAA;YACpB,IAAI,OAAO,EAAE;;gBAEX,YAAY,CAAC,gBAAgB,CAAC;AAC9B,gBAAA,gBAAgB,GAAG,UAAU,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC;YAC5E;QACF;AAEA,QAAA,SAAS,WAAW,CAAC,KAAK,EAAE,CAAC,EAAE,sBAAsB,EAAA;YACnD,YAAY,CAAC,gBAAgB,CAAC;AAC9B,YAAA,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,SAAS,GAAG,aAAa,CAC5D,CAAC,EACD,sBAAsB,CACvB;AACD,YAAA,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC;AACjC,YAAA,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,UAAU,CAAC;AACxC,YAAA,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI;AAC5B,YAAA,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI;AAC5B,YAAA,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;AACxB,YAAA,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QACzB;;;;AAKA,QAAA,SAAS,aAAa,CAAC,CAAC,EAAE,sBAAsB,EAAA;YAC9C,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,MAC/C,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAEjE,MAAM,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAChE,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;;;;;;YAOrF,IAAI,GAAG,GAAG,SAAS;YACnB,IAAI,KAAK,GAAG,EAAE;YACd,IAAI,SAAS,EAAE;gBACb,KAAK,GAAG,SAAS;YACnB;iBAAO,IAAI,QAAQ,EAAE;;AAEnB,gBAAA,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,EAAE;oBAAE,GAAG,GAAG,SAAS;oBAAE,KAAK,GAAG,SAAS;gBAAE;qBAChF;oBAAE,GAAG,GAAG,IAAI;oBAAE,KAAK,GAAG,QAAQ;gBAAE;YACvC;iBAAO;AACL,gBAAA,QAAQ,CAAC,CAAC,SAAS;AACjB,oBAAA,KAAK,QAAQ;wBAAE,GAAG,GAAG,IAAI;wBAAE,KAAK,GAAG,QAAQ;wBAAE;AAC7C,oBAAA,KAAK,SAAS;wBAAE,GAAG,GAAG,SAAS;wBAAE,KAAK,GAAG,SAAS;wBAAE;AACpD,oBAAA,KAAK,YAAY;wBAAE,GAAG,GAAG,SAAS;wBAAE,KAAK,GAAG,cAAc;wBAAE;AAC5D,oBAAA,KAAK,SAAS;AACd,oBAAA;wBAAS,GAAG,GAAG,SAAS;wBAAE,KAAK,GAAG,SAAS;wBAAE;;YAEjD;;;;;YAMA,IAAI,IAAI,GAAG,EAAE;AACb,YAAA,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG;gBAAE,IAAI,GAAG,eAAe;AACtC,iBAAA,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG;gBAAE,IAAI,GAAG,aAAa;AACzC,iBAAA,IAAI,QAAQ;AAAE,gBAAA,IAAI,GAAG,CAAC,CAAC,UAAU,KAAK,gBAAgB,GAAG,gBAAgB,GAAG,aAAa;;;;;;;YAQ9F,MAAM,IAAI,GAAgC,EAAE;YAC5C,IAAI,SAAS,EAAE;AACb,gBAAA,IAAI,CAAC,CAAC,gBAAgB,EAAE;oBACtB,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC;gBAC9C;AACA,gBAAA,IAAI,CAAC,CAAC,WAAW,EAAE;oBACjB,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;gBACpC;gBACA,IAAI,CAAC,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE;;;AAGzC,oBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,cAAc;wBACvB,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,eAAe,CAAC,MAAM,IAAI,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;gBAC7F;AACA,gBAAA,IAAI,OAAO,CAAC,CAAC,kBAAkB,KAAK,SAAS,EAAE;AAC7C,oBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,kBAAkB,GAAG,UAAU,GAAG,cAAc,CAAC,CAAC;gBAC/E;AACA,gBAAA,IAAI,CAAC,CAAC,kBAAkB,EAAE;oBACxB,IAAI,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC;gBAClD;gBACA,IAAI,CAAC,CAAC,qBAAqB,IAAI,CAAC,CAAC,qBAAqB,CAAC,MAAM,EAAE;AAC7D,oBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC/D;gBACA,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE;AACzC,oBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBACtD;YACF;iBAAO;AACL,gBAAA,IAAI,IAAI;oBAAE,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACnC,IAAI,QAAQ,EAAE;AACZ,oBAAA,IAAI,CAAC,CAAC,eAAe,KAAK,KAAK,IAAI,CAAC,CAAC,eAAe,KAAK,IAAI,EAAE;wBAC7D,IAAI,CAAC,IAAI,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC;oBACpD;gBACF;qBAAO;AACL,oBAAA,IAAI,CAAC,CAAC,gBAAgB,KAAK,KAAK,IAAI,CAAC,CAAC,gBAAgB,KAAK,IAAI,EAAE;wBAC/D,IAAI,CAAC,IAAI,CAAC,CAAC,mBAAmB,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC;oBACtD;AACA,oBAAA,IAAI,CAAC,CAAC,UAAU,KAAK,KAAK,IAAI,CAAC,CAAC,UAAU,KAAK,IAAI,EAAE;wBACnD,IAAI,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;oBAC1C;oBACA,IAAI,CAAC,CAAC,EAAE;wBAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACjC,oBAAA,IAAI,CAAC,CAAC,UAAU,KAAK,IAAI;wBAAE,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBAC1D;YACF;YAEA,IAAI,IAAI,GAAG,+CAA+C;AAC1D,YAAA,IAAI,IAAI,8BAA8B,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,QAAQ;;YAErE,IAAI,CAAC,SAAS,EAAE;AACd,gBAAA,IAAI,IAAI,gCAAgC,GAAG,GAAG,GAAG;sBAC7C;AACA,sBAAA,gCAAgC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG;AAChD,sBAAA,QAAQ;YACd;AACA,YAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAI;gBACzB,IAAI,IAAI,uBAAuB,IAAI,CAAC,GAAG,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG;AACrE,sBAAA,2BAA2B,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG;AACvC,sBAAA,2BAA2B,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG;AACvC,sBAAA,QAAQ;AACd,YAAA,CAAC,CAAC;YACF,OAAO,IAAI,GAAG,QAAQ;QACxB;QAEA,SAAS,UAAU,CAAC,CAAC,EAAA;YACnB,OAAO,CAAC,YAAY,MAAM,IAAI,CAAC,CAAC,WAAW,KAAK,MAAM;QACxD;AAEA,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;;;AAI1B,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB,UAAU,CAAC,MAAK;gBACd,IAAI,CAAC,YAAY,EAAE;AACnB,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;YAC3B,CAAC,EAAE,CAAC,CAAC;QACP;AACF,IAAA,CAAC;IAED,YAAY,GAAA;QACV,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;AAC5C,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE;QAExB,MAAM,EAAE,GAAG;aACR,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,IAAI;AACtB,aAAA,MAAM,CAAC,CAAC,CAAM,KAAK,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzD,MAAM,EAAE,GAAG;aACR,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,IAAI;AACtB,aAAA,MAAM,CAAC,CAAC,CAAM,KAAK,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzD,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;YAAE;QAExC,MAAM,OAAO,GAAG,EAAE;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QAC5B,MAAM,YAAY,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,OAAO,GAAG,CAAC;QAChD,MAAM,aAAa,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,OAAO,GAAG,CAAC;AACjD,QAAA,IAAI,YAAY,IAAI,CAAC,IAAI,aAAa,IAAI,CAAC;YAAE;;;AAI7C,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,GAAG;AACnD,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,EAAE;AACnD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,GAAG,YAAY;AACnD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,GAAG,aAAa;AAEtD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,UAAU,GAAG,YAAY,EACzB,WAAW,GAAG,aAAa,EAC3B,CAAC,CACF;;;AAGD,QAAA,MAAM,EAAE,GAAG,CAAC,UAAU,GAAG,YAAY,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,OAAO,IAAI,KAAK;AAC7E,QAAA,MAAM,EAAE,GAAG,CAAC,WAAW,GAAG,aAAa,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,OAAO,IAAI,KAAK;AAE/E,QAAA,EAAE,CAAC,MAAM,CAAC,mBAAmB;AAC1B,aAAA,UAAU;aACV,QAAQ,CAAC,GAAG;aACZ,IAAI,CACH,IAAI,CAAC,YAAY,CAAC,SAAS,EAC3B,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAC/C;IACL;IAEA,MAAM,GAAA;QACJ,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE;AACxB,QAAA,EAAE,CAAC,MAAM,CAAC,mBAAmB;AAC1B,aAAA,UAAU;aACV,QAAQ,CAAC,GAAG;aACZ,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC;IACzC;IAEA,OAAO,GAAA;QACL,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE;AACxB,QAAA,EAAE,CAAC,MAAM,CAAC,mBAAmB;AAC1B,aAAA,UAAU;aACV,QAAQ,CAAC,GAAG;aACZ,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,GAAG,GAAG,CAAC;IAC7C;IAEA,SAAS,GAAA;QACP,IAAI,CAAC,YAAY,EAAE;IACrB;AA3+BW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAsD,yBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,EAAA,EAAA,KAAA,EA+C7B,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAChB,iBAAiB,+DAGjB,eAAe,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAnDd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,4BAA4B,oFCjCzC,q+MAmIA,EAAA,MAAA,EAAA,CAAA,6uaAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA1C,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAuB,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAoB,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,OAAA,EAAA,8BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,mDAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,yBAAA,EAAA,4BAAA,EAAA,cAAA,EAAA,yBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDlGa,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBANxC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,cAGvB,KAAK,EAAA,QAAA,EAAA,q+MAAA,EAAA,MAAA,EAAA,CAAA,6uaAAA,CAAA,EAAA;;0BAiDhB,MAAM;2BAAC,gBAAgB;;0BACvB,MAAM;2BAAC,iBAAiB;;0BAGxB,MAAM;2BAAC,eAAe;;AA27B3B,MAAM,WAAW,CAAA;AAGhB;;AElhCD;;;;;;;;;;;;;;AAcE;MAWW,kBAAkB,CAAA;AAM7B,IAAA,WAAA,CAAoB,aAAmC,EAAA;QAAnC,IAAA,CAAA,aAAa,GAAb,aAAa;QAJxB,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,IAAI,GAAG,KAAK;AACX,QAAA,IAAA,CAAA,UAAU,GAA0B,IAAI,YAAY,EAAW;IAEf;AAE1D,IAAA,QAAQ,KAAU;IAElB,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK;QACjB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACjC;+GAbW,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,oKCzB/B,iNAOA,EAAA,MAAA,EAAA,CAAA,8pBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAzD,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDkBa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,cAGd,KAAK,EAAA,QAAA,EAAA,iNAAA,EAAA,MAAA,EAAA,CAAA,8pBAAA,CAAA,EAAA;;sBAIlB;;sBACA;;sBACA;;;AE7BH;;;;;;;;;;;;;;AAcE;MAUW,gBAAgB,CAAA;IAIzB,WAAA,CACuC,eAAgC,EAC3D,cAA8B,EAAA;QADH,IAAA,CAAA,eAAe,GAAf,eAAe;QAC1C,IAAA,CAAA,cAAc,GAAd,cAAc;QAJ1B,IAAA,CAAA,SAAS,GAAQ,EAAE;IAKhB;AAEH,IAAA,aAAa,CAAC,QAAQ,EAAA;QAClB,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAA,WAAA,EAAc,QAAQ,CAAC,EAAE,CAAA,gBAAA,CAAkB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACjG,YAAA,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI;YAC5B,OAAO,IAAI,CAAC,SAAS;AACzB,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,YAAY,CAAC,MAAM,EAAA;AACf,QAAA,MAAM,MAAM,GAAG;AACX,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE;SACV;QACD,MAAM,OAAO,GAAU,EAAE;AACzB,QAAA,IAAI,MAAM,IAAI,MAAM,KAAK,EAAE,EAAE;YACzB,MAAM,IAAI,GACN,IAAI,CAAC,eAAe,CAAC,eAAe,KAAK,eAAe,CAAC;AACrD,kBAAE;kBACA,WAAW;YACrB,OAAO,CAAC,IAAI,CAAC;AACT,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,KAAK,EAAE,MAAM;gBACb;AACH,aAAA,CAAC;QACN;AACA,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACzE,YAAA,OAAO,MAAM;AACjB,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,WAAW,CAAC,MAAM,EAAA;AACd,QAAA,MAAM,MAAM,GAAG;AACX,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE;SACV;QACD,MAAM,OAAO,GAAU,EAAE;AACzB,QAAA,IAAI,MAAM,IAAI,MAAM,KAAK,EAAE,EAAE;YACzB,MAAM,IAAI,GACN,IAAI,CAAC,eAAe,CAAC,eAAe,KAAK,eAAe,CAAC;AACrD,kBAAE;kBACA,WAAW;YACrB,OAAO,CAAC,IAAI,CAAC;AACT,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,KAAK,EAAE,MAAM;gBACb;AACH,aAAA,CAAC;QACN;AACA,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACxE,YAAA,OAAO,MAAM;AACjB,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,WAAW,CAAC,QAAQ,EAAE,iBAAiB,EAAE,gBAAgB,EAAA;QACrD,IAAI,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,EAAE;AAC1D,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,aAAA,CAAe,EACf,CAAA,iDAAA,CAAmD,CACtD;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,YAAA,OAAO,OAAO,CAAC,OAAO,EAAE;QAC5B;QACA,MAAM,IAAI,GAAG,CAAC;AACV,gBAAA,SAAS,EAAE,iBAAiB;AAC5B,gBAAA,QAAQ,EAAE;AACb,aAAA,CAAC;QACF,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,YAAY,EAAG,QAAQ,CAAC,EAAE,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,MAAK;AACnG,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,cAAA,CAAgB,EAChB,CAAA,uCAAA,CAAyC,CAC5C;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,YAAA,OAAO,IAAI;AACf,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAI;AACf,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,eAAA,CAAiB,EACjB,CAAA,kCAAA,CAAoC,CACvC;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,YAAA,OAAO,KAAK;AAChB,QAAA,CAAC,CAAC;IACN;IAEA,cAAc,CAAC,iBAAiB,EAAE,gBAAgB,EAAA;QAC9C,IAAI,MAAM,GAAG,KAAK;QAClB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AAChC,YAAA,IAAI,QAAQ,CAAC,SAAS,KAAK,iBAAiB,IAAI,QAAQ,CAAC,QAAQ,KAAK,gBAAgB,EAAE;gBACpF,MAAM,GAAG,IAAI;YACjB;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,MAAM;IACjB;IAEA,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAA;QAC7B,MAAM,IAAI,GAAG,CAAC;AACV,gBAAA,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE;AAC9B,gBAAA,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC;AAC7B,aAAA,CAAC;QACF,OAAO,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,YAAY,EAAG,QAAQ,CAAC,EAAE,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,MAAK;AACrG,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,gBAAA,CAAkB,EAClB,CAAA,2CAAA,CAA6C,CAChD;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAI;AACf,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,cAAA,CAAgB,EAChB,CAAA,uCAAA,CAAyC,CAC5C;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,QAAA,CAAC,CAAC;IACN;AAtIS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,kBAKb,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAAuB,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AALpB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFb,MAAM,EAAA,CAAA,CAAA;;4FAET,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAMQ,MAAM;2BAAC,iBAAiB;;;MCvBpB,mCAAmC,CAAA;AAC5C,IAAA,WAAA,CAAmB,WAA6B,EAAA;QAA7B,IAAA,CAAA,WAAW,GAAX,WAAW;IAAqB;+GAD1C,mCAAmC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAnC,mCAAmC,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAnC,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAJ/C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,oCAAoC;AAC9C,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;MASY,oCAAoC,CAAA;AAC7C,IAAA,WAAA,CAAmB,WAA6B,EAAA;QAA7B,IAAA,CAAA,WAAW,GAAX,WAAW;IAAqB;+GAD1C,oCAAoC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAApC,oCAAoC,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAApC,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBAJhD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,qCAAqC;AAC/C,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;;MCgBY,qBAAqB,CAAA;;AAkD9B,IAAA,IAAI,kBAAkB,GAAA;AAClB,QAAA,MAAM,IAAI,GAAG,CAAC,yBAAyB,CAAC;AACxC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU;QAChC,IAAI,CAAC,QAAQ,EAAE;AACX,YAAA,OAAO,IAAI;QACf;AACA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AACzB,YAAA,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,QAAQ,CAAC;QACjC;AACA,QAAA,OAAO,CAAC,GAAG,IAAI,EAAE,QAAQ,CAAC;IAC9B;AASA,IAAA,WAAA,GAAA;QAnES,IAAA,CAAA,WAAW,GAAG,EAAE;;QAQhB,IAAA,CAAA,OAAO,GAAU,EAAE;;QAGnB,IAAA,CAAA,WAAW,GAAG,MAAM;QACpB,IAAA,CAAA,WAAW,GAAG,IAAI;;QAGlB,IAAA,CAAA,UAAU,GAAG,IAAI;QACjB,IAAA,CAAA,iBAAiB,GAAG,QAAQ;AAErC;;AAEG;QACM,IAAA,CAAA,WAAW,GAAG,KAAK;;QAGnB,IAAA,CAAA,WAAW,GAAG,KAAK;;QAGnB,IAAA,CAAA,SAAS,GAAG,IAAI;;AAGf,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAO;;AAGzC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAU;;QAO1C,IAAA,CAAA,cAAc,GAAG,KAAK;QAE/B,IAAA,CAAA,KAAK,GAAQ,SAAS;QACtB,IAAA,CAAA,QAAQ,GAAG,KAAK;QAEhB,IAAA,CAAA,UAAU,GAAG,EAAE;AAeE,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,OAAO,EAAQ;AAChC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAU;;AAG5C,QAAA,IAAA,CAAA,QAAQ,GAAyB,MAAK,EAAE,CAAC;AACzC,QAAA,IAAA,CAAA,SAAS,GAAe,MAAK,EAAE,CAAC;AAsIxC,QAAA,IAAA,CAAA,aAAa,GAAG,CAAC,CAAS,EAAE,MAAW,KAAK,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;AAnInE,QAAA,IAAI,CAAC;AACA,aAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,oBAAoB,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;AAC1E,aAAA,SAAS,CAAC,CAAC,IAAI,KAAI;AAChB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,QAAA,CAAC,CAAC;IACV;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;IAC9B;AAEA,IAAA,UAAU,CAAC,KAAU,EAAA;AACjB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;IACtB;AAEA,IAAA,gBAAgB,CAAC,EAAwB,EAAA;AACrC,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACtB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACvB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;IAC9B;;IAGA,IAAI,GAAA;AACA,QAAA,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE;IAC1B;IAEA,IAAI,GAAA;AACA,QAAA,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE;IAC3B;AAEA,IAAA,KAAK,CAAC,GAAW,EAAA;QACb,IAAI,GAAG,EAAE;YACL,GAAG,CAAC,eAAe,EAAE;YACrB,GAAG,CAAC,cAAc,EAAE;QACxB;AACA,QAAA,IAAI,CAAC,KAAK,GAAG,SAAS;AACtB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IACzC;AAEA;;AAEG;IACH,WAAW,CAAC,IAAI,GAAG,KAAK,EAAA;AACpB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;QACpB,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B;IACJ;IAEA,WAAW,GAAA;QACP,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;;YAElB,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACpC;IACJ;AAEA,IAAA,oBAAoB,CAAC,SAAc,EAAA;AAC/B,QAAA,IAAI,CAAC,KAAK,GAAG,SAAS;AACtB,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC;IACxC;AAEA,IAAA,mBAAmB,CAAC,IAAY,EAAA;AAC5B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACnB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;QAC1C;IACJ;AAEA,IAAA,WAAW,CAAC,GAAU,EAAA;QAClB,GAAG,CAAC,eAAe,EAAE;QACrB,GAAG,CAAC,cAAc,EAAE;AACpB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC1B;AAEA,IAAA,IAAI,gBAAgB,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACnB,YAAA,OAAO,IAAI,CAAC,OAAO,IAAI,EAAE;QAC7B;AACA,QAAA,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,IAAI,EAAE;QACtD,IAAI,CAAC,CAAC,EAAE;AACJ,YAAA,OAAO,IAAI,CAAC,OAAO,IAAI,EAAE;QAC7B;AACA,QAAA,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,KAAI;AACrC,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;AAChE,YAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC5B,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAI,cAAc,GAAA;AACd,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC;IAClE;AAEA,IAAA,IAAI,YAAY,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,EAAE;IAC/E;AAEA,IAAA,cAAc,CAAC,MAAW,EAAA;QACtB,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EAAE;AACzC,YAAA,OAAO,EAAE;QACb;QACA,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC1D,YAAA,OAAO,MAAM;QACjB;AACA,QAAA,OAAO,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;IACrC;AAEA,IAAA,cAAc,CAAC,MAAW,EAAA;QACtB,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EAAE;AACzC,YAAA,OAAO,SAAS;QACpB;QACA,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC1D,YAAA,OAAO,MAAM;QACjB;AACA,QAAA,OAAO,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;IACrC;AAEA,IAAA,IAAI,cAAc,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,cAAc;IAC/C;+GAvMS,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,SAAA,EATnB;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,qBAAqB,CAAC;AACpD,gBAAA,KAAK,EAAE,IAAI;AACd,aAAA;AACJ,SAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAyCa,mCAAmC,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACnC,oCAAoC,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAFvC,SAAS,gDClExB,kmFAmFA,EAAA,MAAA,EAAA,CAAA,syMAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAxB,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAgB,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAuB,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDtDa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAbjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAAA,SAAA,EAGlB;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,2BAA2B,CAAC;AACpD,4BAAA,KAAK,EAAE,IAAI;AACd,yBAAA;AACJ,qBAAA,EAAA,UAAA,EACW,KAAK,EAAA,QAAA,EAAA,kmFAAA,EAAA,MAAA,EAAA,CAAA,syMAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBAKA;;sBAGA;;sBAGA;;sBACA;;sBAGA;;sBACA;;sBAKA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAEA,SAAS;uBAAC,SAAS;;sBACnB,YAAY;uBAAC,mCAAmC;;sBAChD,YAAY;uBAAC,oCAAoC;;sBAGjD;;;AEvEL;;;;;;;;;;;;;;AAcE;MAaW,kBAAkB,CAAA;AAkB7B,IAAA,WAAA,CAAmB,GAAqB,EAAA;QAArB,IAAA,CAAA,GAAG,GAAH,GAAG;QAjBb,IAAA,CAAA,QAAQ,GAAQ,EAAE;AACjB,QAAA,IAAA,CAAA,KAAK,GAAsB,IAAI,YAAY,EAAO;QAE5D,IAAA,CAAA,QAAQ,GAAQ,EAAE;QAClB,IAAA,CAAA,OAAO,GAAQ,EAAE;QACjB,IAAA,CAAA,SAAS,GAAQ,EAAE;QAGnB,IAAA,CAAA,QAAQ,GAAG,KAAK;;AAGhB,QAAA,IAAA,CAAA,uBAAuB,GAAG,QAAQ,CAAC,CAAC,UAAkB,KAAK,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC;AAC7F,QAAA,IAAA,CAAA,sBAAsB,GAAG,QAAQ,CAAC,CAAC,UAAkB,KAAK,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC;IAKhD;IAE3C,QAAQ,GAAA;QACN,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;IACrB;IAEA,WAAW,CAAC,MAAM,GAAG,EAAE,EAAA;AACrB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC5C,YAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI;;AAE7B,QAAA,CAAC,CAAC;IACJ;IAEA,UAAU,CAAC,MAAM,GAAG,EAAE,EAAA;AACpB,QAAA,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC3C,YAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI;AAC5B,QAAA,CAAC,CAAC;IACJ;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAI;AACvD,YAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC5B,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;YACjG,IAAI,CAAC,MAAM,EAAE;gBACX;YACF;YACA,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS;AACjC,YAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS;AAClC,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AACzB,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;AAC/B,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;AACvB,YAAA,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;AAC7B,YAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;AACtB,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,cAAc,CAAC,QAAQ,EAAA;AACrB,QAAA,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAK;YACzD,IAAI,CAAC,aAAa,EAAE;AACtB,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC;IAC1E;+GArEW,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAuB,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,kVC3B/B,20GAiGM,EAAA,MAAA,EAAA,CAAA,ggHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA1D,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAe,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAgD,qBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,aAAA,EAAA,YAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,aAAA,EAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDtEO,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,cAGb,KAAK,EAAA,QAAA,EAAA,20GAAA,EAAA,MAAA,EAAA,CAAA,ggHAAA,CAAA,EAAA;;sBAGlB;;sBACA;;sBAaA,SAAS;uBAAC,cAAc;;sBACxB,SAAS;uBAAC,YAAY;;;AE3CzB;;;;;;;;;;;;;;AAcE;AAsBI,MAAO,uBAAwB,SAAQ,iBAAiB,CAAA;AAO5D,IAAA,WAAA,CACoB,GAA0B,EAC1C,aAAqC,EACrC,UAAqB,EACb,QAAwB,EACxB,MAAc,EACtB,aAAmC,EACS,UAA4B,EAAA;QAE1E,KAAK,CAAC,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC;QAR9C,IAAA,CAAA,GAAG,GAAH,GAAG;QAGX,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,MAAM,GAAN,MAAM;QAE8B,IAAA,CAAA,UAAU,GAAV,UAAU;QAZ1D,IAAA,CAAA,KAAK,GAAG,YAAY;QAEpB,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,eAAe,GAAG,KAAK;IAYvB;IAES,QAAQ,GAAA;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC;QAC/C,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;AACvC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAU,KAAI;AAC1C,YAAA,IAAI,KAAK,YAAY,aAAa,EAAE;gBAClC,IAAI,CAAC,WAAW,EAAE;YACpB;QACF,CAAC,CAAC,CACH;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE;QACpC,KAAK,CAAC,QAAQ,EAAE;IAClB;AAEA,IAAA,mBAAmB,CAAC,MAAc,EAAA;QAChC,QAAO,MAAM;AACX,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE;gBACrB;AACF,YAAA,KAAK,QAAQ;gBACX,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;oBAChD,OAAO,GAAG,CAAC,QAAQ;AACrB,gBAAA,CAAC,CAAC;AACF,gBAAA,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,GAAG,YAAY,GAAG,UAAU;AAClE,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,KAAK,CAAC;gBACzC;YACF;;IAEJ;AAEA,IAAA,UAAU,CAAC,KAAM,EAAA;AACf,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,KAAK;AAC9B,QAAA,IAAG,KAAK,EAAE,OAAO,EAAE;YACjB,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE;QACtC;IACF;AAEA,IAAA,WAAW,CAAC,KAAK,EAAA;AACf,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;IAC9B;AAEA,IAAA,WAAW,CAAC,KAAU,EAAA;QACpB,MAAM,oBAAoB,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;QAC/D,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;QAChD,IAAI,oBAAoB,EAAE;YACxB;QACF;AACA,QAAA,QAAO,KAAK,EAAE,MAAM;AAClB,YAAA,KAAK,WAAW;AACd,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC5B,oBAAA,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE;AAC5B,wBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;oBACvB;AACF,gBAAA,CAAC,CAAC;gBACF;AACF,YAAA,KAAK,YAAY;AACf,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC5B;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;gBACtC;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACF,YAAA,KAAK,UAAU;gBACb,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC;gBACvC;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC3B;AACF,YAAA,KAAK,qBAAqB;AACxB,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC5B;AACF,YAAA,KAAK,kBAAkB;AACrB,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC;gBAChC;AACF,YAAA,KAAK,oBAAoB;AACvB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC;gBAClC;AACF,YAAA,KAAK,uBAAuB;AAC1B,gBAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC;gBACvC;AACF,YAAA,KAAK,SAAS;AACZ,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC3B;AACF,YAAA,KAAK,cAAc;gBACjB,IAAI,CAAC,gBAAgB,EAAE;gBACvB;AACF,YAAA,KAAK,mBAAmB;gBACtB,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC1C;AACF,YAAA,KAAK,WAAW;AACd,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,gBAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAK;AACzC,oBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;oBACtB,IAAI,CAAC,WAAW,EAAE;AACpB,gBAAA,CAAC,CAAC;gBACF;AACF,YAAA;gBACE;;IAEN;AAEA,IAAA,WAAW,CAAC,IAAS,EAAA;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;QACjC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC;IACtC;AAEA,IAAA,UAAU,CAAC,IAAS,EAAA;AAClB,QAAA,MAAM,IAAI,GAAG;YACX,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;YAC1B,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,CAAC;AAClD,YAAA,UAAU,EAAE,GAAG;AACf,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,MAAM,EAAE,IAAI;SACb;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,EAAE;AACrD,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,SAAS,EAAE,KAAK;AACjB,SAAA,CAAC;IACJ;IAEA,eAAe,CAAC,MAAc,EAAE,IAAS,EAAA;AACvC,QAAA,IAAI,CAAC,UAAU,EAAE,sBAAsB,EAAE,IAAI,CAAC;YAC5C,MAAM;AACN,YAAA,IAAI,EAAE,UAAU;YAChB,IAAI;AACJ,YAAA,IAAI,EAAC;AACN,SAAA,CAAC;IACJ;AAEA,IAAA,UAAU,CAAC,IAAS,EAAA;QAClB,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC;IACzC;AAEA,IAAA,sBAAsB,CAAC,QAAQ,EAAA;QAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,4BAA4B,EAAE;AAClE,YAAA,IAAI,EAAE;AACJ,gBAAA,QAAQ,EAAE,QAAQ;AACnB,aAAA;AACD,YAAA,SAAS,EAAE,KAAK;AACjB,SAAA,CAAC;IACJ;AAEA,IAAA,eAAe,CAAC,QAAQ,EAAA;QACtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,wBAAwB,EAAE;AAC9D,YAAA,IAAI,EAAE;AACJ,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,IAAI,EAAE,OAAO;AACd,aAAA;AACD,YAAA,SAAS,EAAE,KAAK;AACjB,SAAA,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;YAChD,IAAG,MAAM,EAAE;AACT,gBAAA,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC;YACnC;AACF,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,iBAAiB,CAAC,QAAQ,EAAA;QACxB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,wBAAwB,EAAE;AAC9D,YAAA,IAAI,EAAE;AACJ,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,IAAI,EAAE,SAAS;AAChB,aAAA;AACD,YAAA,SAAS,EAAE,KAAK;AACjB,SAAA,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;YAChD,IAAG,MAAM,EAAE;AACT,gBAAA,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC;YACnC;AACF,QAAA,CAAC,CAAC;IACJ;IAES,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE;IACrB;IAEA,aAAa,GAAA;QACX,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AAClD,YAAA,OAAO,OAAO,CAAC,yGAAyG,CAAC;QAC3H;AACA,QAAA,OAAO,IAAI;IACb;AA/MW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,kMActB,0BAA0B,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAd3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,kGCpCpC,69CAuCA,EAAA,MAAA,EAAA,CAAA,uqSAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,WAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,cAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,kBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDHa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,cAGd,KAAK,EAAA,QAAA,EAAA,69CAAA,EAAA,MAAA,EAAA,CAAA,uqSAAA,CAAA,EAAA;;0BAgBd,MAAM;2BAAC,0BAA0B;;;AE3BlC,MAAO,wBAAyB,SAAQ,iBAAiB,CAAA;IAQ7D,WAAA,CACoB,GAA2B,EAC3C,aAAqC,EACrC,UAAqB,EACb,QAAwB,EAChC,aAAmC,EACY,UAA4B,EAAA;QAE7E,KAAK,CAAC,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,UAAU,CAAC;QAPlC,IAAA,CAAA,GAAG,GAAH,GAAG;QAGX,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAE+B,IAAA,CAAA,UAAU,GAAV,UAAU;QAZ7D,IAAA,CAAA,KAAK,GAAG,cAAc;QAEtB,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,wBAAwB,GAAU,EAAE;QACpC,IAAA,CAAA,eAAe,GAAG,KAAK;IAWvB;IAES,QAAQ,GAAA;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC;QAC5C,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;QACvC,IAAI,CAAC,2BAA2B,EAAE;QAClC,KAAK,CAAC,QAAQ,EAAE;IAClB;IAES,WAAW,GAAA;QAClB,IAAI,CAAC,UAAU,EAAE;QACjB,KAAK,CAAC,WAAW,EAAE;IACrB;AAEA,IAAA,mBAAmB,CAAC,MAAc,EAAA;QAChC,QAAO,MAAM;AACX,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE;gBACrB;AACF,YAAA,KAAK,QAAQ;gBACX,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;oBAChD,OAAO,GAAG,CAAC,QAAQ;AACrB,gBAAA,CAAC,CAAC;AACF,gBAAA,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,GAAG,QAAQ;AAC7D,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,KAAK,CAAC;gBACzC;YACF;;IAEJ;AAEA,IAAA,UAAU,CAAC,KAAM,EAAA;AACf,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,KAAK;AAC9B,QAAA,IAAG,KAAK,EAAE,OAAO,EAAE;YACjB,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,2BAA2B,EAAE;QACpC;IACF;AAEA,IAAA,WAAW,CAAC,KAAK,EAAA;AACf,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;IAC9B;AAEA,IAAA,WAAW,CAAC,KAAU,EAAA;QACpB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;QAChD,IAAI,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC,EAAE;YAC5C,IAAI,cAAc,GAAG,KAAK;YAC1B,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,SAAS,KAAI;gBAClD,IAAI,SAAS,EAAE,MAAM,KAAK,KAAK,EAAE,MAAM,EAAE;AACvC,oBAAA,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;oBAC9B,cAAc,GAAG,IAAI;gBACvB;AACF,YAAA,CAAC,CAAC;YACF,IAAI,cAAc,EAAE;gBAClB;YACF;QACF;AACA,QAAA,QAAO,KAAK,EAAE,MAAM;AAClB,YAAA,KAAK,WAAW;AAChB,YAAA,KAAK,YAAY;AACf,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC5B;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;gBACtC;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC3B;AACF,YAAA,KAAK,qBAAqB;AACxB,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC5B;AACF,YAAA,KAAK,cAAc;gBACjB,IAAI,CAAC,gBAAgB,EAAE;gBACvB;AACF,YAAA,KAAK,mBAAmB;gBACtB,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC1C;AACF,YAAA,KAAK,WAAW;AACd,gBAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;oBAC5C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;AACxC,gBAAA,CAAC,CAAC;gBACF;AACF,YAAA;gBACE;;IAEN;IAEA,eAAe,CAAC,MAAc,EAAE,IAAS,EAAA;AACvC,QAAA,IAAI,CAAC,UAAU,EAAE,sBAAsB,EAAE,IAAI,CAAC;YAC5C,MAAM;AACN,YAAA,IAAI,EAAE,aAAa;YACnB,IAAI;AACJ,YAAA,IAAI,EAAC;AACN,SAAA,CAAC;IACJ;AAEA,IAAA,WAAW,CAAC,IAAS,EAAA;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;QACjC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC;IACtC;AAEA,IAAA,UAAU,CAAC,IAAS,EAAA;QAClB,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;IACvC;IAEA,2BAA2B,GAAA;QACzB,IAAI,CAAC,GAAG,CAAC,2BAA2B,EAAE,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AAC1D,YAAA,IAAI,CAAC,wBAAwB,GAAG,MAAM,CAAC,IAAI;AAC7C,QAAA,CAAC,CAAC;IACJ;IAEA,aAAa,GAAA;QACX,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AAClD,YAAA,OAAO,OAAO,CAAC,yGAAyG,CAAC;QAC3H;AACA,QAAA,OAAO,IAAI;IACb;AA1IW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,6KAcvB,6BAA6B,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAd9B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,oGCvBrC,ojCA6BA,EAAA,MAAA,EAAA,CAAA,khTAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAArB,uBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,WAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,cAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAqB,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDNa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,cAGhB,KAAK,EAAA,QAAA,EAAA,ojCAAA,EAAA,MAAA,EAAA,CAAA,khTAAA,CAAA,EAAA;;0BAgBd,MAAM;2BAAC,6BAA6B;;;AERrC,MAAO,yBAA0B,SAAQ,oBAAoB,CAAA;AA0C/D,IAAA,WAAA,CAC8B,QAA8B,EACxD,aAAqC,EACF,WAA4B,EACtD,kBAAsC,EACvC,cAA8B,EAC9B,UAAqB,EACM,UAA4B,EAC5C,MAAc,EAAA;QAEjC,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,CAAC;QAPnC,IAAA,CAAA,WAAW,GAAX,WAAW;QACrC,IAAA,CAAA,kBAAkB,GAAlB,kBAAkB;QACnB,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,UAAU,GAAV,UAAU;QACiB,IAAA,CAAA,UAAU,GAAV,UAAU;QAC1B,IAAA,CAAA,MAAM,GAAN,MAAM;AAhDrB,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,cAAc;QAC7B,IAAA,CAAA,SAAS,GAAG,aAAa;AAEvB,QAAA,IAAA,CAAA,WAAW,GAAG;AACnB,YAAA,EAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAC;AAC7B,YAAA,EAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAC;AACvC,YAAA,EAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAC;AACnC,YAAA,EAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAC;AACrC,YAAA,EAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAC;AACzC,YAAA,EAAC,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAC;AAC5C,YAAA,EAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAC;AAC3C,YAAA,EAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAC;AACrC,YAAA,EAAC,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,mBAAmB,EAAC;AACtD,YAAA,EAAC,KAAK,EAAE,oBAAoB,EAAE,IAAI,EAAE,mBAAmB,EAAC;AACxD,YAAA,EAAC,KAAK,EAAE,wBAAwB,EAAE,IAAI,EAAE,uBAAuB,EAAC;AAChE,YAAA,EAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC;SAC5B;AAED,QAAA,IAAA,CAAA,kBAAkB,GAAQ,IAAI,UAAU,EAAE;AAC1C,QAAA,IAAA,CAAA,aAAa,GAAQ;AACjB,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,EAAE,EAAE,EAAE;AACN,YAAA,SAAS,EAAE,EAAE;SAChB;AAEQ,QAAA,IAAA,CAAA,SAAS,GAAG;AACjB,YAAA,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAC;AAChC,YAAA,EAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,qBAAqB,EAAC;AACrD,YAAA,EAAC,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,EAAC;AACtD,YAAA,EAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAC;AACxC,YAAA,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAC;SACrC;AAEQ,QAAA,IAAA,CAAA,kBAAkB,GAAG;AAC1B,YAAA,EAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAC;AAC9C,YAAA,EAAC,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,mBAAmB,EAAC;SAC3D;QAED,IAAA,CAAA,YAAY,GAAG,iBAAiB;AAehC,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,QAAQ,KAA8B;YAC9C,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAC,CAAC;AAC3C,QAAA,CAAC;IAJD;IAMA,gBAAgB,GAAA;QACZ,IAAI,CAAC,eAAe,EAAE;AAEtB,QAAA,MAAM,wBAAwB,GAAG,CAAC,GAAG,KAAI;AACrC,YAAA,MAAM,KAAK,GAAG,GAAG,EAAE,IAAI,EAAE,eAAe;YACxC,IAAI,KAAK,EAAE;AACP,gBAAA,IAAInC,QAAM,CAAC,GAAG,EAAE,IAAI,EAAE,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;AACnD,oBAAA,OAAO,oBAAoB;gBAC/B;qBAAO;AACH,oBAAA,OAAO,KAAK;gBAChB;YACJ;iBAAO;AACH,gBAAA,OAAO,EAAE;YACb;AACJ,QAAA,CAAC;AAED,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa;AAGxC,QAAA,IAAI,YAAY,GAAG;AACf,YAAA;AACI,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,UAAU,EAAE,MAAM;AAClB,gBAAA,eAAe,EAAE,2BAA2B;gBAC5C,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;AACjD,gBAAA,YAAY,EAAE,sBAAsB;gBACpC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE;AACtE,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;oBACA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;gBACrC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,gBAAA,OAAO,EAAE;AACZ,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,KAAK,EAAE,YAAY;AACnB,gBAAA,UAAU,EAAE,UAAU;AACtB,gBAAA,KAAK,EAAE,GAAG;AACV,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACvC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,UAAU,EAAE,QAAQ;AACpB,gBAAA,KAAK,EAAE,GAAG;AACV,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACvC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,UAAU,EAAE,YAAY;AACxB,gBAAA,eAAe,EAAE,2BAA2B;gBAC5C,cAAc,EAAE,IAAI,CAAC,kBAAkB;AACvC,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,QAAQ,EAAE,IAAI;gBACd,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,gBAAA,SAAS,EAAE,yBAAyB;AACvC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,iBAAiB;AACxB,gBAAA,KAAK,EAAE,iBAAiB;AACxB,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,cAAc,EAAE,wBAAwB;AACxC,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACvC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,KAAK,EAAE,eAAe;AACtB,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,YAAY,EAAE,oBAAoB;AAClC,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACvC,aAAA;AACD,YAAA,IAAI,CAAC;SACR;AAED,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE;YACrC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,YAAY,CAAC;QACpE;AAEA,QAAA,OAAO,YAAY;IACvB;AAEA,IAAA,OAAO,CAAC,OAAqB,EAAE,IAAU,EAAE,IAAU,EAAA;;AAEjD,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI;AAC3C,QAAA,OAAO,KAAK,CAAC,YAAY,CAAC,iBAAiB,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI;AAClE,aAAA,IAAI,CAAC,CAAC,OAAY,KAAI;AACnB,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AACpC,QAAA,CAAC,CAAC;IACV;AAEQ,IAAA,WAAW,CAAC,OAAY,EAAA;QAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;;YAEzB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;QACjD;AACA,QAAA,OAAO,OAAO;IAClB;AAEQ,IAAA,gBAAgB,CAAC,OAAY,EAAA;QACjC,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;YAC5B,GAAG,CAAC,UAAU,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC;AAClD,YAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE;AAC7B,gBAAA,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC;YAC9C;AACA,YAAA,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC;AACrC,YAAA,OAAO,GAAG;AACd,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,iBAAiB,CAAC,IAAI,EAAA;AAClB,QAAA,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC;IACxC;AAGA,IAAA,MAAM,CAAC,QAAa,EAAA;QAChB,OAAO,QAAQ,CAAC,aAAa;IACjC;IAEA,WAAW,CAAC,GAAG,EAAE,IAAI,EAAA;QACjB,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AAC3C,QAAA,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,0CAA0C,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAClG,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,GAAC,MAAM,CAAC;AAC7C,QAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AAC9B,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;QAClC,OAAO,CAAC,KAAK,EAAE;AACf,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;IACtC;AAEA,IAAA,QAAQ,CAAC,MAAW,EAAA;AAChB,QAAA,MAAM,IAAI,GAAG;AACT,YAAA,QAAQ,EAAE,gBAAgB;AAC1B,YAAA,KAAK,EAAE,kBAAkB;AACzB,YAAA,OAAO,EAAE,CAAA,oMAAA,CAAsM;AAC/M,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,WAAW,EAAE,6BAA6B;AAC1C,YAAA,cAAc,EAAE;SACnB;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACpD,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,SAAS,EAAE,KAAK;AACnB,SAAA,CAAC;AACF,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC5D,YAAA,IAAI,MAAM,EAAE,SAAS,EAAE;gBACnB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA,gBAAA,EAAmB,MAAM,CAAC,EAAE,CAAA,UAAA,CAAY,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC7F,oBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,mBAAA,CAAqB,EACrB,CAAA,kEAAA,CAAoE,CACvE;AACD,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,gBAAA,CAAC,CAAC;YACN;iBAAO;AACH,gBAAA,OAAO,OAAO,CAAC,OAAO,EAAE;YAC5B;AACJ,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,UAAU,CAAC,MAAY,EAAA;;IAEvB;AA7OS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EA2CtB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAAf,sBAAA,EAAA,EAAA,EAAA,KAAA,EAEhB,iBAAiB,gGAIjB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAAF,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAjDpB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cAFtB,MAAM,EAAA,CAAA,CAAA;;4FAET,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BA4CQ,MAAM;2BAAC,gBAAgB;;0BAEvB,MAAM;2BAAC,iBAAiB;;0BAIxB,MAAM;2BAAC,iBAAiB;;;AC7D3B,MAAO,2BAA4B,SAAQ,iBAAiB,CAAA;IAQhE,WAAA,CACoB,GAA8B,EAC9C,aAAqC,EACrC,UAAqB,EACb,QAAwB,EAChC,aAAmC,EACA,UAA4B,EAAA;QAEjE,KAAK,CAAC,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC;QAP9C,IAAA,CAAA,GAAG,GAAH,GAAG;QAGX,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAEmB,IAAA,CAAA,UAAU,GAAV,UAAU;QAZjD,IAAA,CAAA,KAAK,GAAG,iBAAiB;QAEzB,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,wBAAwB,GAAU,EAAE;QACpC,IAAA,CAAA,eAAe,GAAG,KAAK;IAWvB;IAES,QAAQ,GAAA;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC;QAC5C,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;QACvC,KAAK,CAAC,QAAQ,EAAE;IAClB;IAES,WAAW,GAAA;QAClB,IAAI,CAAC,UAAU,EAAE;QACjB,KAAK,CAAC,WAAW,EAAE;IACrB;AAEA,IAAA,mBAAmB,CAAC,MAAc,EAAA;QAChC,QAAO,MAAM;AACX,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE;gBACrB;AACF,YAAA,KAAK,QAAQ;gBACX,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;oBAChD,OAAO,GAAG,CAAC,QAAQ;AACrB,gBAAA,CAAC,CAAC;AACF,gBAAA,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,GAAG,iBAAiB,GAAG,gBAAgB;AAC7E,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,KAAK,CAAC;gBACzC;YACF;;IAEJ;AAEA,IAAA,UAAU,CAAC,KAAM,EAAA;AACf,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,KAAK;AAC9B,QAAA,IAAG,KAAK,EAAE,OAAO,EAAE;YACjB,IAAI,CAAC,WAAW,EAAE;QACpB;IACF;AAEA,IAAA,WAAW,CAAC,KAAK,EAAA;AACf,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;IAC9B;AAEA,IAAA,WAAW,CAAC,KAAU,EAAA;QACpB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;QAChD,IAAI,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC,EAAE;YAC5C,IAAI,cAAc,GAAG,KAAK;YAC1B,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,SAAS,KAAI;gBAClD,IAAI,SAAS,EAAE,MAAM,KAAK,KAAK,EAAE,MAAM,EAAE;AACvC,oBAAA,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;oBAC9B,cAAc,GAAG,IAAI;gBACvB;AACF,YAAA,CAAC,CAAC;YACF,IAAI,cAAc,EAAE;gBAClB;YACF;QACF;AACA,QAAA,QAAO,KAAK,EAAE,MAAM;AAClB,YAAA,KAAK,WAAW;AAChB,YAAA,KAAK,YAAY;AACf,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC5B;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;gBACtC;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC3B;AACF,YAAA,KAAK,qBAAqB;AACxB,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC5B;AACF,YAAA,KAAK,cAAc;gBACjB,IAAI,CAAC,gBAAgB,EAAE;gBACvB;AACF,YAAA,KAAK,mBAAmB;gBACtB,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC1C;AACF,YAAA,KAAK,WAAW;AACd,gBAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;oBAC5C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;AACxC,gBAAA,CAAC,CAAC;gBACF;AACF,YAAA;gBACE;;IAEN;IAEA,eAAe,CAAC,MAAc,EAAE,IAAS,EAAA;AACvC,QAAA,IAAI,CAAC,UAAU,EAAE,sBAAsB,EAAE,IAAI,CAAC;YAC5C,MAAM;AACN,YAAA,IAAI,EAAE,gBAAgB;YACtB,IAAI;AACJ,YAAA,IAAI,EAAC;AACN,SAAA,CAAC;IACJ;AACA,IAAA,WAAW,CAAC,IAAS,EAAA;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;QACjC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC;IACtC;AAEA,IAAA,UAAU,CAAC,IAAS,EAAA;QAClB,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,gBAAgB,CAAC;IAC/C;IAEA,aAAa,GAAA;QACX,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AAClD,YAAA,OAAO,OAAO,CAAC,yGAAyG,CAAC;QAC3H;AACA,QAAA,OAAO,IAAI;IACb;AAjIW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,gLAc1B,iBAAiB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAdlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,oGCjBxC,+jCA6BA,EAAA,MAAA,EAAA,CAAA,snIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA8B,uBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,WAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,cAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAqB,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDZa,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBANvC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,cAGhB,KAAK,EAAA,QAAA,EAAA,+jCAAA,EAAA,MAAA,EAAA,CAAA,snIAAA,CAAA,EAAA;;0BAgBd,MAAM;2BAAC,iBAAiB;;;AE/B/B;;;;;;;;;;;;;;AAcE;MAgBW,yBAAyB,GAAG,IAAI,cAAc,CAAM,2BAA2B;MAK/E,kBAAkB,CAAA;AAoF3B,IAAA,WAAA,CACqC,eAAgC,EAC9B,WAA4B,EACvD,cAA8B,EACI,UAA4B,EAC9D,SAAwB,EACxB,iBAAoC,EACpC,MAAc,EAAA;QANW,IAAA,CAAA,eAAe,GAAf,eAAe;QACb,IAAA,CAAA,WAAW,GAAX,WAAW;QACtC,IAAA,CAAA,cAAc,GAAd,cAAc;QACoB,IAAA,CAAA,UAAU,GAAV,UAAU;QAC5C,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,MAAM,GAAN,MAAM;AAzFlB,QAAA,IAAA,CAAA,MAAM,GAAG;AACL,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE;SACV;QAED,IAAA,CAAA,QAAQ,GAAQ,EAAE;QAClB,IAAA,CAAA,cAAc,GAAQ,EAAE;QAExB,IAAA,CAAA,gBAAgB,GAAQ,EAAE;QAC1B,IAAA,CAAA,OAAO,GAAQ,EAAE;QACjB,IAAA,CAAA,WAAW,GAAQ,EAAE;QACrB,IAAA,CAAA,eAAe,GAAQ,EAAE;QACzB,IAAA,CAAA,cAAc,GAAG,KAAK;QACtB,IAAA,CAAA,oBAAoB,GAAG,KAAK;QAC5B,IAAA,CAAA,kBAAkB,GAAQ,EAAE;QAC5B,IAAA,CAAA,oBAAoB,GAAQ,EAAE;QAC9B,IAAA,CAAA,kBAAkB,GAAQ,EAAE;QAC5B,IAAA,CAAA,YAAY,GAAQ,EAAE;QACtB,IAAA,CAAA,oBAAoB,GAAQ,EAAE;QAC9B,IAAA,CAAA,gBAAgB,GAAQ,EAAE;QAC1B,IAAA,CAAA,cAAc,GAAG,KAAK;QACtB,IAAA,CAAA,cAAc,GAAG,KAAK;QACtB,IAAA,CAAA,YAAY,GAAQ,EAAE;QACtB,IAAA,CAAA,gBAAgB,GAAQ,EAAE;QAC1B,IAAA,CAAA,aAAa,GAAW,EAAE;QAC1B,IAAA,CAAA,cAAc,GAAW,EAAE;QAC3B,IAAA,CAAA,cAAc,GAAW,EAAE;QAC3B,IAAA,CAAA,cAAc,GAAQ,EAAE;QACxB,IAAA,CAAA,KAAK,GAAQ,EAAE;QACf,IAAA,CAAA,OAAO,GAAQ,EAAE;QACjB,IAAA,CAAA,eAAe,GAAG,oBAAoB;QACtC,IAAA,CAAA,WAAW,GAAG,mBAAmB;QACjC,IAAA,CAAA,MAAM,GAAQ,EAAE;QAChB,IAAA,CAAA,gBAAgB,GAAW,EAAE;QAE7B,IAAA,CAAA,iBAAiB,GAAW,EAAE;QAC9B,IAAA,CAAA,kBAAkB,GAAG,KAAK;QAC1B,IAAA,CAAA,YAAY,GAAG,KAAK;QACpB,IAAA,CAAA,iBAAiB,GAAQ,EAAE;QAC3B,IAAA,CAAA,oBAAoB,GAAQ,EAAE;QAC9B,IAAA,CAAA,qBAAqB,GAAQ,EAAE;QAC/B,IAAA,CAAA,yBAAyB,GAAQ,EAAE;QACnC,IAAA,CAAA,wBAAwB,GAAQ,EAAE;QAClC,IAAA,CAAA,0BAA0B,GAAG,CAAC;QAC9B,IAAA,CAAA,2BAA2B,GAAG,EAAE;QAChC,IAAA,CAAA,yBAAyB,GAAQ,EAAE;QACnC,IAAA,CAAA,4BAA4B,GAAQ,EAAE;QACtC,IAAA,CAAA,4BAA4B,GAAQ,EAAE;QACtC,IAAA,CAAA,8BAA8B,GAAG,CAAC;QAClC,IAAA,CAAA,+BAA+B,GAAG,EAAE;QACpC,IAAA,CAAA,wBAAwB,GAAG,KAAK;QAChC,IAAA,CAAA,gCAAgC,GAAG,KAAK;QACxC,IAAA,CAAA,4BAA4B,GAAG,KAAK;AAEpC,QAAA,IAAA,CAAA,qBAAqB,GAAG;AACpB,YAAA,UAAU,EAAE,WAAW;AACvB,YAAA,aAAa,EAAE;SAClB;AAED,QAAA,IAAA,CAAA,WAAW,GAAG;YACV,OAAO;YACP,OAAO;YACP,OAAO;SACV;AAED,QAAA,IAAA,CAAA,WAAW,GAAG;YACV,iBAAiB;YACjB,kBAAkB;YAClB;SACH;AAED,QAAA,IAAA,CAAA,YAAY,GAAiB,IAAI,YAAY,EAAE;AAG/C,QAAA,IAAA,CAAA,qCAAqC,GAAG,QAAQ,CAAC,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC;AACnG,QAAA,IAAA,CAAA,iCAAiC,GAAG,QAAQ,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC;QA2e3F,IAAA,CAAA,QAAQ,GAAG,EAAE;IAjeV;IAEH,aAAa,GAAA;AACT,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;AAC5B,QAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE;AAC9B,QAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE;AAC9B,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;AAC3B,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;IAC3B;AAEA,IAAA,IAAI,CAAC,QAAQ,EAAA;QACT,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,GAAQ,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC9D,QAAA,IAAI,IAAI;QACR,IAAI,QAAQ,EAAE;AACV,YAAA,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;QACtE;aAAO;AACH,YAAA,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC;QACxD;QAEA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,MAAW,KAAI;YACnC,MAAM,EAAE,GAAG,QAAQ,GAAG,QAAQ,CAAC,EAAE,IAAI,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,MAAM,EAAE,EAAE,CAAC;YACpE,IAAI,GAAG,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAI;gBAC7E,OAAO,OAAO,CAAC,IAAI;AACvB,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,eAAoB,KAAI;gBACpE,IAAI,CAAC,eAAe,EAAE;AAClB,oBAAA,OAAO,GAAG;gBACd;AACA,gBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,SAAA,EAAY,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA,CAAE,EAC9C,CAAA,aAAA,EAAgB,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA,UAAA,EAAa,QAAQ,CAAC,IAAI,CAAA,CAAE,CAC/E;AACD,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,gBAAA,OAAO,GAAG;AACd,YAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAI;AAChB,gBAAA,OAAO,KAAK;AAChB,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAI;YACd,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC;YAC3D,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,MAAA,EAAS,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAA,QAAA,CAAU,EACrD,YAAY,CACf;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,YAAA,MAAM,IAAI;AACd,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,4BAA4B,CAAC,UAAW,EAAA;AACpC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc;AAC9C,QAAA,MAAM,CAAC,KAAK,GAAG,CAAC;AAChB,QAAA,IAAI,CAAC,gCAAgC,GAAG,IAAI;QAC5C,MAAM,OAAO,GAAU,EAAE;AACzB,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;AACtB,YAAA,MAAM,CAAC,QAAQ,GAAG,KAAK;YACvB,OAAO,CAAC,IAAI,CAAC;AACT,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,UAAU,EAAE,qBAAqB;AACjC,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,IAAI,EAAE;AACT,aAAA,CAAC;QACN;AACA,QAAA,IAAI,CAAC,+BAA+B,GAAG,UAAU;QACjD,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,kBAAkB,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AAC3H,YAAA,IAAI,CAAC,yBAAyB,GAAG,MAAM,CAAC,IAAI;AAC5C,YAAA,IAAI,CAAC,8BAA8B,GAAG,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,UAAU,IAAI,CAAC;AAC7E,YAAA,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;gBAC9E,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM;gBACvD,MAAM,CAAC,IAAI,GAAG,oBAAoB,GAAG,MAAM,CAAC,EAAE;gBAC9C,OAAO,MAAM,CAAC,IAAI;AACtB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,IAAI,CAAC,8BAA8B,GAAG,CAAC,EAAE;gBACzC,IAAI,cAAc,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;gBAE5D,cAAc,GAAGnD,KAAG,CAAC,cAAc,EAAE,CAAC,SAAS,KAAI;AAC/C,oBAAA,QAAQ,KAAK,GAAG,SAAS;AAC7B,gBAAA,CAAC,CAAC;gBACF,cAAc,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7C,IAAI,QAAQ,GAAG,EAAE;gBACjB,cAAc,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;AACpC,oBAAA,IAAI,KAAK,GAAG,CAAC,EAAE;wBACX,QAAQ,IAAI,GAAG;oBACnB;oBACA,QAAQ,IAAI,KAAK;AACrB,gBAAA,CAAC,CAAC;AACF,gBAAA,MAAM,YAAY,GAAG;AACjB,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,KAAK,EAAE,cAAc;AACrB,oBAAA,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI;AAC/B,oBAAA,UAAU,EAAE,oBAAoB;AAChC,oBAAA,IAAI,EAAE;iBACT;AACD,gBAAA,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;AACtE,gBAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;AAChC,oBAAA,IAAI,EAAE,mBAAmB;oBACzB,IAAI,EAAE,iCAAiC,GAAG,QAAQ;AAClD,oBAAA,SAAS,EAAE,sBAAsB;;AAEjC,oBAAA,QAAQ,EAAE;AACb,iBAAA,CAAC;YACN;AACJ,QAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,gCAAgC,GAAG,KAAK;AACjD,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,wBAAwB,CAAC,UAAW,EAAA;AAChC,QAAA,IAAI,CAAC,4BAA4B,GAAG,IAAI;AACxC,QAAA,IAAI,CAAC,2BAA2B,GAAG,UAAU;AAC7C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc;AAC9C,QAAA,MAAM,CAAC,KAAK,GAAG,CAAC;AAChB,QAAA,MAAM,CAAC,IAAI,GAAG,WAAW;QACzB,MAAM,OAAO,GAAU,EAAE;AACzB,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;AACtB,YAAA,MAAM,CAAC,QAAQ,GAAG,KAAK;YACvB,OAAO,CAAC,IAAI,CAAC;AACT,gBAAA,QAAQ,EAAE,cAAc;AACxB,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,UAAU,EAAE,cAAc;AAC1B,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,IAAI,EAAE;AACT,aAAA,CAAC;QACN;QACA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AACtH,YAAA,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,IAAI;AACxC,YAAA,IAAI,CAAC,0BAA0B,GAAG,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,UAAU,IAAI,CAAC;AACzE,YAAA,IAAI,CAAC,yBAAyB,GAAGA,KAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,UAAU,KAAI;AAC5E,gBAAA,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC,OAAO;AAClG,gBAAA,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,GAAG,UAAU,GAAG,UAAU,CAAC,OAAO;gBAC1E,UAAU,CAAC,IAAI,GAAG,eAAe,GAAG,UAAU,CAAC,EAAE;gBACjD,OAAO,UAAU,CAAC,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC,OAAO;AAC9D,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,IAAI,CAAC,0BAA0B,GAAG,CAAC,EAAE;AACrC,gBAAA,MAAM,YAAY,GAAG;AACjB,oBAAA,QAAQ,EAAE,SAAS;AACnB,oBAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE;AACvB,oBAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;AACzB,oBAAA,UAAU,EAAE,SAAS;AACrB,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,IAAI,EAAE;iBACT;AACD,gBAAA,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;AACtE,gBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;AAC5B,oBAAA,IAAI,EAAE,mBAAmB;AACzB,oBAAA,IAAI,EAAE,uBAAuB,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE;AAChD,oBAAA,SAAS,EAAE,sBAAsB;;AAEjC,oBAAA,QAAQ,EAAE;AACb,iBAAA,CAAC;YACN;AACJ,QAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,4BAA4B,GAAG,KAAK;AAC7C,QAAA,CAAC,CAAC;IACN;IAEA,aAAa,CAAC,UAAU,EAAE,MAAM,EAAA;AAC5B,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;QAChC,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC;QAC5D,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;QAClD;IACJ;IAEA,aAAa,CAAC,UAAU,EAAE,MAAM,EAAA;AAC5B,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;QAChC,MAAM,cAAc,GAAG,IAAI,CAAC,4BAA4B,CAAC,UAAU,CAAC;QACpE,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;QAC3D;IACJ;IAEA,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAA;AAChC,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;QAChC,MAAM,kBAAkB,GAAG,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC;QACpE,MAAM,CAAC,QAAQ,CAAC,CAAC,eAAe,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;QAC1D;IACJ;AAEA,IAAA,cAAc,CAAC,SAAS,EAAA;QACpB,MAAM,QAAQ,GAAG,EAAE;QACnB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;AACzC,YAAA,UAAU,CAAC,OAAO,GAAG,SAAS;AAC9B,YAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;AACnE,QAAA,CAAC,CAAC;IACN;IAEA,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAA;AAClC,QAAA,MAAM,SAAS,GAAG,IAAIW,SAAO,EAAE;AAC/B,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC;AACvC,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAC7B,QAAO,IAAI;AACP,gBAAA;oBACI,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;;AAE5C,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,SAAS;IACpB;IAEA,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AACvE,YAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI;AAClC,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,UAAU,CAAC,OAAO,GAAG,EAAE,EAAE,IAAI,GAAG,CAAC,EAAA;AAC7B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAC1B,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;AACrC,QAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACpB,YAAA,MAAM,CAAC,QAAQ,GAAG,KAAK;QAC3B;AACA,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AACzE,YAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI;YAC1B,IAAI,CAAC,iBAAiB,EAAE;AAC5B,QAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC/B,QAAA,CAAC,CAAC;IACN;IAEA,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AACvE,YAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI;AAC9B,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,oBAAoB,CAAC,UAAW,EAAA;AAC5B,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI;QACpC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AACtF,YAAA,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,IAAI;AACpC,YAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE;AAC9B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;gBACnD,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG;gBACzC,GAAG,CAAC,IAAI,GAAG,WAAW,GAAG,GAAG,CAAC,EAAE;AAC/B,gBAAA,OAAO,GAAG;AACd,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,wBAAwB,GAAG,KAAK;AACzC,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,YAAY,CAAC,UAAU,EAAA;AACnB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACtE,YAAA,OAAO,MAAM;AACjB,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAI;AAClB,YAAA,IAAI,GAAG;AACP,YAAA,IAAI,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AAC3B,gBAAA,GAAG,GAAG,QAAQ,EAAE,KAAK;YACzB;iBAAO;gBACH,GAAG,GAAG,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM;YAC/C;AACA,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,yBAAA,CAA2B,EAC3B,GAAG,CACN;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,iBAAiB,CAAC,SAAU,EAAA;AACxB,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAAI;AAClD,YAAA,OAAO,MAAM,CAAC,YAAY,KAAK,IAAI,CAAC,oBAAoB;AAC5D,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,cAAc,GAAG;AACnB,YAAA;AACI,gBAAA,IAAI,EAAE,kBAAkB;AACxB,gBAAA,EAAE,EAAE;AACP;SACJ;AACD,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,cAAc,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC;QACnE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;YACpC,IAAI,IAAI,CAAC,oBAAoB,KAAK,UAAU,CAAC,EAAE,EAAE;AAC7C,gBAAA,IAAI,CAAC,kBAAkB,GAAG,UAAU;YACxC;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE;AACrC,YAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,SAAS,GAAG,EAAE;QAChF;AACA,QAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;IACjC;IAEA,mBAAmB,GAAA;AACf,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;QACtB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,eAAe,KAAI;AACrC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,IAAG;AACrD,gBAAA,OAAO,eAAe,CAAC,EAAE,IAAI,QAAQ;AACzC,YAAA,CAAC,CAAC;YACF,IAAI,SAAS,EAAE;gBACX,eAAe,CAAC,IAAI,GAAG,WAAW,GAAG,eAAe,CAAC,EAAE;AACvD,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC;gBACvC,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;YAC9C;AACJ,QAAA,CAAC,CAAC;IACN;IAEA,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,cAAc;AAC1C,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,GAAG,oBAAoB,GAAG,oBAAoB;AACxF,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;;QAEzB;IACJ;IAEA,MAAM,YAAY,CAAC,aAAa,EAAA;AAC5B,QAAA,IAAI,QAAQ;AACZ,QAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE;AACrC,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE;gBACxB;YACJ;AACA,YAAA,MAAM,SAAS,GAAQ;gBACnB,YAAY,EAAE,IAAI,CAAC,oBAAoB;gBACvC,IAAI,EAAE,IAAI,CAAC,UAAU;gBACrB,IAAI,EAAE,IAAI,CAAC;aACd;AACD,YAAA,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC;AACtE,YAAA,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS;AACvC,iBAAA,IAAI,CAAC,CAAC,MAAM,KAAI;AACb,gBAAA,MAAM,GAAG,GAAG,MAAM,EAAE,IAAI;gBACxB,SAAS,CAAC,EAAE,GAAG,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE;gBACxD,SAAS,CAAC,IAAI,GAAG,WAAW,GAAG,SAAS,CAAC,EAAE;gBAC3C,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAC,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,CAAC,YAAY,EAAC;gBAC9H,OAAO,SAAS,CAAC,EAAE;AACvB,YAAA,CAAC;AACA,iBAAA,KAAK,CAAC,CAAC,MAAM,KAAI;gBACd,MAAM,UAAU,GAAG,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;AACrD,gBAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;AACtB,oBAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,IAAI;gBACxC;gBACA,MAAM,YAAY,GAAG,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM;AACxD,gBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,qBAAA,CAAuB,EACvB,YAAY,CACf;AACD,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,gBAAA,OAAO,SAAS;AACpB,YAAA,CAAC,CAAC;AACN,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AACpB,gBAAA,IAAI,CAAC,YAAY,GAAG,KAAK;gBACzB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;AACpC,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;gBACjC,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;gBAC1C,IAAI,CAAC,UAAU,EAAE;AACjB,gBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,mBAAA,CAAqB,EACrB,CAAA,WAAA,EAAc,IAAI,CAAC,aAAa,CAAA,6CAAA,CAA+C,CAClF;AACD,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,gBAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACvB,gBAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE;AAC9B,gBAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,gBAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,gBAAA,IAAI,CAAC,YAAY,EAAE,qBAAqB,EAAE;gBAC1C;YACJ;QACJ;aAAO;YACH,IAAI,WAAW,GAAG,KAAK;YACvB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AACvC,gBAAA,IAAI,QAAQ,KAAK,aAAa,EAAE;oBAC5B,WAAW,GAAG,IAAI;gBACtB;AACJ,YAAA,CAAC,CAAC;YACF,IAAI,CAAC,WAAW,EAAE;AACd,gBAAA,IAAI,SAAS;gBACb,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AAC5B,oBAAA,IAAI,MAAM,CAAC,EAAE,KAAK,aAAa,EAAE;wBAC7B,SAAS,GAAG,MAAM;oBACtB;AACJ,gBAAA,CAAC,CAAC;gBACF,IAAI,SAAS,EAAE;oBACX,SAAS,CAAC,IAAI,GAAG,WAAW,GAAG,SAAS,CAAC,EAAE;AAC3C,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;oBACjC,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;gBAC9C;gBACA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC;AACzC,gBAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE;AAC9B,gBAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,gBAAA,IAAI,CAAC,YAAY,GAAG,KAAK;YAC7B;iBAAO;AACH,gBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,MAAM,EACN,CAAA,uBAAA,CAAyB,EACzB,kDAAkD,CACrD;AACD,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;YACzC;QACJ;IACJ;AAEA,IAAA,YAAY,CAAC,cAAc,EAAA;AACvB,QAAA,IAAI,cAAc,CAAC,EAAE,EAAE;AACnB,YAAA,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,IAAG;AACxD,gBAAA,OAAO,QAAQ,KAAK,cAAc,CAAC,EAAE;AACzC,YAAA,CAAC,CAAC;YACF,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,KAAI;AACxD,gBAAA,OAAO,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,IAAI;AAC9C,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,UAAU;AAClC,YAAA,IAAI,CAAC,YAAY,GAAG,cAAc;AAClC,YAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,IAAI,cAAc,CAAC,IAAI,KAAK,IAAI,CAAC,kBAAkB,EAAE;AACxF,gBAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,gBAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE;YAClC;QACJ;IACJ;AAEA,IAAA,MAAM,aAAa,CAAC,SAAS,GAAG,IAAI,EAAA;QAChC,IAAI,cAAc,GAAQ,EAAE;AAC5B,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC,UAAU;AACzD,QAAA,IAAI,IAAI;QACR,IAAI,WAAW,GAAG,mBAAmB;AACrC,QAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE;AACrC,YAAA,IAAI,CAAC,cAAc,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;QACvF;AAAO,aAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE;YAC5C,IAAI,GAAG,EAAE;AACT,YAAA,IAAI,CAAC,cAAc,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;YACnF,WAAW,GAAG,mBAAmB;;AAEjC,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QAC5B;AAAO,aAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;YAC9B,WAAW,GAAG,mBAAmB;YACjC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;gBACpC,IAAI,IAAI,CAAC,gBAAgB,KAAK,MAAM,CAAC,EAAE,EAAE;oBACrC,cAAc,GAAG,MAAM;gBAC3B;AACJ,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,GAAG,cAAc,EAAE,IAAI,IAAI,EAAE;AACjC,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QAC5B;aAAO;AACH,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;QAC7B;AACA,QAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE;AACrC,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAClB,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YAC1B;iBAAO;gBACH,KAAK,CAAC,MAAK;AACP,oBAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC;AACrC,gBAAA,CAAC,CAAC;YACN;QACJ;;AAEA,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;IAClC;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;QAChB,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI;QAC9B;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IAC/B;IAEA,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,QAAA,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,EAAE,IAAI,CAAC;AACxE,QAAA,IAAI,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,IAAI;QACpC;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;IACrC;AAEA,IAAA,IAAI,yBAAyB,GAAA;AACzB,QAAA,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,IAAI,IAAI,CAAC,8BAA8B,GAAG,CAAC;IACpG;AAEA,IAAA,IAAI,qBAAqB,GAAA;AACrB,QAAA,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,IAAI,IAAI,CAAC,0BAA0B,GAAG,CAAC;IAC5F;IAGA,IAAI,OAAO,CAAC,IAAI,EAAA;AACZ,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACxB;AAEA,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,MAAM,IAAI,GAAQ;AACd,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE;AAC/B,YAAA,cAAc,EAAE,IAAI,CAAC,QAAQ,EAAE,cAAc,IAAI,EAAE;AACnD,YAAA,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,EAAE;AACrC,YAAA,kBAAkB,EAAE,IAAI,CAAC,QAAQ,EAAE,kBAAkB;AACrD,YAAA,kBAAkB,EAAE,IAAI,CAAC,QAAQ,EAAE,kBAAkB,IAAI,EAAE;AAC3D,YAAA,iBAAiB,EAAE,IAAI,CAAC,QAAQ,EAAE,iBAAiB,IAAI,CAAC;AACxD,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI;SAChC;AACD,QAAA,OAAO,IAAI;IACf;AAEA,IAAA,sBAAsB,CAAC,EAAE,EAAA;QACrB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,aAAa,GAAG,EAAE,CAAC,CAAC;IAC9C;AAEA,IAAA,IAAI,CAAC,MAAM,EAAE,QAAQ,GAAE,KAAK,EAAA;AACxB,QAAA,MAAM,cAAc,GAAG,EAAC,MAAM,EAAE,QAAQ,EAAC;QACzC,IAAI,CAAC,wBAAwB,EAAE;IACnC;IAEA,eAAe,GAAA;QACX,IAAI,IAAI,GAAG,EAAE;AACb,QAAA,IAAI,MAAM,CAAC,YAAY,EAAE;YACrB,IAAI,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC,QAAQ,EAAE;QAC3C;AACA,QAAA,OAAO,IAAI,EAAE,MAAM,GAAG,CAAC;IAC3B;AA9lBS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAqFf,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAChB,iBAAiB,wCAEjB,yBAAyB,EAAA,EAAA,EAAA,KAAA,EAAAuB,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAkB,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAxF5B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFf,MAAM,EAAA,CAAA,CAAA;;4FAET,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAsFQ,MAAM;2BAAC,gBAAgB;;0BACvB,MAAM;2BAAC,iBAAiB;;0BAExB,MAAM;2BAAC,yBAAyB;;;4BC3H5B,aAAa,CAAA;AAA1B,IAAA,WAAA,GAAA;QACI,IAAA,CAAA,IAAI,GAAG,EAAE;QACT,IAAA,CAAA,YAAY,GAAU,EAAE;QACxB,IAAA,CAAA,aAAa,GAAU,EAAE;QACzB,IAAA,CAAA,iBAAiB,GAAU,EAAE;QAC7B,IAAA,CAAA,QAAQ,GAAG,OAAO;QAClB,IAAA,CAAA,IAAI,GAAG,MAAM;QACb,IAAA,CAAA,IAAI,GAAQ,EAAE;IAClB;AAAC;AAAA;;MCIY,gCAAgC,GAAG,IAAI,cAAc,CAAM,kCAAkC;MAK7F,wBAAwB,CAAA;AAqBjC,IAAA,WAAA,CACqC,eAAgC,EAC9B,WAA4B,EACvD,cAA8B,EACW,UAA4B,EAAA;QAH5C,IAAA,CAAA,eAAe,GAAf,eAAe;QACb,IAAA,CAAA,WAAW,GAAX,WAAW;QACtC,IAAA,CAAA,cAAc,GAAd,cAAc;QAC2B,IAAA,CAAA,UAAU,GAAV,UAAU;QAvB/D,IAAA,CAAA,oBAAoB,GAAQ,EAAE;QAC9B,IAAA,CAAA,uBAAuB,GAAQ,EAAE;QACjC,IAAA,CAAA,uBAAuB,GAAQ,EAAE;QACjC,IAAA,CAAA,2BAA2B,GAAQ,EAAE;QACrC,IAAA,CAAA,kBAAkB,GAAQ,EAAE;QAC5B,IAAA,CAAA,sBAAsB,GAAQ,EAAE;QAEhC,IAAA,CAAA,yBAAyB,GAAQ,EAAE;QACnC,IAAA,CAAA,0BAA0B,GAAQ,EAAE;QACpC,IAAA,CAAA,yBAAyB,GAAQ,EAAE;QAEnC,IAAA,CAAA,uBAAuB,GAAQ,EAAE;QACjC,IAAA,CAAA,sBAAsB,GAAQ,EAAE;QAChC,IAAA,CAAA,sBAAsB,GAAQ,EAAE;QAEhC,IAAA,CAAA,qBAAqB,GAAQ,EAAE;QAC/B,IAAA,CAAA,sBAAsB,GAAQ,EAAE;QAChC,IAAA,CAAA,qBAAqB,GAAQ,EAAE;QAgLvB,IAAA,CAAA,gCAAgC,GAAG,CAAC;QAsBpC,IAAA,CAAA,+BAA+B,GAAG,CAAC;QA6BnC,IAAA,CAAA,+BAA+B,GAAG,CAAC;IA5NxC;AAEH,IAAA,IAAI,CAAC,QAAQ,EAAA;QACT,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,GAAQ,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACpE,QAAA,MAAM,GAAG,GAAG,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AACnH,QAAA,OAAO,GAAG,CAAC,kBAAkB,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,MAAW,KAAI;YACzE,MAAM,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,QAAQ,CAAC,EAAE;YAC1C,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,kBAAkB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,KAAI;gBAC3F,OAAO,UAAU,CAAC,IAAI;AAC1B,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,eAAoB,KAAI;AACvE,gBAAA,MAAM,SAAS,GAAG;AACd,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;iBAC1B;AACD,gBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,eAAA,EAAkB,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA,CAAE,EACpD,CAAA,aAAA,EAAgB,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA,iBAAA,EAAoB,QAAQ,CAAC,IAAI,CAAA,CAAE,CACtF;AACD,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,gBAAA,OAAO,SAAS;AACpB,YAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAI;AAChB,gBAAA,OAAO,KAAK;AAChB,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAI;YACd,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC;YAC3D,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,MAAA,EAAS,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAA,eAAA,CAAiB,EAC5D,YAAY,CACf;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,YAAA,MAAM,IAAI;AACd,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,2BAA2B,CAAC,EAAE,EAAA;QAC1B,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,kBAAkB,EAAE,EAAE,EAAE,UAAU,EAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AACjH,YAAA,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,IAAI;AACrC,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;gBAC9D,OAAO,GAAG,CAAC,IAAI;AACnB,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,2BAA2B,CAAC,EAAE,EAAA;QAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,kBAAkB,EAAE,EAAE,EAAE,YAAY,EAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AAC1H,YAAA,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,IAAI;AACvC,YAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,KAAK,KAAI;gBACnE,OAAO,KAAK,CAAC,IAAI;AACrB,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,8BAA8B,CAAC,EAAE,EAAA;AAC7B,QAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,kBAAkB,EAAE,EAAE,EAAE,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AACvF,YAAA,IAAI,CAAC,uBAAuB,GAAG,MAAM,CAAC,IAAI;AAC1C,YAAA,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,YAAY,KAAI;gBACjF,OAAO,YAAY,CAAC,IAAI;AAC5B,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,gCAAgC,CAAC,cAAc,EAAE,eAAe,EAAE,QAAQ,GAAG,OAAO,EAAA;AAChF,QAAA,IAAI,CAAC,sBAAsB,GAAG,EAAE;AAChC,QAAA,IAAI,OAAO,CAAC,cAAc,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,sBAAsB,GAAG,CAAC,GAAG,eAAe,CAAC;AAClD,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,cAAc,EAAE,QAAQ,CAAC;AACxE,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc;AAC9C,QAAA,MAAM,CAAC,QAAQ,GAAG,KAAK;AACvB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AAC1E,YAAA,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,IAAI;AACrC,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;gBAC9D,OAAO,GAAG,CAAC,IAAI;AACnB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,sBAAsB,GAAG,CAAC,GAAG,IAAI,CAAC,sBAAsB,EAAE,GAAG,eAAe,CAAC;YAClF,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC;YACjE,IAAI,CAAC,sBAAsB,GAAG,UAAU,CAAC,IAAI,CAAC,sBAAsB,CAAC;AACrE,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,KAAK,SAAS,CAAC;YAC5F,OAAO,IAAI,CAAC,kBAAkB;AAClC,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,kCAAkC,CAAC,cAAc,EAAE,eAAe,EAAE,QAAQ,GAAG,OAAO,EAAA;AAClF,QAAA,IAAI,CAAC,uBAAuB,GAAG,EAAE;AACjC,QAAA,IAAI,OAAO,CAAC,cAAc,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,uBAAuB,GAAG,CAAC,GAAG,eAAe,CAAC;YACnD;QACJ;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,cAAc,EAAE,QAAQ,CAAC;AACxE,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc;AAC9C,QAAA,MAAM,CAAC,QAAQ,GAAG,KAAK;AACvB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AACrE,YAAA,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,IAAI;AACvC,YAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;gBACjE,OAAO,GAAG,CAAC,IAAI;AACnB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,uBAAuB,GAAG,CAAC,GAAG,IAAI,CAAC,uBAAuB,EAAE,GAAG,eAAe,CAAC;YACpF,IAAI,CAAC,uBAAuB,GAAG,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC;YACnE,IAAI,CAAC,uBAAuB,GAAG,UAAU,CAAC,IAAI,CAAC,uBAAuB,CAAC;AACvE,YAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,KAAK,SAAS,CAAC;AAClG,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,qCAAqC,CAAC,cAAc,EAAE,eAAe,EAAE,QAAQ,GAAG,OAAO,EAAA;AACrF,QAAA,IAAI,CAAC,2BAA2B,GAAG,EAAE;AACrC,QAAA,IAAI,OAAO,CAAC,cAAc,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,2BAA2B,GAAG,CAAC,GAAG,eAAe,CAAC;YACvD;QACJ;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,cAAc,EAAE,QAAQ,CAAC;AACxE,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc;AAC9C,QAAA,MAAM,CAAC,QAAQ,GAAG,KAAK;AACvB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AACzE,YAAA,IAAI,CAAC,uBAAuB,GAAG,MAAM,CAAC,IAAI;AAC1C,YAAA,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,YAAY,KAAI;gBACjF,OAAO,YAAY,CAAC,IAAI;AAC5B,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,2BAA2B,GAAG,CAAC,GAAG,IAAI,CAAC,2BAA2B,EAAE,GAAG,eAAe,CAAC;YAC5F,IAAI,CAAC,2BAA2B,GAAG,UAAU,CAAC,IAAI,CAAC,2BAA2B,CAAC;AACnF,QAAA,CAAC,CAAC;IACN;IAEA,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,EAAA;AACxC,QAAA,MAAM,SAAS,GAAG,IAAIC,eAAa,EAAE;AACrC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC;AACvC,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAC7B,QAAO,IAAI;AACP,gBAAA;oBACI,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;;AAE5C,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,SAAS;IACpB;AAEA,IAAA,eAAe,CAAC,GAAG,EAAA;AACf,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC;AAClC,QAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,WAAA,CAAa,EACb,CAAA,gCAAA,CAAkC,CACrC;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACzC;AAEA,IAAA,gBAAgB,CAAC,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAA;QAC/D,MAAM,uBAAuB,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;YACxD,OAAO,GAAG,GAAG,IAAI;AACrB,QAAA,CAAC,CAAC;QACF,MAAM,wBAAwB,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AAC1D,YAAA,OAAO,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC;AACxC,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,CAAC,GAAG,uBAAuB,EAAE,GAAG,wBAAwB,CAAC;IACpE;IAEO,wBAAwB,GAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,yBAAyB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC3E,YAAA,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,IAAI;AACxC,YAAA,OAAO,MAAM;AACjB,QAAA,CAAC,CAAC;IACN;AAIO,IAAA,0BAA0B,CAAC,MAAe,EAAA;AAC7C,QAAA,MAAM,SAAS,GAAG,EAAE,IAAI,CAAC,gCAAgC;AACzD,QAAA,MAAM,MAAM,GAAG,EAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAC;QACxG,MAAM,OAAO,GAAG,EAAE;AAClB,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAClB,OAAO,CAAC,IAAI,CAAC,EAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAC,CAAC;QAC5G;AACA,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACvE,YAAA,IAAI,SAAS,KAAK,IAAI,CAAC,gCAAgC,EAAE;gBACrD,OAAO,IAAI,CAAC,uBAAuB;YACvC;YACA,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAI;gBACjD,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,EAAE;gBAC5D,OAAO,QAAQ,CAAC,IAAI;AACxB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,uBAAuB,GAAG,eAAe;AAC9C,YAAA,OAAO,eAAe;AAC1B,QAAA,CAAC,CAAC;IACN;AAIO,IAAA,yBAAyB,CAAC,MAAe,EAAA;AAC5C,QAAA,MAAM,SAAS,GAAG,EAAE,IAAI,CAAC,+BAA+B;AACxD,QAAA,MAAM,MAAM,GAAG,EAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAC;QACxG,MAAM,OAAO,GAAG,EAAE;AAClB,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAClB,OAAO,CAAC,IAAI,CAAC,EAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAC,CAAC;QAC5G;AACA,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACrE,YAAA,IAAI,SAAS,KAAK,IAAI,CAAC,+BAA+B,EAAE;gBACpD,OAAO,IAAI,CAAC,sBAAsB;YACtC;YACA,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,KAAI;gBAChD,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE;gBACzD,OAAO,OAAO,CAAC,IAAI;AACvB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,sBAAsB,GAAG,eAAe;AAC7C,YAAA,OAAO,eAAe;AAC1B,QAAA,CAAC,CAAC;IACN;IAEO,yBAAyB,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,0BAA0B,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC5E,YAAA,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,IAAI;AACzC,YAAA,OAAO,MAAM;AACjB,QAAA,CAAC,CAAC;IACN;AAIO,IAAA,yBAAyB,CAAC,MAAe,EAAA;AAC5C,QAAA,MAAM,SAAS,GAAG,EAAE,IAAI,CAAC,+BAA+B;AACxD,QAAA,MAAM,MAAM,GAAG,EAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAC;QACxG,MAAM,OAAO,GAAG,EAAE;AAClB,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAClB,OAAO,CAAC,IAAI,CAAC,EAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAC,CAAC;QAC5G;AACA,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC3E,YAAA,IAAI,SAAS,KAAK,IAAI,CAAC,+BAA+B,EAAE;gBACpD,OAAO,IAAI,CAAC,sBAAsB;YACtC;YACA,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,YAAY,KAAI;gBACrD,IAAI,CAAC,yBAAyB,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,EAAE;gBACnE,OAAO,YAAY,CAAC,IAAI;AAC5B,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,sBAAsB,GAAG,eAAe;AAC7C,YAAA,OAAO,eAAe;AAC1B,QAAA,CAAC,CAAC;IACN;AAEA;;;;AAIG;AACI,IAAA,yBAAyB,CAAC,QAAa,EAAA;QAC1C,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,mBAAmB,EAAE,IAAI,CAAC,yBAAyB,CAAC;QACvF,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,IAAI,CAAC,0BAA0B,CAAC;QACzF,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,wBAAwB,EAAE,IAAI,CAAC,yBAAyB,CAAC;IAChG;IAEQ,mBAAmB,CAAC,QAAa,EAAE,kBAAuB,EAAA;QAC9D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAC1B;QACJ;AACA,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAU,KAAI;AAC5B,YAAA,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI;AACxB,YAAA,MAAM,EAAE,GAAG,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS;YACzF,IAAI,CAAC,EAAE,EAAE;gBACL;YACJ;AACA,YAAA,IAAI,WAAW,GAAG,KAAK,EAAE,IAAI;YAC7B,IAAI,CAAC,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;gBACjD;YACJ;YACA,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AAC/B,gBAAA,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YACtC;AACA,YAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAE;AAClC,gBAAA,kBAAkB,CAAC,WAAW,CAAC,GAAG,EAAE;YACxC;AACJ,QAAA,CAAC,CAAC;IACN;AA5SS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAsBrB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAChB,iBAAiB,wCAEjB,gCAAgC,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAzBnC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cAFrB,MAAM,EAAA,CAAA,CAAA;;4FAET,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAuBQ,MAAM;2BAAC,gBAAgB;;0BACvB,MAAM;2BAAC,iBAAiB;;0BAExB,MAAM;2BAAC,gCAAgC;;;AC1ChD;;;;;;;;;;;;;;AAcE;AA6BI,MAAO,mBAAoB,SAAQ,oBAAoB,CAAA;AAmCzD,IAAA,WAAA,CAC8B,QAA8B,EACxD,aAAqC,EACF,WAA4B,EACtD,kBAAsC,EACvC,cAA8B,EAC9B,UAAqB,EACyB,gBAAkC,EACrE,MAAc,EACzB,oBAA8C,EAAA;QAEtD,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,CAAC;QARzC,IAAA,CAAA,WAAW,GAAX,WAAW;QACrC,IAAA,CAAA,kBAAkB,GAAlB,kBAAkB;QACnB,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,UAAU,GAAV,UAAU;QACoC,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QACnD,IAAA,CAAA,MAAM,GAAN,MAAM;QACjB,IAAA,CAAA,oBAAoB,GAApB,oBAAoB;AA1CxB,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,cAAc;QAC7B,IAAA,CAAA,SAAS,GAAG,SAAS;AAEnB,QAAA,IAAA,CAAA,WAAW,GAAG;AACnB,YAAA,EAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAC;AAC7B,YAAA,EAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC;AACzB,YAAA,EAAC,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,oBAAoB,EAAC;AAC1D,YAAA,EAAC,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,oBAAoB,EAAC;AAC1D,YAAA,EAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAC;SAC3C;QAED,IAAA,CAAA,WAAW,GAAG,EAAE;AAChB,QAAA,IAAA,CAAA,eAAe,GAAQ,IAAI1C,SAAO,EAAE;AACpC,QAAA,IAAA,CAAA,aAAa,GAAQ;AACjB,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,EAAE,EAAE,EAAE;AACN,YAAA,SAAS,EAAE,EAAE;SAChB;QACD,IAAA,CAAA,cAAc,GAAU,EAAE;QAC1B,IAAA,CAAA,sBAAsB,GAAU,EAAE;AACzB,QAAA,IAAA,CAAA,SAAS,GAAG;AACjB,YAAA,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAC;AAChC,YAAA,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAC;SACrC;AAEQ,QAAA,IAAA,CAAA,kBAAkB,GAAG;AAC1B,YAAA,EAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAC;AAC9C,YAAA,EAAC,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,mBAAmB,EAAC;SAC3D;QAED,IAAA,CAAA,YAAY,GAAG,UAAU;QAChB,IAAA,CAAA,QAAQ,GAAG,oBAAoB;AAgBxC,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,QAAQ,KAA8B;YAC9C,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAC,CAAC;AAC3C,QAAA,CAAC;IAJD;IAMA,gBAAgB,GAAA;AACZ,QAAA,MAAM,aAAa,GAAG,CAAC,GAAG,KAAI;YAC1B,IAAI,KAAK,GAAG,EAAE;YACd,GAAG,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC,IAAI,KAAI;AACxC,gBAAA,KAAK,IAAI,uBAAuB,GAAC,IAAI,GAAC,QAAQ;AAClD,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,KAAK;AAChB,QAAA,CAAC;QACD,MAAM,IAAI,GAAG,IAAI;AACjB,QAAA,MAAM,iCAAiC,GAAG;AACtC,YAAA,UAAU,EAAE,WAAW;AACvB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,mBAAmB,EAAE,KAAK;YAC1B,iBAAiB,EAAE,MAAK;gBACpB,OAAO,IAAI,CAAC,cAAc;YAC9B,CAAC;YACD,kBAAkB,EAAE,MAAK;AACrB,gBAAA,OAAO,EAAE;YACb,CAAC;YACD,yBAAyB,EAAE,MAAK;gBAC5B,OAAO,IAAI,CAAC,sBAAsB;YACtC,CAAC;YACD,0BAA0B,EAAE,MAAK;AAC7B,gBAAA,OAAO,EAAE;YACb,CAAC;AACD,YAAA,yBAAyB,EAAE,CAAC,UAAU,KAAI;AACtC,gBAAA,IAAI,CAAC,sBAAsB,GAAG,UAAU;YAC5C,CAAC;AACD,YAAA,0BAA0B,EAAE,CAAC,UAAU,KAAI;;YAE3C,CAAC;YACD,qBAAqB,EAAE,MAAK;AACxB,gBAAA,OAAO,EAAE;YACb;SACH;QACD,OAAO;AACH,YAAA;AACI,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,UAAU,EAAE,MAAM;AAClB,gBAAA,eAAe,EAAE,2BAA2B;gBAC5C,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;AACjD,gBAAA,YAAY,EAAE,sBAAsB;AACpC,gBAAA,kBAAkB,EAAE,EAAE,QAAQ,EAAE,oBAAoB,EAAE;AACtD,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;AACA,oBAAA,IAAI,CAAC,WAAW,GAAG,UAAU;oBAC7B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,KAAK,EAAE,GAAG;AACb,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,gBAAgB;AACvB,gBAAA,KAAK,EAAE,gBAAgB;AACvB,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,iCAAiC;AACxD,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;AACA,oBAAA,IAAI,CAAC,WAAW,GAAG,EAAE;oBACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;gBACf,YAAY,EAAE,IAAI,CAAC,aAAa;AAChC,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,MAAM,EAAE,KAAK;AAChB,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,UAAU,EAAE,YAAY;AACxB,gBAAA,eAAe,EAAE,2BAA2B;gBAC5C,cAAc,EAAE,IAAI,CAAC,kBAAkB;AACvC,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,QAAQ,EAAE,IAAI;gBACd,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;AACA,oBAAA,IAAI,CAAC,WAAW,GAAG,EAAE;oBACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,CAAC;AACJ,aAAA;AACD,YAAA,IAAI,CAAC;SACR;IACL;AAEA,IAAA,OAAO,CAAC,OAAqB,EAAE,IAAU,EAAE,IAAU,EAAA;;AAEjD,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI;AAC3C,QAAA,OAAO,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI;AAC3D,aAAA,IAAI,CAAC,CAAC,OAAY,KAAI;AACnB,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AACpC,QAAA,CAAC,CAAC;IACV;AAEQ,IAAA,WAAW,CAAC,OAAY,EAAA;QAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;;YAEzB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;QACjD;QACA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE;YACrC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,UAAU;QACzD;AACA,QAAA,OAAO,OAAO;IAClB;AAEQ,IAAA,gBAAgB,CAAC,OAAY,EAAA;QACjC,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;YAC5B,GAAG,CAAC,UAAU,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACrC,YAAA,OAAO,GAAG;AACd,QAAA,CAAC,CAAC;IACN;IAEO,wBAAwB,GAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,yBAAyB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AAChF,YAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,IAAI;AACjC,YAAA,OAAO,MAAM;AACjB,QAAA,CAAC,CAAC;IACN;IAEO,0BAA0B,GAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;YAC9D,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAI;gBACjD,OAAO,QAAQ,CAAC,IAAI;AACxB,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,eAAe;AAC1B,QAAA,CAAC,CAAC;IACN;IAEO,yBAAyB,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,0BAA0B,EAAE,EAAE,EAAE,EAAE,CAAC;IACnE;IAEO,aAAa,GAAA;AAChB,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,kBAAkB,CAAC;IACjD;IAEO,YAAY,CAAC,EAAE,GAAG,EAAE,EAAA;QACvB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA,mBAAA,EAAsB,EAAE,CAAA,CAAE,CAAC;IACzD;AAEO,IAAA,UAAU,CAAC,IAAU,EAAA;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;QAC1B,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,EAAE;AAChC,YAAA,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC;QACzC;aAAO;AACH,YAAA,IAAI,CAAC,eAAe,GAAG,IAAIA,SAAO,EAAE;QACxC;AACA,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;IAC7B;AAEA,IAAA,wBAAwB,CAAC,aAAa,EAAA;QAClC,MAAM,QAAQ,GAAG,EAAE;QACnB,MAAM,QAAQ,GAAG,EAAE;AACnB,QAAA,MAAM,OAAO,GAAG;AACZ,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,EAAE,EAAE,KAAK;AACT,YAAA,iBAAiB,EAAE,EAAE;AACrB,YAAA,yBAAyB,EAAE;SAC9B;AAED,QAAA,aAAa,CAAC,OAAO,CAAC,CAAC,OAAY,KAAI;AACnC,YAAA,MAAM,WAAW,GAAG;gBAChB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,EAAE,EAAE,OAAO,CAAC,EAAE;AACd,gBAAA,iBAAiB,EAAE,EAAE;AACrB,gBAAA,yBAAyB,EAAE;aAC9B;YACD,MAAM,yBAAyB,GAAG,EAAE;YACpC,MAAM,yBAAyB,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AAC9D,gBAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC3E,oBAAA,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI;AAC3B,oBAAA,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;wBACvB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC1F,4BAAA,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI;4BACtC,MAAM,QAAQ,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI;AAC9C,gCAAA,OAAO,GAAG,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE;AAChC,4BAAA,CAAC,CAAC;4BACF,IAAI,QAAQ,EAAE;AACV,gCAAA,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;4BAC9C;AACJ,wBAAA,CAAC,CAAC,CAAC,KAAK,CAAC,MAAK;AACV,4BAAA,MAAM,EAAE;AACZ,wBAAA,CAAC,CAAC;AACF,wBAAA,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC;AAC3C,oBAAA,CAAC,CAAC;oBACF,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,IAAI,CAAC,MAAK;AAC7C,wBAAA,WAAW,CAAC,iBAAiB,GAAG,WAAW,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;AACzE,4BAAA,MAAM,GAAG,GAAG;gCACR,IAAI,EAAE,MAAM,CAAC,IAAI;gCACjB,EAAE,EAAE,MAAM,CAAC;6BACd;4BACD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE;AACnC,gCAAA,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC;4BACvC;AACA,4BAAA,OAAO,GAAG;AACd,wBAAA,CAAC,CAAC;AACF,wBAAA,OAAO,CAAC,WAAW,CAAC,iBAAiB,CAAC;AAC1C,oBAAA,CAAC,CAAC;AACN,gBAAA,CAAC,CAAC,CAAC,KAAK,CAAC,MAAK;AACV,oBAAA,MAAM,EAAE;AACZ,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC,CAAC;AACF,YAAA,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC;YACxC,MAAM,yBAAyB,GAAG,EAAE;YACpC,MAAM,yBAAyB,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AAC9D,gBAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACpF,oBAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI;AAC5B,oBAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;wBACrB,IAAI,cAAc,GAAG,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;4BAClD,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG;AACnC,wBAAA,CAAC,CAAC;wBACF,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AACzC,4BAAA,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC5B,wBAAA,CAAC,CAAC;AACF,wBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,gCAAgC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;4BACxG,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI;AAClC,gCAAA,OAAO,GAAG,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE;AAChC,4BAAA,CAAC,CAAC;4BACF,IAAI,QAAQ,EAAE;AACV,gCAAA,WAAW,CAAC,yBAAyB,CAAC,IAAI,CAAC,GAAG,CAAC;4BACnD;AACJ,wBAAA,CAAC,CAAC,CAAC,KAAK,CAAC,MAAK;AACV,4BAAA,MAAM,EAAE;AACZ,wBAAA,CAAC,CAAC;AACF,wBAAA,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC;AACxC,oBAAA,CAAC,CAAC;oBACF,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,IAAI,CAAC,MAAK;AAC7C,wBAAA,WAAW,CAAC,yBAAyB,GAAG,WAAW,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;AACtF,4BAAA,MAAM,MAAM,GAAG;gCACX,IAAI,EAAE,GAAG,CAAC,IAAI;gCACd,EAAE,EAAE,GAAG,CAAC;6BACX;4BACD,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;AAC7C,gCAAA,OAAO,CAAC,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC;4BAClD;AACA,4BAAA,OAAO,MAAM;AACjB,wBAAA,CAAC,CAAC;AACF,wBAAA,OAAO,CAAC,WAAW,CAAC,yBAAyB,CAAC;AAClD,oBAAA,CAAC,CAAC;AACN,gBAAA,CAAC,CAAC,CAAC,KAAK,CAAC,MAAK;AACV,oBAAA,MAAM,EAAE;AACZ,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC,CAAC;AACF,YAAA,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC;AACxC,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;AAC9B,QAAA,CAAC,CAAC;QACF,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAK;YACnC,OAAO,EAAC,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAC;AACtD,QAAA,CAAC,CAAC;IACN;IAEA,aAAa,CAAC,WAAW,EAAE,OAAO,EAAA;QAC9B,OAAO,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC7C,YAAA,OAAO,MAAM,CAAC,EAAE,KAAK,WAAW,CAAC,EAAE;AACvC,QAAA,CAAC,CAAC;IACN;IAEA,oBAAoB,CAAC,WAAW,EAAE,OAAO,EAAA;QACrC,OAAO,OAAO,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACrD,YAAA,OAAO,MAAM,CAAC,EAAE,KAAK,WAAW,CAAC,EAAE;AACvC,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,2BAA2B,CAAC,QAAQ,EAAA;QAChC,MAAM,QAAQ,GAAG,EAAE;AACnB,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AACzB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC;AAC5D,YAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YACnB,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AACzC,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC;AAChE,gBAAA,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;AAC7B,YAAA,CAAC,CAAC;YACF,OAAO,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AACjD,gBAAA,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,EAAE,CAAC;AAC5E,gBAAA,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC;AAChC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IAChC;AA5VS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAoChB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAAV,sBAAA,EAAA,EAAA,EAAA,KAAA,EAEhB,iBAAiB,gGAIjB,yBAAyB,EAAA,EAAA,EAAA,KAAA,EAAAF,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAuD,wBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AA1C5B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFhB,MAAM,EAAA,CAAA,CAAA;;4FAET,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAqCQ,MAAM;2BAAC,gBAAgB;;0BAEvB,MAAM;2BAAC,iBAAiB;;0BAIxB,MAAM;2BAAC,yBAAyB;;;ACrFzC;;;;;;;;;;;;;;AAcE;MAYW,oBAAoB,CAAA;AAkB/B,IAAA,WAAA,CAAoB,MAAc,EAAA;QAAd,IAAA,CAAA,MAAM,GAAN,MAAM;;QAhBV,IAAA,CAAA,KAAK,GAAG,EAAE;QACV,IAAA,CAAA,SAAS,GAAG,KAAK;QACxB,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,QAAQ,GAAG,EAAE;QACb,IAAA,CAAA,KAAK,GAAG,EAAE;QACV,IAAA,CAAA,WAAW,GAAG,KAAK;QACnB,IAAA,CAAA,OAAO,GAAG,EAAE;QACZ,IAAA,CAAA,UAAU,GAAG,IAAI;QACjB,IAAA,CAAA,WAAW,GAAG,IAAI;AACjB,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAU;AACzC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU;AACxC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAU;QAC7C,IAAA,CAAA,YAAY,GAAG,EAAE;QAChB,IAAA,CAAA,UAAU,GAAG,MAAM;QAC3B,IAAA,CAAA,SAAS,GAAG,EAAE;IAEuB;IAErC,QAAQ,GAAA;QACN,IAAI,CAAC,eAAe,EAAE;IACxB;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,IAAI,EAAE;IACb;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;QACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YAC3B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;YACxC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC;QAClF;aAAO;YACL,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QACvC;QACA,IAAI,CAAC,IAAI,EAAE;IACb;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACrB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;YACvC;QACF;AACA,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC7C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AAC3B,gBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;AACjD,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC1C;YACF;iBAAO;AACL,gBAAA,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;AACnD,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACvC;YACF;QACF;QACA,IAAI,CAAC,IAAI,EAAE;IACb;IAEA,IAAI,GAAA;QACF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;AACtC,YAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;gBAClB,OAAO,KAAK,CAAC,IAAI;YACnB;AAAO,iBAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;gBACzB,OAAQ,KAAK,CAAC,IAAI;YACpB;AAAO,iBAAA,IAAI,KAAK,CAAC,IAAI,EAAE;gBACrB,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC;YAC7C;iBAAO;AACL,gBAAA,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC;YACnC;AACF,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,QAAQ,CAAC,IAAY,EAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAG;YACpB;QACF;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9B;AAEA,IAAA,MAAM,CAAC,IAAI,EAAA;AACT,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B;IAEA,WAAW,CAAC,KAAK,EAAE,IAAI,EAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB;QACF;QACA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;QACpC,KAAK,CAAC,cAAc,EAAE;IACxB;AAEA,IAAA,UAAU,CAAC,IAAI,EAAA;QACb,IAAI,OAAO,GAAG,IAAI;QAClB,IAAG,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC9B,YAAA,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5B;QACA,OAAO,IAAI,GAAG,OAAO;IACvB;+GAnGW,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAApE,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,iaC1BjC,i+CAoCA,EAAA,MAAA,EAAA,CAAA,u8EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAe,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDVa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,cAGhB,KAAK,EAAA,QAAA,EAAA,i+CAAA,EAAA,MAAA,EAAA,CAAA,u8EAAA,CAAA,EAAA;;sBAIlB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;AEvCH;;;;;;;;;;;;;;AAcE;MAmBW,0BAA0B,CAAA;IA+BrC,WAAA,CACY,SAAmD,EAC3B,IAAS,EACN,WAA4B,EACvD,kBAAuC,EACvC,cAA8B,EAAA;QAJ9B,IAAA,CAAA,SAAS,GAAT,SAAS;QACe,IAAA,CAAA,IAAI,GAAJ,IAAI;QACD,IAAA,CAAA,WAAW,GAAX,WAAW;QACtC,IAAA,CAAA,kBAAkB,GAAlB,kBAAkB;QAClB,IAAA,CAAA,cAAc,GAAd,cAAc;AAlC1B,QAAA,IAAA,CAAA,OAAO,GAAG;AACR,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,EAAE,EAAE,KAAK;AACT,YAAA,iBAAiB,EAAE,EAAE;AACrB,YAAA,yBAAyB,EAAE;SAC5B;AACD,QAAA,IAAA,CAAA,OAAO,GAAQ;AACb,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,eAAe,EAAE;SAClB;QAED,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,kBAAkB,GAAG,EAAE;QAEvB,IAAA,CAAA,eAAe,GAAG,CAAC;QACnB,IAAA,CAAA,uBAAuB,GAAG,CAAC;AAE3B,QAAA,IAAA,CAAA,YAAY,GAAQ;AAClB,YAAA,iBAAiB,EAAE,EAAE;AACrB,YAAA,yBAAyB,EAAE;SAC5B;QACD,IAAA,CAAA,WAAW,GAAG,SAAS;QACvB,IAAA,CAAA,KAAK,GAAG,EAAE;QACV,IAAA,CAAA,SAAS,GAAG,IAAI;QAEhB,IAAA,CAAA,aAAa,GAAG,EAAE;AAQhB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;IACrB;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,wBAAwB,EAAE;IACjC;IAEA,wBAAwB,GAAA;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC3F,YAAA,MAAM,EAAC,aAAa,EAAE,OAAO,EAAC,GAAG,MAAM;AACvC,YAAA,IAAI,CAAC,aAAa,GAAG,aAAa;AAClC,YAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9B,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,aAAa;YACvC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,MAAM;YACvD,IAAI,CAAC,uBAAuB,GAAG,OAAO,CAAC,yBAAyB,CAAC,MAAM;AACzE,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,MAAK;AACZ,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,kCAAA,CAAoC,EACpC,CAAA,wDAAA,CAA0D,CAC7D;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,YAAA,IAAI,CAAC,WAAW,GAAG,0DAA0D;AAC7E,YAAA,IAAI,CAAC,KAAK,GAAG,OAAO;AACtB,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,WAAW,CAAC,IAAS,EAAA;QACnB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,YAAiB,KAAI;YAC/C,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI;AACzD,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;IAC1B;IAEA,OAAO,GAAA;QACL,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC;IACzC;IAEA,MAAM,GAAA;QACJ,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;IAC1C;IAEA,MAAM,GAAA;QACJ,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;IAC1C;+GAvFW,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAZ,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAiCzB,eAAe,EAAA,EAAA,EAAA,KAAA,EACf,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAAqE,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAApB,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAlClB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,+ECjCvC,u4MAyHA,EAAA,MAAA,EAAA,CAAA,0hYAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAArC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAyD,2BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,aAAA,EAAA,OAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,oBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,OAAA,EAAA,aAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,aAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDxFa,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBANtC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,cAGlB,KAAK,EAAA,QAAA,EAAA,u4MAAA,EAAA,MAAA,EAAA,CAAA,0hYAAA,CAAA,EAAA;;0BAmCd,MAAM;2BAAC,eAAe;;0BACtB,MAAM;2BAAC,iBAAiB;;;AEnE/B;;;;;;;;;;;;;;AAcE;AA4BI,MAAO,qBAAsB,SAAQ,iBAAiB,CAAA;AAU1D,IAAA,WAAA,CACoB,GAAwB,EACxC,aAAqC,EACrC,UAAqB,EACb,QAAwB,EAChC,aAAmC,EAC3B,cAA8B,EACJ,eAAgC,EACZ,gBAAkC,EAAA;QAE1F,KAAK,CAAC,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,UAAU,EAAE,gBAAgB,CAAC;QATpD,IAAA,CAAA,GAAG,GAAH,GAAG;QAGX,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAER,IAAA,CAAA,cAAc,GAAd,cAAc;QACY,IAAA,CAAA,eAAe,GAAf,eAAe;QACK,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAhB1E,IAAA,CAAA,WAAW,GAAG,EAAE;QAChB,IAAA,CAAA,eAAe,GAAG,KAAK;QAGvB,IAAA,CAAA,KAAK,GAAG,UAAU;QAClB,IAAA,CAAA,WAAW,GAAQ,EAAE;AAcnB,QAAA,IAAI,QAAQ,GAAG,SAAS,CAAC,QAAQ,IAAI,OAAO;AAC5C,QAAA,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE;IACnC;IAES,QAAQ,GAAA;QACf,KAAK,CAAC,QAAQ,EAAE;QAChB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;AAC7C,QAAA,IAAI,CAAC,GAAG,CAAC,wBAAwB,EAAE;IACrC;AAEA,IAAA,mBAAmB,CAAC,MAAc,EAAA;QAChC,QAAO,MAAM;AACX,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;gBACxB;AACF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACF,YAAA,KAAK,QAAQ;gBACX,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;oBAChD,OAAO,GAAG,CAAC,QAAQ;AACrB,gBAAA,CAAC,CAAC;AACF,gBAAA,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,GAAG,UAAU,GAAG,SAAS;AAC/D,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,KAAK,CAAC;gBACzC;YACF;;IAEJ;AAEA,IAAA,WAAW,CAAC,KAAU,EAAA;QACpB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;QAChD,MAAM,oBAAoB,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;QAC/D,IAAI,oBAAoB,EAAE;YACxB;QACF;AACA,QAAA,QAAO,KAAK,EAAE,MAAM;AAClB,YAAA,KAAK,WAAW;AAChB,YAAA,KAAK,YAAY;AACf,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC5B;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpC;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;gBACxB;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC3B;AACF,YAAA,KAAK,cAAc;gBACjB,IAAI,CAAC,gBAAgB,EAAE;gBACvB;AACF,YAAA,KAAK,mBAAmB;gBACtB,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC1C;AACF,YAAA;gBACE;;IAEN;IAEA,eAAe,CAAC,MAAc,EAAE,IAAS,EAAA;AACvC,QAAA,IAAI,CAAC,gBAAgB,EAAE,sBAAsB,EAAE,IAAI,CAAC;YAClD,MAAM;AACN,YAAA,IAAI,EAAE,SAAS;YACf,IAAI;AACJ,YAAA,IAAI,EAAC;AACN,SAAA,CAAC;IACJ;AACA,IAAA,UAAU,CAAC,IAAS,EAAA;QAClB,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IACxC;AAEA,IAAA,WAAW,CAAC,KAAK,EAAA;AACf,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;IAC9B;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,KAAK,EAAE;IAC9D;AAEA,IAAA,UAAU,CAAC,KAAM,EAAA;AACf,QAAA,IAAI,KAAK,EAAE,IAAI,KAAK,OAAO,EAAE;AAC3B,YAAA,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,EAAE;YACzB;QACF;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,EAAE;AACzB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,KAAK;AAC9B,QAAA,IAAG,KAAK,EAAE,OAAO,EAAE;YACjB,IAAI,CAAC,WAAW,EAAE;QACpB;IACF;AAEA,IAAA,mBAAmB,CAAC,KAAK,EAAA;AACvB,QAAA,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,KAAK;IAC9B;AAES,IAAA,cAAc,CAAC,aAAoB,EAAE,eAAe,GAAG,SAAS,EAAA;QACvE,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;YAC5C,OAAO,GAAG,CAAC,EAAE;AACf,QAAA,CAAC,CAAC;QACF,MAAM,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;YAC/C,OAAO,IAAI,CAAC,IAAI;AAClB,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,GAAG,aAAa,CAAC,MAAM,GAAG,EAAE;AACvE,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa;QAClC,MAAM,oBAAoB,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,EAAE,OAAO,CAAC;QAChI,IAAI,CAAC,WAAW,GAAG;AACjB,YAAA,QAAQ,EAAE,gBAAgB;AAC1B,YAAA,KAAK,EAAE,iBAAiB;AACxB,YAAA,OAAO,EAAE,CAAA,oDAAA,EAAuD,UAAU,CAAA,CAAA,EAAI,eAAe,CAAA,CAAA,CAAG;AAChG,YAAA,UAAU,EAAE,aAAa;AACzB,YAAA,oBAAoB,EAAE,oBAAoB;AAC1C,YAAA,qBAAqB,EAAE,8DAA8D;AACrF,YAAA,kBAAkB,EAAE,KAAK;AACzB,YAAA,kBAAkB,EAAE,CAAA,wIAAA,CAA0I;AAC9J,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,WAAW,EAAE,6BAA6B;AAC1C,YAAA,oBAAoB,EAAE,mBAAmB;AACzC,YAAA,eAAe,EAAE,YAAY;AAC7B,YAAA,QAAQ,EAAE,+BAA+B;YACzC,eAAe,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;AACtD,YAAA,cAAc,EAAE,IAAI;SACrB;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACtD,IAAI,EAAE,IAAI,CAAC,WAAW;AACtB,YAAA,SAAS,EAAE,KAAK;AACjB,SAAA,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AAChD,YAAA,IAAI,MAAM,EAAE,SAAS,EAAE;AACrB,gBAAA,IAAI,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE;AACvC,oBAAA,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACpE,wBAAA,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,MAAK;AACnE,4BAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,gBAAA,CAAkB,EAClB,CAAA,mDAAA,CAAqD,CACxD;AACD,4BAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;4BACrC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;AACxC,wBAAA,CAAC,CAAC,CAAC,KAAK,CAAC,MAAK;AACZ,4BAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,yBAAA,CAA2B,EAC3B,CAAA,mFAAA,CAAqF,CACxF;AACD,4BAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACvC,wBAAA,CAAC,CAAC;AACJ,oBAAA,CAAC,CAAC,CAAC,KAAK,CAAC,MAAK;AACZ,wBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,kCAAA,CAAoC,EACpC,CAAA,wDAAA,CAA0D,CAC7D;AACD,wBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,wBAAA,OAAO,EAAC,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAC;AACtE,oBAAA,CAAC,CAAC;gBACJ;qBAAO;oBACL,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAK;wBAC1C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;AACxC,oBAAA,CAAC,CAAC;gBACJ;YACF;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,qBAAqB,GAAA;AACnB,QAAA,MAAM,IAAI,GAAG;YACX,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,aAAa,EAAE,IAAI,CAAC,aAAa;AACjC,YAAA,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC;SACnC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,0BAA0B,EAAE;AACjE,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,SAAS,EAAE,KAAK;AACjB,SAAA,CAAC;QACF,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AAC3C,YAAA,IAAI,MAAM,EAAE,SAAS,EAAE;AACrB,gBAAA,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,MAAK;AACjE,oBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,gBAAA,CAAkB,EAClB,CAAA,mDAAA,CAAqD,CACxD;AACD,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;oBACrC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;AACxC,gBAAA,CAAC,CAAC;AACF,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YACxB;AACF,QAAA,CAAC,CAAC;IACJ;+GAtNW,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAO,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAA7C,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAAX,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAyD,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,EAAA,EAAA,KAAA,EAiBpB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAChB,yBAAyB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAlB1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,gGC1ClC,ojCA6BA,EAAA,MAAA,EAAA,CAAA,wwGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAd,uBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,WAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,cAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAV,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDaa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,cAGZ,KAAK,EAAA,QAAA,EAAA,ojCAAA,EAAA,MAAA,EAAA,CAAA,wwGAAA,CAAA,EAAA;;0BAmBd,MAAM;2BAAC,gBAAgB;;0BACvB,MAAM;2BAAC,yBAAyB;;;MEnD1B,iBAAiB,GAAG,IAAI,cAAc,CAAM,mBAAmB;AAGrE,IAAe,iBAAiB,GAAhC,MAAe,iBAAiB,CAAA;AAenC,IAAA,eAAe,CAAC,IAAY,EAAA;AACxB,QAAA,OAAO,OAAO,CAAC,MAAM,CAAC,2DAA2D,CAAC;IACtF;IAEA,aAAa,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE;IAC5B;AASA,IAAA,WAAA,CACc,UAAsB,EACN,eAA+C,EAC/D,MAAc,EACd,cAA8B,EAAA;QAH9B,IAAA,CAAA,UAAU,GAAV,UAAU;QACgB,IAAA,CAAA,eAAe,GAAf,eAAe;QACzC,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,cAAc,GAAd,cAAc;QAjCrB,IAAA,CAAA,wBAAwB,GAAG,KAAK;QAEhC,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,kBAAkB,GAAG,KAAK;QAC1B,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,aAAa,GAAG,WAAW;;QAG3B,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,cAAc,GAAU,EAAE;IAuB7B;IAEG,cAAc,GAAA;AACjB,QAAA,MAAM,OAAO,GAAQ;AACjB,YAAA,OAAO,EAAE;AACL,gBAAA,MAAM,EAAE,GAAG;AACd,aAAA;AACD,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,YAAY,EAAE,MAAe;SAChC;AACD,QAAA,OAAO,OAAO;IAClB;AAEA,IAAA,SAAS,CAAC,KAAa,EAAA;AACnB,QAAA,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE;AAChB,YAAA,OAAO,EAAE;QACb;QACA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;AAC9B,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACpB,YAAA,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC;QACxC;AAEA,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACnE,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;IAC9B;;AA7DkB,iBAAiB,GAAA,UAAA,CAAA;AAiC9B,IAAA,OAAA,CAAA,CAAA,EAAA,MAAM,CAAC,gBAAgB,CAAC;AAjCX,CAAA,EAAA,iBAAiB,CA8DtC;;AC1ED;;;;;;;;;;;;;;AAcE;AAMI,SAAU,SAAS,CAAC,QAAkB,EAAA;IACxC,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IACvE,MAAM,eAAe,GAAG,QAAQ,CAAC,GAAG,CAAC,gBAAgB,EAAE,eAAe,CAAC;IACvE,eAAe,CAAC,IAAI,EAAE;AACtB,IAAA,OAAO,MAAM,YAAY,CAAC,IAAI,EAAE;AACpC;;ACzBA;;;;;;;;;;;;;;AAcE;MAUW,wBAAwB,CAAA;AANrC,IAAA,WAAA,GAAA;QAQW,IAAA,CAAA,KAAK,GAAG,mBAAmB;QAC3B,IAAA,CAAA,WAAW,GAAG,KAAK;QACnB,IAAA,CAAA,OAAO,GAAG,IAAI;QACd,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,QAAQ,GAAG,KAAK;AACf,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAW;AAWvD,IAAA;AATC,IAAA,eAAe,CAAC,KAAK,EAAA;QACnB,IAAI,CAAC,YAAY,EAAE;IACrB;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ;QAC9B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IACzC;+GAhBW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,yPCxBrC,ihBAaM,EAAA,MAAA,EAAA,CAAA,04CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAApD,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDWO,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,cAGrB,KAAK,EAAA,QAAA,EAAA,ihBAAA,EAAA,MAAA,EAAA,CAAA,04CAAA,CAAA,EAAA;;sBAIlB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;AE/BH;;;;;;;;;;;;;;AAcE;MAWW,mBAAmB,CAAA;AAoB9B,IAAA,WAAA,GAAA;QAlBS,IAAA,CAAA,IAAI,GAAQ,EAAE;;QAEd,IAAA,CAAA,QAAQ,GAAG,KAAK;AACf,QAAA,IAAA,CAAA,UAAU,GAAsB,IAAI,YAAY,EAAO;QAEjE,IAAA,CAAA,SAAS,GAAQ,EAAE;QACnB,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,WAAW,GAAG,EAAE;QAChB,IAAA,CAAA,MAAM,GAAQ,EAAE;QAChB,IAAA,CAAA,MAAM,GAAG,MAAM;QAEf,IAAA,CAAA,MAAM,GAAG,EAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAC;QAEvF,IAAA,CAAA,uBAAuB,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC;QAC5D,IAAA,CAAA,wBAAwB,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC;QAC9D,IAAA,CAAA,wBAAwB,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC;QAC9D,IAAA,CAAA,yBAAyB,GAAG,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC;IAEjD;IAEf,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;IAC1B;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;IAC1B;AAEA,IAAA,eAAe,CAAC,KAAW,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,GAAGc,KAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,GAAG,KAAI;YAC7C,OAAO,EAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAC;AAC7E,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAC/B,QAAA,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;IAC5B;AAEA,IAAA,gBAAgB,CAAC,KAAW,EAAA;QAC1B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YAC7B,IAAI,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,IAAI,EAAE;gBAC7B,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC;AAC9B,gBAAA,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,IAAI;YACzB;AACA,YAAA,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;gBAC3C,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC;YAC5B;YACA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK;AACjC,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACjC;AAEA,IAAA,MAAM,CAAC,KAAM,EAAA;AACX,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB;QACF;QACA,IAAI,CAAC,QAAQ,EAAE;AACf,QAAA,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC;QACvE,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;QACrC,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC;QAC5C,IAAI,CAAC,gBAAgB,EAAE;QACvB,KAAK,EAAE,eAAe,EAAE;QACxB,KAAK,EAAE,cAAc,EAAE;IACzB;AAEA,IAAA,SAAS,CAAC,OAAe,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB;QACF;AACA,QAAA,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;AACzB,QAAA,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;AACxB,QAAA,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC;IACxE;AAEA,IAAA,eAAe,CAAC,KAAK,EAAA;QACnB,IAAI,CAAC,MAAM,EAAE;QACb,KAAK,CAAC,eAAe,EAAE;QACvB,KAAK,CAAC,cAAc,EAAE;IACxB;IAEA,cAAc,CAAC,GAAQ,EAAE,KAAM,EAAA;AAC7B,QAAA,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC;IACvC;IAEA,eAAe,CAAC,GAAQ,EAAE,KAAM,EAAA;AAC9B,QAAA,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC;IACvC;AAEA,IAAA,QAAQ,CAAC,KAAM,EAAA;QACb,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YAC7B,MAAM,MAAM,GAAG,EAAE;AACjB,YAAA,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACrB,gBAAA,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI;YACvB;AACA,YAAA,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACtB,gBAAA,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI;YACxB;AACA,YAAA,GAAG,CAAC,MAAM,GAAG,MAAM;AACrB,QAAA,CAAC,CAAC;IACJ;+GAnGW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,wLCzBhC,0pDAiDA,EAAA,MAAA,EAAA,CAAA,o3CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAd,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAgB,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,YAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDxBa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,cAGf,KAAK,EAAA,QAAA,EAAA,0pDAAA,EAAA,MAAA,EAAA,CAAA,o3CAAA,CAAA,EAAA;;sBAIlB;;sBAEA;;sBACA;;;AE9BH;;;;;;;;;;;;;;AAcE;AA2CI,MAAO,qBAAsB,SAAQ,eAAe,CAAA;AA+BxD,IAAA,WAAA,CACiD,eAAgC,EACtE,GAAwB,EACxB,iBAAwC,EACX,WAA4B,EAChE,cAA8B,EACM,UAA4B,EAC7C,MAAc,EACd,KAAqB,EACxC,QAAkB,EACC,UAAqB,EAAA;AAE1C,QAAA,KAAK,CAAC,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,CAAC;QAXrD,IAAA,CAAA,eAAe,GAAf,eAAe;QACrD,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACY,IAAA,CAAA,WAAW,GAAX,WAAW;QAG5B,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,KAAK,GAAL,KAAK;QAEL,IAAA,CAAA,UAAU,GAAV,UAAU;QAxCxB,IAAA,CAAA,sBAAsB,GAAU,EAAE;AACjC,QAAA,IAAA,CAAA,KAAK,GAAsB,IAAI,YAAY,EAAO;QAEnD,IAAA,CAAA,UAAU,GAAG,YAAY;QACzB,IAAA,CAAA,WAAW,GAAGiB,UAAQ;QAE/B,IAAA,CAAA,SAAS,GAAG,KAAK;QAEjB,IAAA,CAAA,cAAc,GAAW,EAAE;QAG3B,IAAA,CAAA,yBAAyB,GAAQ,EAAE;QACnC,IAAA,CAAA,4BAA4B,GAAQ,EAAE;QACtC,IAAA,CAAA,kBAAkB,GAAQ,EAAE;QAC5B,IAAA,CAAA,sBAAsB,GAAQ,EAAE;QAChC,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,sBAAsB,GAAG,KAAK;QAC9B,IAAA,CAAA,YAAY,GAAQ,EAAE;QAEtB,IAAA,CAAA,QAAQ,GAAG,QAAQ;QACnB,IAAA,CAAA,cAAc,GAAG,KAAK;QAEtB,IAAA,CAAA,cAAc,GAAG,EAAE;QACnB,IAAA,CAAA,QAAQ,GAAQ,EAAE;QAClB,IAAA,CAAA,UAAU,GAAW,EAAE;QACvB,IAAA,CAAA,cAAc,GAAG,KAAK;QAEtB,IAAA,CAAA,GAAG,GAAG,EAAE;QA8UR,IAAA,CAAA,QAAQ,GAAG,EAAE;QAmBb,IAAA,CAAA,mBAAmB,GAAG,YAAY;QAClC,IAAA,CAAA,gBAAgB,GAAG,KAAK;AACxB,QAAA,IAAA,CAAA,eAAe,GAAI,IAAI,IAAI,EAAE;AAC7B,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,IAAI,EAAE;AApVlB,QAAA,IAAI,CAAC,sBAAsB,GAAG,EAAE;QAChC,IAAI,CAAC,eAAe,EAAE;IACxB;IAES,QAAQ,GAAA;QACf,KAAK,CAAC,QAAQ,EAAE;QAChB,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,OAAW,KAAI;AAC5D,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;AACzB,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,OAAW,KAAI;YAC9E,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE;gBAChD;YACF;AACA,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;YACrB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AACnF,gBAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,EAAE,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;gBACvE,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AACxC,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK;gBACxB,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACxB,YAAA,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL;IAES,eAAe,GAAA;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;AAC/B,YAAA,IAAI,CAAC,cAAc,EAAE,aAAa,EAAE,KAAK,EAAE;QAC7C;IACF;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC7C;IAES,aAAa,GAAA;QACpB,KAAK,CAAC,aAAa,EAAE;QACrB,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,kBAAkB,EAAE;QACzB,IAAI,CAAC,yBAAyB,EAAE;QAChC,IAAI,CAAC,qBAAqB,EAAE;QAC5B,IAAI,CAAC,4BAA4B,EAAE;QACnC,IAAI,CAAC,yBAAyB,EAAE;QAChC,IAAI,CAAC,QAAQ,EAAE;AACf,QAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;QACxC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC/C;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE;YACzB,MAAM,mBAAmB,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,4BAA4B,CAAC;YAC5E,IAAI,mBAAmB,EAAE;gBACvB,IAAI,IAAI,CAAC,QAAQ,CAAC,0BAA0B,KAAK,QAAQ,EAAE;oBACzD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAC,CAAC;gBAC/E;qBAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,0BAA0B,KAAK,SAAS,EAAE;oBACjE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAC,CAAC;gBAClF;qBAAO;oBACL,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,2BAA2B,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAC,CAAC;gBACpG;YACF;AAAO,iBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,IAAI,IAAI,CAAC,QAAQ,CAAC,uBAAuB,EAAE;gBAC/E,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAC,CAAC;YAC/E;iBAAO;gBACL,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAC,CAAC;YAClF;YACA,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;AACjC,gBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAC,CAAC;YACpE;AACA,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;AAC1B,gBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAC,CAAC;YAChE;AACA,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;AACvD,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC;YACzF,IAAI,CAAC,oBAAoB,EAAE;QAC7B;IACF;IAEA,eAAe,CAAC,uBAAuB,GAAG,KAAK,EAAA;AAC7C,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,oBAAoB;AACpD,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,uBAAuB,EAAE,EAAE,EAAE,GAAG;aAC1E,OAAO,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACxB,QAAA,CAAC,CAAC;IACN;AAEQ,IAAA,mBAAmB,CACzB,kBAAuB,EACvB,aAAsB,EACtB,YAAoB,EACpB,OAAe,EAAA;AAEf,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAChE,YAAA,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI;YACzB,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,IAAI,CAAC;YAC1E,MAAM,OAAO,GAAG,CAAC,aAAa,IAAI,CAAC,kBAAkB,IAAI,aAAa,KAAK,kBAAkB;AAC7F,YAAA,IAAI,OAAO,IAAI,YAAY,IAAI,CAAC,EAAE;AAChC,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,gBAAA,IAAI,CAAC,oBAAoB,GAAG,aAAa;gBACzC,IAAI,CAAC,oBAAoB,EAAE;AAC3B,gBAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACvD,IAAI,CAAC,YAAY,EAAE;gBACnB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACxC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7C,gBAAA,OAAO,OAAO,CAAC,OAAO,EAAE;YAC1B;AACA,YAAA,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC;AAC/D,iBAAA,IAAI,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,aAAa,EAAE,YAAY,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;AACvG,QAAA,CAAC,CAAC;IACJ;IAEA,kBAAkB,GAAA;QAChB,IAAI,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE;AAClC,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;QAC7B;aAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE;AAC1C,YAAA,IAAI,CAAC,cAAc,GAAG,MAAM;QAC9B;aAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE;AAC3C,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAC5B;aAAO,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE;AAC7C,YAAA,IAAI,CAAC,cAAc,GAAG,MAAM;QAC9B;IACF;IAEA,yBAAyB,GAAA;QACrB,IAAI,CAAC,iBAAiB,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,KAAI;AACnE,YAAA,IAAI,CAAC,sBAAsB,GAAG,UAAU;AAC5C,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,qBAAqB,CAAC,cAAqB,EAAA;AACzC,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,cAAc;AAC7C,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG;AAC1B,YAAA,IAAI,EAAE,mBAAmB;AACzB,YAAA,IAAI,EAAE;AACJ,gBAAA,UAAU,EAAE,UAAU;AACtB,gBAAA,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE;AAC7B,gBAAA,cAAc,EAAE,IAAI,CAAC,QAAQ,EAAE,cAAc,IAAI,EAAE;AACpD,aAAA;AACF,SAAA,CAAC;IACJ;IAEA,qBAAqB,GAAA;QACnB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AAC5H,YAAA,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,IAAI;AACrC,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;gBAChE,OAAO,GAAG,CAAC,IAAI;AACjB,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEA,4BAA4B,GAAA;QAC1B,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,kBAAkB,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AACpI,YAAA,IAAI,CAAC,yBAAyB,GAAG,MAAM,CAAC,IAAI;AAC5C,YAAA,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;gBAChF,OAAO,MAAM,CAAC,IAAI;AACpB,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEA,yBAAyB,GAAA;AACvB,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE;SACR;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;YAC3D,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;YAC3B,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;YACpC;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,eAAe,GAAA;AACb,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE;SACR;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;YACrE,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;AACtC,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,IAAI,gBAAgB,GAAA;QAClB,OAAO,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC/D;AAEA,IAAA,IAAI,iBAAiB,GAAA;QACnB,OAAO,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;IAChE;AAEA,IAAA,qBAAqB,CAAC,MAAM,EAAA;AAC1B,QAAA,QAAO,MAAM,CAAC,IAAI;AAChB,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,IAAI,EAAE;gBACX;AACF,YAAA,KAAK,OAAO;gBACV,IAAI,CAAC,SAAS,EAAE;gBAChB;AACF,YAAA,KAAK,aAAa;AAChB,gBAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI;gBAC3B;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,YAAY,EAAE;gBACnB;;IAEN;AAEA,IAAA,oBAAoB,CAAC,MAAM,EAAA;AACzB,QAAA,QAAO,MAAM,CAAC,EAAE;AACd,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,IAAI,EAAE;gBACX;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,YAAY,EAAE;gBACnB;;IAEN;IAEA,gBAAgB,GAAA;AACd,QAAA,QAAQ,IAAI,CAAC,cAAc;AACzB,YAAA,KAAK,KAAK;gBACR,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,EAAC,GAAG,EAAE,IAAI,EAAC;gBACtC;AACF,YAAA,KAAK,IAAI;AACP,gBAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,EAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAC;gBACrD;AACF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,EAAC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAC;gBACtD;AACF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,EAAE;gBAC7B;AACF,YAAA;gBACE,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,EAAC,GAAG,EAAE,IAAI,EAAC;gBACtC;;IAEN;AAEA,IAAA,IAAI,CAAC,KAAM,EAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE;YAChC;QACF;AACA,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE;AAC9C,QAAA,IAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB;QACF;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE;AACnC,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACrB,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAI;gBAC7B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK;AACjC,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC3C,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;gBAC3B;YACF;AACA,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC7B,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;YACxB,IAAI,CAAC,gBAAgB,EAAE;AACzB,QAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACxB,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,QAAQ,CAAC,QAAS,EAAA;AAChB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;QAChB,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC/B,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI;QAC5B;QACA,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE;AAC5F,YAAA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,IAAI;QACpC;QACA,IAAI,IAAI,CAAC,cAAc,KAAK,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE;AAClG,YAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,IAAI;QACtC;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IAC7B;AAEA,IAAA,IAAI,mBAAmB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,cAAc,KAAK,IAAI,GAAG,uBAAuB,GAAG,CAAC,IAAI,CAAC,cAAc,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,eAAe,GAAG,SAAS;IACnJ;AACA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,sBAAsB,GAAG,gCAAgC,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA,CAAE,GAAG,EAAE,CAAC;IACnI;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,MAAM,IAAI,GAAQ;AAChB,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE;AAC/B,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE;AAC5D,YAAA,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,EAAE;AACrC,YAAA,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,EAAE;AACrC,YAAA,cAAc,EAAE,IAAI,CAAC,QAAQ,EAAE,cAAc,IAAI,EAAE;AACnD,YAAA,YAAY,EAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,IAAI,EAAE;AAC/C,YAAA,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,IAAI,EAAE;AAC3C,YAAA,kBAAkB,EAAE,IAAI,CAAC,QAAQ,EAAE,kBAAkB,IAAI,GAAG;AAC5D,YAAA,wBAAwB,EAAE,IAAI,CAAC,QAAQ,EAAE,wBAAwB,IAAI,0BAA0B;AAC/F,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE;SACtB;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,EAAC,GAAG,EAAE,IAAI,EAAC;QAC3D;AACA,QAAA,OAAO,IAAI;IACb;IAGA,IAAI,OAAO,CAAC,IAAI,EAAA;AACd,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACtB;AAEA,IAAA,eAAe,CAAC,WAAW,EAAA;QACzB,IAAI,OAAO,GAAQ,EAAE;QACrB,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACtC,YAAA,IAAG,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE;gBAC3B,OAAO,GAAG,GAAG;YACf;AACF,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACjE,YAAA,IAAI,CAAC,UAAU,GAAG,MAAM;AACxB,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC5B,QAAA,CAAC,CAAC;IACJ;IAQA,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,gBAAgB;IAChD;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC9B;QACF;QACA,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO;IAChD;;AAIA,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI;IACtE;IAEA,IAAI,YAAY,CAAC,IAAI,EAAA;AACnB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC;QACvC;aAAO;YACL,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC;QAClC;IACF;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,QAAQ;IAChC;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE;IAC3F;IAEA,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC;AACvF,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE;IACxC;IAEA,aAAa,GAAA;QACX,OAAO,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,QAAQ,EAAE;IACrD;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC9B;QACF;QACA,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE;QACtD,MAAM,iBAAiB,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,CAAC;AAC7D,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,iBAAiB;AAC3B,YAAA,KAAK,EAAE,kBAAkB;AACzB,YAAA,OAAO,EAAE,CAAA,qDAAA,EAAwD,IAAI,CAAC,mBAAmB,KAAK,YAAY,GAAG,cAAc,GAAG,CAAA,WAAA,EAAc,SAAS,EAAE,CAAA,CAAA,CAAG;AAC1J,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,WAAW,EAAE,6BAA6B;AAC1C,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,QAAQ,EAAE,+BAA+B;SAC1C;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACtD,YAAA,IAAI,EAAE,WAAW;AACjB,YAAA,SAAS,EAAE,KAAK;AACjB,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC;AACrC,YAAA,IAAI,EAAE,CAAC,MAAM,KAAI;AACf,gBAAA,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE;oBACtB;gBACF;gBACA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA,QAAA,CAAU,EAAE,EAAC,eAAe,EAAE,iBAAiB,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACrH,oBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,iBAAA,CAAmB,EACnB,CAAA,8BAAA,CAAgC,CACnC;AACD,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;oBACrC,IAAI,CAAC,eAAe,EAAE;AACxB,gBAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAI;oBACjB,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC;AAC5D,oBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,oBAAoB,EACpB,CAAA,6BAAA,EAAgC,YAAY,CAAA,CAAA,CAAG,CAClD;AACD,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;oBACrC,IAAI,CAAC,eAAe,EAAE;AACxB,gBAAA,CAAC,CAAC;YACJ,CAAC;AACF,SAAA,CAAC;IACJ;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC9B;QACF;AACA,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,gBAAgB;AAC1B,YAAA,KAAK,EAAE,iBAAiB;AACxB,YAAA,OAAO,EAAE,CAAA,oDAAA,CAAsD;AAC/D,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,WAAW,EAAE,6BAA6B;AAC1C,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,QAAQ,EAAE,+BAA+B;SAC1C;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACtD,YAAA,IAAI,EAAE,WAAW;AACjB,YAAA,SAAS,EAAE,KAAK;AACjB,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC;AACrC,YAAA,IAAI,EAAE,CAAC,MAAM,KAAI;AACf,gBAAA,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE;oBACtB;gBACF;gBACA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA,OAAA,CAAS,EAAE,EAAC,eAAe,EAAE,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACpG,oBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,gBAAA,CAAkB,EAClB,CAAA,6BAAA,CAA+B,CAClC;AACD,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;oBACrC,IAAI,CAAC,eAAe,EAAE;AACxB,gBAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAI;oBACjB,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC;AAC5D,oBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,kBAAkB,EAClB,CAAA,4BAAA,EAA+B,YAAY,CAAA,CAAA,CAAG,CACjD;AACD,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;oBACrC,IAAI,CAAC,eAAe,EAAE;AACxB,gBAAA,CAAC,CAAC;YACJ,CAAC;AACF,SAAA,CAAC;IACJ;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;IAC7B;IAEA,KAAK,GAAA;IACL;AA/gBW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAgCpB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAA2C,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAA1C,qBAAA,EAAA,EAAA,EAAA,KAAA,EAGhB,iBAAiB,wCAEjB,0BAA0B,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAArB,IAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAuB,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AArC3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EARnB;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,YAAY;AACrB,gBAAA,QAAQ,EAAE;AACb;AACJ,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtDL,sxgBAoWA,EAAA,MAAA,EAAA,CAAA,qvFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAvB,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAgE,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,aAAA,EAAA,eAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,aAAA,EAAA,UAAA,EAAA,cAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,aAAA,EAAA,OAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,oBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,OAAA,EAAA,aAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,aAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,cAAA,EAAA,eAAA,EAAA,YAAA,EAAA,WAAA,EAAA,cAAA,EAAA,aAAA,EAAA,+BAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,8BAAA,EAAA,+BAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FD3Sa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAZjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAAA,SAAA,EAGlB;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,YAAY;AACrB,4BAAA,QAAQ,EAAE;AACb;AACJ,qBAAA,EAAA,UAAA,EACW,KAAK,EAAA,QAAA,EAAA,sxgBAAA,EAAA,MAAA,EAAA,CAAA,qvFAAA,CAAA,EAAA;;0BAkCd,MAAM;2BAAC,gBAAgB;;0BAGvB,MAAM;2BAAC,iBAAiB;;0BAExB,MAAM;2BAAC,0BAA0B;;sBApCrC;;sBACA;;;MExCU,gBAAgB,CAAA;AAS3B,IAAA,WAAA,CAAoB,cAA8B,EAAA;QAA9B,IAAA,CAAA,cAAc,GAAd,cAAc;QARzB,IAAA,CAAA,KAAK,GAAG,EAAE;QACV,IAAA,CAAA,QAAQ,GAAG,EAAE;QACb,IAAA,CAAA,KAAK,GAAG,EAAE;QACV,IAAA,CAAA,OAAO,GAAG,EAAE;QACZ,IAAA,CAAA,IAAI,GAAG,KAAK;IAMrB;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AACpE,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACxB,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;QACT,IAAG,IAAI,CAAC,iBAAiB;AAAE,YAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;IACjE;AAEQ,IAAA,WAAW,CAAC,IAAkB,EAAA;AACpC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;AACvB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC7B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;AACvB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AAC3B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAChB,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,IAAI,GAAG,KAAK;QACnB,CAAC,EAAE,IAAI,CAAC;IAEV;+GAjCW,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAhE,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAZf;;;;;;;;AAQR,KAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,s9HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAvB,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAIO,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAd5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,QAAA,EACb;;;;;;;;AAQR,KAAA,CAAA,EAAA,UAAA,EAEU,KAAK,EAAA,MAAA,EAAA,CAAA,s9HAAA,CAAA,EAAA;;sBAGlB;;sBACA;;sBACA;;sBACA;;sBACA;;;ACxBH;;;;;;;;;;;;;;AAcE;MAYW,aAAa,CAAA;+GAAb,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,iBAHP,gBAAgB,CAAA,EAAA,OAAA,EAAA,CADrB,YAAY,EAAC,WAAW,aAExB,gBAAgB,CAAA,EAAA,CAAA,CAAA;gHAEjB,aAAa,EAAA,OAAA,EAAA,CAJZ,YAAY,EAAC,WAAW,CAAA,EAAA,CAAA,CAAA;;4FAIzB,aAAa,EAAA,UAAA,EAAA,CAAA;kBALzB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAC,WAAW,CAAC;oBACnC,YAAY,EAAE,CAAC,gBAAgB,CAAC;oBAChC,OAAO,EAAE,CAAC,gBAAgB,CAAC;AAC9B,iBAAA;;;ACzBD;;;;;;;;;;;;;;AAcE;MAUoB,sBAAsB,CAAA;;AAItC,IAAA,WAAA,GAAA,EAEG;IAEH,QAAQ,GAAA;IAER;IAEA,WAAW,GAAA;;IAEX;+GAdgB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAtB,sBAAsB,EAAA,CAAA,CAAA;;4FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAD3C;;;MCpBY,QAAQ,CAAA;AAoBjB,IAAA,WAAA,GAAA;AACI,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;IAC5B;AACH;MAEY,OAAO,CAAA;AAoBhB,IAAA,WAAA,GAAA;AACI,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;IAC5B;AACH;qBACY,MAAM,CAAA;AAQjB,IAAA,WAAA,GAAA;AACI,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;IAC5B;AACD;MACY,KAAK,CAAA;AAOd,IAAA,WAAA,CAAY,GAAG,EAAE,CAAC,EAAE,CAAC,EAAA;AACjB,QAAA,IAAI,CAAC,EAAE,GAAG,GAAG;AACb,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC;AACd,QAAA,IAAI,CAAC,IAAI,GAAG,OAAO;AACnB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACtB;AACH;MAEY,aAAa,CAAA;AAWtB,IAAA,WAAA,GAAA;AACI,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;IAC5B;AACH;MAEY,SAAS,CAAA;AAMlB,IAAA,WAAA,GAAA;AACI,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACtB;AACH;MAEY,QAAQ,CAAA;AAejB,IAAA,WAAA,GAAA;AACI,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;IAC5B;AACH;MAEY,eAAe,CAAA;AAaxB,IAAA,WAAA,GAAA;AACI,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;IAC5B;AACH;MAEY,OAAO,CAAA;AAuBhB,IAAA,WAAA,GAAA;AACI,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;IAC5B;AACH;MAEY,QAAQ,CAAA;AAUjB,IAAA,WAAA,GAAA;QAFA,IAAA,CAAA,QAAQ,GAAG,IAAI;QACf,IAAA,CAAA,UAAU,GAAG,IAAI;AAEb,QAAA,IAAI,CAAC,IAAI,GAAG,UAAU;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACtB;AACH;MAKY,uBAAuB,CAAA;AAHpC,IAAA,WAAA,GAAA;QAKG,IAAA,CAAA,OAAO,GAAM,CAAC;AAgnBhB,IAAA;IA9mBA,YAAY,GAAA;AACV,QAAA,OAAO,EAAE,IAAI,CAAC,OAAO;IACvB;AACQ,IAAA,oBAAoB,CAAC,EAAE,EAAE,UAAU,GAAG,KAAK,EAAA;AAC9C,QAAA,MAAM,IAAI,GAAG,IAAI,OAAO,EAAE;;AAEvB,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI;AACnB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,UAAU,GAAE,KAAK,GAAE,IAAI;;AAE1C,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,QAAQ,GAAE,KAAK,GAAE,IAAI;AACtC,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,QAAQ,GAAE,KAAK,GAAE,IAAI;AACxC,QAAA,IAAI,CAAC,IAAI,GAAG,aAAa;AACzB,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;AAC1B,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,eAAe,GAAE,EAAE,CAAC,eAAe,GAAE,IAAI;AACnE,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,GAAE,EAAE,CAAC,UAAU,GAAC,IAAI;AACnD,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS;AAC7B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS;AACnC,QAAA,OAAO,IAAI;IACZ;AACO,IAAA,iCAAiC,CAAC,MAAM,EAAE,UAAU,GAAG,KAAK,EAAA;AAChE,QAAA,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE;;AAE7C,QAAA,eAAe,CAAC,IAAI,GAAG,MAAM,CAAC,EAAE;AAChC,QAAA,eAAe,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;AAClC,QAAA,eAAe,CAAC,IAAI,GAAG,uBAAuB;AAC9C,QAAA,eAAe,CAAC,QAAQ,GAAG,UAAU;AACtC,QAAA,OAAO,eAAe;IACxB;AACO,IAAA,0BAA0B,CAAC,MAAM,EAAE,UAAU,GAAG,KAAK,EAAA;AAC1D,QAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE;;AAE7B,QAAA,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC,EAAE;AACzB,QAAA,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;AAC3B,QAAA,QAAQ,CAAC,IAAI,GAAG,oBAAoB;AACpC,QAAA,QAAQ,CAAC,QAAQ,GAAG,UAAU;AAC9B,QAAA,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ;AACnC,QAAA,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ;AACtC,QAAA,OAAO,QAAQ;IAChB;AACO,IAAA,uBAAuB,CAAC,MAAM,EAAE,UAAU,GAAG,KAAK,EAAA;QACvD,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,eAAe,EAAE,qBAAqB,CAAC;QACxE,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,eAAe,EAAE,qBAAqB,CAAC;AAExE,QAAA,MAAM,OAAO,GAAO,IAAI,aAAa,EAAE;;AAEpC,QAAA,OAAO,CAAC,EAAE,GAAG,KAAK;AACjB,QAAA,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,EAAE;AACxB,QAAA,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;AAC1B,QAAA,OAAO,CAAC,IAAI,GAAG,gBAAgB;AAC/B,QAAA,OAAO,CAAC,QAAQ,GAAG,UAAU;AAC7B,QAAA,OAAO,CAAC,YAAY,GAAG,SAAS;AAClC,QAAA,IAAG,MAAM,CAAC,IAAI,KAAG,MAAM,EAAE;AACvB,YAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9B,YAAA,OAAO,OAAO;QAChB;aAAO;AACL,YAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9B,YAAA,OAAO,OAAO;QAChB;IACJ;AACO,IAAA,kBAAkB,CAAC,MAAM,EAAE,UAAU,GAAG,KAAK,EAAA;AAClD,QAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE;AACvB,QAAA,QAAQ,CAAC,QAAQ,GAAG,UAAU;;AAE9B,QAAA,QAAQ,CAAC,EAAE,GAAG,IAAI;AAClB,QAAA,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC,EAAE;AACzB,QAAA,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;AAC3B,QAAA,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,aAAa,KAAK,IAAI,GAAG,KAAK,GAAG,IAAI;AAC9D,QAAA,QAAQ,CAAC,IAAI,GAAG,UAAU;AAC1B,QAAA,QAAQ,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS;AACrC,QAAA,QAAQ,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS;AACrC,QAAA,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,KAAK,IAAI,GAAG,YAAY,GAAG,gBAAgB;AACzE,QAAA,IAAI,MAAM,CAAC,OAAO,EAAE;YAChB,QAAQ,CAAC,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,GAAE,MAAM,CAAC,OAAO,CAAC,IAAI,GAAE,MAAM,CAAC,OAAO,CAAC,KAAK;YAC5E,QAAQ,CAAC,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO;QAC/C;AACA,QAAA,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AAClE,YAAA,QAAQ,CAAC,IAAI,GAAG,kBAAkB;QACrC;AACV,QAAA,OAAS,QAAQ;IACnB;AACO,IAAA,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,KAAK,EAAA;AAC/C,QAAA,MAAM,UAAU,GAAG,IAAI,OAAO,EAAE;;AAE9B,QAAA,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;AAC7B,QAAA,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC,EAAE;AAC3B,QAAA,UAAU,CAAC,IAAI,GAAG,SAAS;AAC3B,QAAA,UAAU,CAAC,QAAQ,GAAG,UAAU;QAChC,MAAM,kBAAkB,GAAG,EAAE;AAC7B,QAAA,MAAM,IAAI,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACtE,YAAA,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;AAClC,QAAA,CAAC,CAAC;AACN,QAAA,OAAO,UAAU;IACnB;AAES,IAAA,kBAAkB,CACrB,WAAW,EACX,aAAa,EACb,QAAQ,EACR,UAAU,EACV,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,yBAAyB;;AAEzB,IAAA,mBAAmB,EAAE,qBAAqB,EAAE,sBAAsB,EAClE,2BAA2B,EAAE,+BAA+B,EAC5D,kCAAkC,EAClC,MAAM,EACN,MAAM,EACN,GAAG,IAAS,EAAA;AAEb,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM;AAEpB,QAAA,SAAS,QAAQ,GAAA;AACb,YAAA,EAAE,MAAM;;AAER,YAAA,OAAO,MAAM;QACjB;AAEA,QAAA,MAAM,QAAQ,CAAA;AAAd,YAAA,WAAA,GAAA;gBACI,IAAA,CAAA,EAAE,GAAG,QAAQ,EAAE;gBAEf,IAAA,CAAA,MAAM,GAAG,CAAC;gBACV,IAAA,CAAA,QAAQ,GAAG,EAAE;gBACb,IAAA,CAAA,WAAW,GAAG,KAAK;gBACnB,IAAA,CAAA,IAAI,GAAG,SAAS;gBAChB,IAAA,CAAA,QAAQ,GAAG,IAAI;YAGnB;AAAC;AAED,QAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE;AAC/B,QAAA,QAAQ,CAAC,IAAI,GAAG,SAAS;AACzB,QAAA,QAAQ,CAAC,MAAM,GAAG,aAAa;QAE/B,SAAS,wBAAwB,CAC7B,kBAAkB,EAClB,UAAU,EACV,EAAE,EACF,EAAE,EAAA;AAEJ,YAAA,IAAG,IAAI,CAAC,CAAC,CAAC,KAAG,KAAK;AAAE,gBAAA,OAAO,kBAAkB;YAC3C,MAAM,SAAS,GAAG,EAAE;AACpB,YAAA,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;AAC1B,gBAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE;AAC/B,gBAAA,QAAQ,CAAC,QAAQ,GAAG,KAAK;AACzB,gBAAA,QAAQ,CAAC,EAAE,GAAG,QAAQ,EAAE;gBACxB,QAAQ,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;gBAChC,QAAQ,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI;AAClC,gBAAA,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,aAAa,KAAK,IAAI,GAAG,KAAK,GAAG,IAAI;AACrE,gBAAA,QAAQ,CAAC,IAAI,GAAG,UAAU;gBAC1B,QAAQ,CAAC,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;gBAC5C,QAAQ,CAAC,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;AAC5C,gBAAA,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,GAAG,YAAY,GAAG,gBAAgB;AAClF,gBAAA,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;AACvB,oBAAA,QAAQ,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,GAAE,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,GAAE,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK;oBACjG,QAAQ,CAAC,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO;gBACtD;gBACA,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AAChF,oBAAA,QAAQ,CAAC,IAAI,GAAG,kBAAkB;gBACrC;AACA,gBAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC5B,YAAA,CAAC;YACH,OAAO,QAAQ,CAAC,WAAW,EAAE,kBAAkB,EAAE,SAAS,CAAC;QAE7D;AACA,QAAA,SAAS,WAAW,CAAC,IAAI,EAAE,SAAS,EAAA;YACjC,MAAM,QAAQ,GAAG,EAAE;YACnB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAA;gBAClC,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;YACH,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,QAAQ,EAAE;gBACxC,MAAM,QAAQ,GAAO,EAAE;gBACvB,IAAI,MAAM,GAAG,CAAC;AACd,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAChD,oBAAA,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,QAAQ,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,IAAG,CAAC,GAAG,QAAQ,KAAK,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC5G,oBAAA,MAAM,KAAK,GACH,IAAI,GAAG,KAAK;AACZ,wBAAA,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;wBAC1C,KAAK;AACL,wBAAA,SAAS,CAAC,QAAQ,CAAC,WAAW,GAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;AACtD,wBAAA,GAAG;AACX,oBAAA,MAAM,IAAI,GAAG,IAAI,KAAK,CACd,QAAQ,EAAE,EACV,KAAK,EACL,IAAI,GAAG,oBAAoB;AAC1B,wBAAA,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;wBAC1C,MAAM;AACN,wBAAA,SAAS,CAAC,QAAQ,CAAC,WAAW,GAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAC1D;oBACD,IAAI,CAAC,GAAG,CAAC;oBACb,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;AAC7B,wBAAA,CAAC,EAAE;AACH,wBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAC9C;AACC,oBAAA,EAAE,CAAC;AACF,oBAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG;AACzD,oBAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;gBACzB;AACA,gBAAA,SAAS,CAAC,QAAQ,GAAG,QAAQ;YAC/B;AACA,YAAA,OAAO,SAAS;QAClB;AAEA,QAAA,SAAS,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAA;YAC5C,IAAI,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe;AAEtF,YAAA,IAAI,IAAI,KAAK,SAAS,EAAE;gBACrB,cAAc,GAAG,IAAI,KAAK,CACvB,QAAQ,EAAE,EACV,yBAAyB,EACzB,mCAAmC,CACtC;gBACA,gBAAgB,GAAG,IAAI,KAAK,CACzB,QAAQ,EAAE,EACV,2BAA2B,EAC3B,oCAAoC,CACvC;gBACA,eAAe,GAAG,IAAI,KAAK,CACxB,QAAQ,EAAE,EACV,0BAA0B,EAC1B,mCAAmC,CACtC;gBACA,cAAc,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,yBAAyB,EAAE,kCAAkC,CAAC;YACxG;AACC,YAAA,IAAI,IAAI,KAAK,WAAW,EAAE;gBACxB,eAAe,GAAG,IAAI,KAAK,CACd,QAAQ,EAAE,EACV,0BAA0B,EAC1B,oCAAoC,CAC/C;YACJ;AACC,YAAA,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,IAAI,GAAG,SAAS,EAAE,IAAI,GAAE,0BAA0B,CAAC;AACzF,YAAA,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,IAAI,GAAG,SAAS,EAAE,IAAI,GAAE,0BAA0B,CAAC;AACzF,YAAA,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,IAAI,GAAG,SAAS,EAAE,IAAI,GAAE,0BAA0B,CAAC;AACzF,YAAA,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,IAAI,GAAG,SAAS,EAAE,IAAI,GAAE,0BAA0B,CAAC;AACzF,YAAA,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,IAAI,GAAG,SAAS,EAAE,IAAI,GAAE,0BAA0B,CAAC;AACzF,YAAA,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,IAAI,GAAG,SAAS,EAAE,IAAI,GAAE,0BAA0B,CAAC;AACzF,YAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAI,IAAI,GAAG,SAAS,EAAE,IAAI,GAAE,2BAA2B,CAAC;AAC1F,YAAA,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,IAAI,GAAG,SAAS,EAAE,IAAI,GAAE,0BAA0B,CAAC;AAC3F,YAAA,MAAM,cAAc,GAAG,IAAI,KAAK,CAC5B,QAAQ,EAAE,EACV,IAAI,GAAG,YAAY,EACnB,IAAI,GAAG,sCAAsC,CAChD;AAED,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1C,gBAAA,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC;AAC3B,gBAAA,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;gBAC5C,IAAI,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,MAAM,KAAK,gBAAgB,EAAE;AACzD,oBAAA,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;gBACtC;qBAAO,IAAI,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,QAAQ,KAAK,KAAK,EAAE;AACrD,oBAAA,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;gBACrC;qBAAO,IAAI,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,EAAE;AACvD,oBAAA,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;gBACvC;qBAAO,IAAI,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE;AACtD,oBAAA,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;gBACtC;qBAAO,IAAI,IAAI,KAAK,SAAS,IAAK,GAAG,CAAC,QAAQ,KAAK,KAAK,EAAE;AACtD,oBAAA,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;gBACrC;AAAO,qBAAA,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,EAAE;AACjE,oBAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC9B;AAAO,qBAAA,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,EAAE;AACjE,oBAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC9B;AAAO,qBAAA,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,EAAE;AACjE,oBAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC9B;AAAO,qBAAA,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,EAAE;AACjE,oBAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC9B;AAAO,qBAAA,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,EAAE;AACjE,oBAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC9B;AAAO,qBAAA,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,EAAE;AACjE,oBAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC9B;qBAAO,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,EAAE;AACnC,oBAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC5B;qBAAO,IACH,GAAG,KAAK,GAAG;AACX,oBAAA,GAAG,KAAK,GAAG;AACX,oBAAA,GAAG,KAAK,GAAG;AACX,oBAAA,GAAG,KAAK,GAAG;AACX,oBAAA,GAAG,KAAK,GAAG;AACX,oBAAA,GAAG,KAAK,GAAG;AACX,oBAAA,GAAG,KAAK,GAAG;AACX,oBAAA,GAAG,KAAK,GAAG;AACX,oBAAA,GAAG,KAAK,GAAG;oBACX,GAAG,KAAK,GAAG,EACb;AACE,oBAAA,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;gBAChC;qBAAO;AACH,oBAAA,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;gBACrC;AACJ,YAAA,CAAC;AAEH,YAAA,IAAI,IAAI,KAAK,SAAS,EAAE;gBACtB,IAAI,cAAc,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;oBACpC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAA;wBACvC,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,oBAAA,CAAC,CAAC;AACF,oBAAA,cAAc,CAAC,IAAI,GAAG,cAAc,CAAC,IAAI,GAAG,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG;AACtF,oBAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;gBAC1C;gBACA,IAAI,gBAAgB,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;oBACtC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAA;wBACzC,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,oBAAA,CAAC,CAAC;AACF,oBAAA,gBAAgB,CAAC,IAAI,GAAG,gBAAgB,CAAC,IAAI,GAAG,GAAG,GAAG,gBAAgB,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG;AAC5F,oBAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC;gBAC5C;gBACA,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;oBACrC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAA;wBACxC,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,oBAAA,CAAC,CAAC;AACF,oBAAA,eAAe,CAAC,IAAI,GAAG,eAAe,CAAC,IAAI,GAAG,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG;AACzF,oBAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC;gBAC3C;gBACA,IAAI,cAAc,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;oBACpC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAA;wBACvC,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,oBAAA,CAAC,CAAC;AACF,oBAAA,cAAc,CAAC,IAAI,GAAG,cAAc,CAAC,IAAI,GAAG,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG;AACtF,oBAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;gBAC1C;YACF;AACE,YAAA,IAAI,IAAI,KAAK,WAAW,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7D,gBAAA,eAAe,CAAC,IAAI,GAAG,eAAe,CAAC,IAAI,GAAG,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG;AACzF,gBAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC;AACvC,gBAAA,WAAW,CAAC,IAAI,EAAE,eAAe,CAAC;YACtC;YACA,IAAI,cAAc,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACpC,gBAAA,cAAc,CAAC,IAAI,GAAG,cAAc,CAAC,IAAI,GAAG,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG;AACtF,gBAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;AACtC,gBAAA,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC;YACrC;YACA,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,gBAAA,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG;AACjE,gBAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AAC/B,gBAAA,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC;YAC9B;YACA,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,gBAAA,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG;AACjE,gBAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AAC/B,gBAAA,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC;YAC9B;YACA,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,gBAAA,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG;AACjE,gBAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AAC/B,gBAAA,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC;YAC9B;YACA,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,gBAAA,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG;AACjE,gBAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AAC/B,gBAAA,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC;YAC9B;YACA,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,gBAAA,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG;AACjE,gBAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AAC/B,gBAAA,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC;YAC9B;YACA,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,gBAAA,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG;AACjE,gBAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AAC/B,gBAAA,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC;YAC9B;YACA,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,gBAAA,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG;AAC3D,gBAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AAC7B,gBAAA,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC;YAC5B;YACA,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,gBAAA,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,GAAG,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG;AACvE,gBAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;AACjC,gBAAA,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC;YAChC;AACA,YAAA,OAAO,QAAQ;QACnB;QAEA,SAAS,6BAA6B,CAClC,qBAAqB,EACrB,eAAe,EACf,EAAE,EACF,EAAE,EAAA;AAEJ,YAAA,IAAG,IAAI,CAAC,CAAC,CAAC,KAAG,KAAK;AAAE,gBAAA,OAAO,qBAAqB;AAEhD,YAAA,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,eAAe,EAAE,qBAAqB,CAAC;AAC7E,YAAA,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,eAAe,EAAE,qBAAqB,CAAC;AAE7E,YAAA,eAAe,CAAC,OAAO,CAAE,CAAC,EAAE,KAAI;AAC9B,gBAAA,MAAM,OAAO,GAAG,IAAI,aAAa,EAAE;AAC/B,gBAAA,OAAO,CAAC,EAAE,GAAG,QAAQ,EAAE;AACvB,gBAAA,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE;AACpB,gBAAA,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI;AACtB,gBAAA,OAAO,CAAC,IAAI,GAAG,gBAAgB;AAC/B,gBAAA,OAAO,CAAC,QAAQ,GAAG,KAAK;AACxB,gBAAA,IAAG,EAAE,CAAC,IAAI,KAAG,MAAM,EAAE;AACnB,oBAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;gBAChC;qBAAO;AACL,oBAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;gBAChC;AACN,YAAA,CAAC,CAAE;AAEF,YAAA,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,GAAG,GAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAE,GAAG;AAC/D,YAAA,qBAAqB,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AAC5C,YAAA,WAAW,CAAC,cAAc,EAAE,OAAO,CAAC;AACpC,YAAA,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,GAAG,GAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAE,GAAG;AAC/D,YAAA,qBAAqB,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AAC5C,YAAA,WAAW,CAAC,cAAc,EAAE,OAAO,CAAC;AACrC,YAAA,OAAO,qBAAqB;QAC9B;QAEA,SAAS,sBAAsB,CAC3B,gBAAgB,EAChB,QAAQ,EACR,EAAE,EACF,EAAE,EAAA;AAEJ,YAAA,IAAG,IAAI,CAAC,CAAC,CAAC,KAAG,KAAK;AAAE,gBAAA,OAAO,gBAAgB;YACzC,MAAM,YAAY,GAAG,EAAE;AACvB,YAAA,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;AAC1B,gBAAA,MAAM,UAAU,GAAG,IAAI,OAAO,EAAE;AAChC,gBAAA,UAAU,CAAC,EAAE,GAAG,QAAQ,EAAE;gBAC1B,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;gBAClC,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;AAChC,gBAAA,UAAU,CAAC,IAAI,GAAG,SAAS;AAC3B,gBAAA,UAAU,CAAC,QAAQ,GAAG,KAAK;gBAE3B,MAAM,kBAAkB,GAAG,EAAE;AAC7B,gBAAA,kBAAkB,CAAC,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC/C,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACpF,oBAAA,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;AACnC,gBAAA,CAAC,CAAC;gBAEF,IAAI,mBAAmB,GAAG,KAAK;gBAC/B,IAAI,oBAAoB,GAAG,KAAK;gBAChC,IAAI,qBAAqB,GAAG,KAAK;gBACjC,IAAI,mBAAmB,GAAG,KAAK;AAE/B,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAChD,oBAAA,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE;AAC9B,oBAAA,MAAM,CAAC,EAAE,GAAG,QAAQ,EAAE;AACtB,oBAAA,MAAM,CAAC,IAAI,GAAG,kBAAkB,CAAC,CAAC,CAAC;AACnC,oBAAA,MAAM,CAAC,IAAI,GAAG,mBAAmB;oBACjC,MAAM,OAAO,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;oBACnD,IAAI,mBAAmB,KAAK,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC1D,wBAAA,UAAU,CAAC,QAAQ,GAAG,KAAK;wBAC3B,mBAAmB,GAAG,IAAI;oBAC9B;oBACA,IAAI,qBAAqB,KAAK,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AAC9D,wBAAA,UAAU,CAAC,QAAQ,GAAG,OAAO;wBAC7B,qBAAqB,GAAG,IAAI;oBAChC;AACA,oBAAA,IAAI,qBAAqB,KAAK,KAAK,IAAI,oBAAoB,KAAK,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC/F,wBAAA,UAAU,CAAC,QAAQ,GAAG,MAAM;wBAC5B,oBAAoB,GAAG,IAAI;oBAC/B;oBACA,IAAI,mBAAmB,KAAK,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC1D,wBAAA,UAAU,CAAC,QAAQ,GAAG,KAAK;wBAC3B,mBAAmB,GAAG,IAAI;oBAC9B;AACJ,gBAAA,CAAC;AACD,gBAAA,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;AACjC,YAAA,CAAC;YACD,OAAO,QAAQ,CAAC,SAAS,EAAE,gBAAgB,EAAE,YAAY,CAAC;AAC9D,QAAA,CAAC;QAED,SAAS,gCAAgC,CACrC,0BAA0B,EAC1B,kBAAkB,EAClB,EAAE,EACF,EAAE,EAAA;AAEJ,YAAA,IAAG,IAAI,CAAC,CAAC,CAAC,KAAG,KAAK;AAAE,gBAAA,OAAO,0BAA0B;YACrD,MAAM,cAAc,GAAG,EAAE;AACvB,YAAA,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;AAC1B,gBAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE;AAC/B,gBAAA,QAAQ,CAAC,EAAE,GAAG,QAAQ,EAAE;gBACxB,QAAQ,CAAC,IAAI,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE;gBACxC,QAAQ,CAAC,IAAI,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI;AAC1C,gBAAA,QAAQ,CAAC,IAAI,GAAG,oBAAoB;AACpC,gBAAA,QAAQ,CAAC,QAAQ,GAAG,KAAK;gBACzB,QAAQ,CAAC,QAAQ,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,QAAQ;gBAClD,QAAQ,CAAC,QAAQ,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,QAAQ;AAClD,gBAAA,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;AACjC,YAAA,CAAC;YACD,OAAO,QAAQ,CAAC,sBAAsB,EAAC,0BAA0B,EAAC,cAAc,CAAC;AACrF,QAAA,CAAC;QAED,SAAS,uCAAuC,CAC5C,iCAAiC,EACjC,yBAAyB,EACzB,EAAE,EACF,EAAE,EAAA;AAEN,YAAA,IAAG,IAAI,CAAC,CAAC,CAAC,KAAG,KAAK;AAAE,gBAAA,OAAO,iCAAiC;AACxD,YAAA,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;AAC1B,gBAAA,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE;AAC7C,gBAAA,eAAe,CAAC,EAAE,GAAG,QAAQ,EAAE;gBAC/B,eAAe,CAAC,IAAI,GAAG,yBAAyB,CAAC,CAAC,CAAC,CAAC,EAAE;gBACtD,eAAe,CAAC,IAAI,GAAG,yBAAyB,CAAC,CAAC,CAAC,CAAC,IAAI;AACxD,gBAAA,eAAe,CAAC,IAAI,GAAG,uBAAuB;AAC9C,gBAAA,eAAe,CAAC,QAAQ,GAAG,KAAK;AAChC,gBAAA,iCAAiC,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC;AACpE,YAAA,CAAC;AACD,YAAA,OAAO,iCAAiC;AAC5C,QAAA,CAAC;QAED,SAAS,yBAAyB,CAC9B,eAAe,EACf,WAAW,EACX,EAAE,EACF,EAAE,EAAA;AAEN,YAAA,IAAG,IAAI,CAAC,CAAC,CAAC,KAAG,KAAK;AAAE,gBAAA,OAAO,eAAe;YAEtC,MAAM,UAAU,GAAG,EAAE;AACrB,YAAA,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;AAC1B,gBAAA,MAAM,IAAI,GAAG,IAAI,OAAO,EAAE;AAC1B,gBAAA,IAAI,CAAC,EAAE,GAAG,QAAQ,EAAE;AACpB,gBAAA,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC;gBACzB,IAAI,EAAE,EAAE;AACJ,oBAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE;AACjB,oBAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI;AACnB,oBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,UAAU,GAAE,KAAK,GAAE,IAAI;;AAE1C,oBAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,QAAQ,GAAE,KAAK,GAAE,IAAI;AACtC,oBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,QAAQ,GAAE,KAAK,GAAE,IAAI;AACxC,oBAAA,IAAI,CAAC,IAAI,GAAG,aAAa;AACzB,oBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,oBAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,eAAe,GAAE,EAAE,CAAC,eAAe,GAAE,IAAI;AACnE,oBAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,GAAE,EAAE,CAAC,UAAU,GAAC,IAAI;AACnD,oBAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS;AAC7B,oBAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS;AAC7B,oBAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;gBACzB;AACJ,YAAA,CAAC;;YAEF,OAAO,QAAQ,CAAC,aAAa,EAAE,eAAe,EAAE,UAAU,CAAC;QAC9D;;AAGA,QAAA,IAAI,sBAAsB,GAAG,IAAI,QAAQ,EAAE;AAC3C,QAAA,sBAAsB,CAAC,EAAE,GAAG,QAAQ,EAAE;AACtC,QAAA,sBAAsB,CAAC,UAAU,GAAG,KAAK;QACzC,sBAAsB,CAAC,IAAI,GAAG,mBAAmB,GAAE,2BAA2B,GAAE,GAAG;AAEnF,QAAA,IAAI,gBAAgB,GAAG,IAAI,QAAQ,EAAE;AACrC,QAAA,gBAAgB,CAAC,EAAE,GAAG,QAAQ,EAAE;AAChC,QAAA,gBAAgB,CAAC,UAAU,GAAG,KAAK;QACnC,gBAAgB,CAAC,IAAI,GAAG,WAAW,GAAE,mBAAmB,GAAE,GAAG;AAE7D,QAAA,IAAI,kBAAkB,GAAG,IAAI,QAAQ,EAAE;AACvC,QAAA,kBAAkB,CAAC,EAAE,GAAG,QAAQ,EAAE;AAClC,QAAA,kBAAkB,CAAC,UAAU,GAAG,KAAK;QACrC,kBAAkB,CAAC,IAAI,GAAG,aAAa,GAAE,qBAAqB,GAAE,GAAG;AAEnE,QAAA,IAAI,kBAAkB,GAAG,IAAI,QAAQ,EAAE;AACvC,QAAA,kBAAkB,CAAC,EAAE,GAAG,QAAQ,EAAE;AAClC,QAAA,kBAAkB,CAAC,UAAU,GAAG,KAAK;QACrC,kBAAkB,CAAC,IAAI,GAAG,eAAe,GAAE,sBAAsB,GAAE,GAAG;AAEtE,QAAA,IAAI,0BAA0B,GAAG,IAAI,QAAQ,EAAE;AAC/C,QAAA,0BAA0B,CAAC,EAAE,GAAG,QAAQ,EAAE;AAC1C,QAAA,0BAA0B,CAAC,UAAU,GAAG,KAAK;QAC7C,0BAA0B,CAAC,IAAI,GAAG,uBAAuB,GAAE,+BAA+B,GAAE,GAAG;AAE/F,QAAA,IAAI,gCAAgC,GAAG,IAAI,QAAQ,EAAE;AACrD,QAAA,gCAAgC,CAAC,EAAE,GAAG,QAAQ,EAAE;AAChD,QAAA,gCAAgC,CAAC,UAAU,GAAG,KAAK;QACnD,gCAAgC,CAAC,IAAI,GAAG,+BAA+B,GAAE,kCAAkC,GAAE,GAAG;AAEhH,QAAA,gBAAgB,GAAG,sBAAsB,CACrC,gBAAgB,EAChB,QAAQ,EACR,CAAC,EACD,QAAQ,CAAC,MAAM,CAClB;AAED,QAAA,kBAAkB,GAAG,yBAAyB,CAC1C,kBAAkB,EAClB,WAAW,EACX,CAAC,EACD,WAAW,CAAC,MAAM,CACrB;AAED,QAAA,sBAAsB,GAAG,6BAA6B,CAClD,sBAAsB,EACtB,eAAe,EACf,CAAC,EACD,eAAe,CAAC,MAAM,CACzB;AAED,QAAA,0BAA0B,GAAG,gCAAgC,CACzD,0BAA0B,EAC1B,kBAAkB,EAClB,CAAC,EACD,kBAAkB,CAAC,MAAM,CAC5B;AAED,QAAA,kBAAkB,GAAG,wBAAwB,CACzC,kBAAkB,EAClB,UAAU,EACV,CAAC,EACD,UAAU,CAAC,MAAM,CACpB;;AAED,QAAA,gCAAgC,GAAG,uCAAuC,CACtE,gCAAgC,EAChC,yBAAyB,EACzB,CAAC,EACD,yBAAyB,CAAC,MAAM,CACnC;AAED,QAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC;AAC9C,QAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC;AACxC,QAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAC1C,QAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAC1C,QAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,0BAA0B,CAAC;AAClD,QAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,gCAAgC,CAAC;AACxD,QAAA,QAAQ,CAAC,MAAM,GAAG,MAAM;AAExB,QAAA,OAAO,QAAQ;IACnB;+GAhnBS,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cAFpB,MAAM,EAAA,CAAA,CAAA;;4FAET,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA;;;MCrMY,iBAAiB,CAAA;AAH9B,IAAA,WAAA,GAAA;QAII,IAAA,CAAA,MAAM,GAAG,CAAC;AAy9Bb,IAAA;AAx9BG,IAAA,eAAe,CAAC,QAAQ,EAAA;AACtB,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,KAAK,EAAE,QAAQ;AACf,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE,KAAK;SACb;AACD,QAAA,OAAQ,MAAM;IAChB;AAEA,IAAA,MAAM,6BAA6B,CAC/B,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,MAAM,EACN,WAAW,EACX,OAAO,EAAA;AAEX,QAAA,MAAM,SAAS,GAAG,MAAM,IAAI,OAAO,CAAE,OAAO,OAAO,EAAE,MAAM,KAAI;YAC5D,MAAM,aAAa,GAAG,EAAE;AACvB,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC;YACxE,IAAI,eAAe,GAAG,EAAE;AACxB,YAAA,IAAI,KAAK,CAAC,cAAc,EAAE;AAAC,gBAAA,eAAe,GAAG,KAAK,CAAC,cAAc;YAAA;YAAC;AAElE,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/C,gBAAA,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE;AAC7B,gBAAA,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC9B,gBAAA,SAAS,CAAC,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC;AACnC,gBAAA,SAAS,CAAC,IAAI,GAAG,oBAAoB;gBACrC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;YAChD;AAEF,YAAA,MAAM,YAAY,GAAG,IAAI,QAAQ,EAAE;AACnC,YAAA,MAAM,YAAY,GAAG,IAAI,QAAQ,EAAE;AACnC,YAAA,YAAY,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AACjC,YAAA,YAAY,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;YACjC,IAAI,uBAAuB,GAAG,EAAE;YAChC,MAAM,QAAQ,GAAG,GAAG;;AAEpB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YAC5E,IAAI,iBAAiB,GAAG,EAAE;YAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;AAC7C,YAAA,MAAM,SAAS,GAAG,IAAI,QAAQ,EAAE;AAC9B,YAAA,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC9B,YAAA,SAAS,CAAC,IAAI,GAAE,yBAAyB;AACzC,YAAA,SAAS,CAAC,IAAI,GAAE,cAAc;AAChC,YAAA,MAAM,wBAAwB,GAAI,MAAM,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;AACjE,iBAAA,IAAI,CAAE,CAAC,MAAM,KAAI;gBAChB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAE,CAAC,EAAE,KAAI;AAC1B,oBAAA,MAAM,GAAG,GAAG,IAAI,OAAO,EAAE;AACrB,oBAAA,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AACxB,oBAAA,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI;AAClB,oBAAA,GAAG,CAAC,IAAI,GAAG,aAAa;AACxB,oBAAA,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;AAClC,gBAAA,CAAC,CAAE;AACV,YAAA,CAAC,CAAC;AAEF,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACzF,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;YACtD,MAAM,YAAY,GAAI,MAAM;AACnB,iBAAA,GAAG,CAAC,YAAY,EAAE,eAAe,EAAE,EAAE;AACrC,iBAAA,IAAI,CAAC,CAAC,MAAM,KAAI;AACf,gBAAA,uBAAuB,GAAG,MAAM,CAAC,IAAI;AACtC,YAAA,CAAC,CAAC;YAET,MAAM,QAAQ,GAAG,EAAE;AACnB,YAAA,uBAAuB,CAAC,OAAO,CAAE,CAAC,EAAE,KAAI;AACnC,gBAAA,MAAM,SAAS,GAAI,IAAI,CAAC,4BAA4B,CAAC,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC;AAC1E,gBAAA,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;AAC7B,YAAA,CAAC,CAAC;AAEF,YAAA,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAE,CAAC,SAAS,KAAI;AAC3C,gBAAA,SAAS,CAAC,OAAO,CAAE,CAAC,IAAI,KAAI;AAC3B,oBAAA,IAAG,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAG;AACrB,wBAAA,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC,0BAA0B,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;oBAC1F;yBAAO;AACJ,wBAAA,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC,0BAA0B,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;oBAC1F;AACD,gBAAA,CAAC,CAAE;AACR,YAAA,CAAC,CAAC;YAEJ,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,CAAE,MAAK;gBACpC,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAE,CAAC,EAAG;AAC9B,oBAAA,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,GAAC,GAAG,GAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAC,GAAG;oBACjE,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;gBAC/C;gBACA,IAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,GAAC,CAAC,EAAE;AAC7B,oBAAA,YAAY,CAAC,IAAI,GAAG,gBAAgB,GAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,GAAC,GAAG;oBACrE,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;gBACnD;gBACA,IAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,GAAC,CAAC,EAAE;AAC7B,oBAAA,YAAY,CAAC,IAAI,GAAG,gBAAgB,GAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,GAAC,GAAG;oBACrE,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;gBACnD;gBACA,OAAO,CAAC,mBAAmB,CAAC;AAC9B,YAAA,CAAC,CAAC;AAEJ,QAAA,CAAC,CAAC;QAED,YAAY,GAAG,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,EAAA;YACtD,OAAO,EAAE,CAAC,QAAQ;AACvB,QAAA,CAAC,CAAC;AACE,QAAA,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC;AACvC,IAAA,CAAC;IAED,QAAQ,GAAA;QACJ,EAAE,IAAI,CAAC,MAAM;QACb,OAAO,IAAI,CAAC,MAAM;IACtB;AAED,IAAA,iBAAiB,CAAE,EAAE,EAAA;AAChB,QAAA,MAAM,SAAS,GAAG,IAAI,OAAO,EAAE;AAC9B,QAAA,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC9B,QAAA,SAAS,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE;AACtB,QAAA,SAAS,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI;AACxB,QAAA,SAAS,CAAC,IAAI,GAAG,SAAS;AAC5B,QAAA,OAAO,SAAS;IACpB;IAEA,0BAA0B,CAAC,OAAO,EAAC,QAAQ,EAAA;QACzC,MAAM,UAAU,GAAG,EAAE;AACrB,QAAA,OAAO,CAAC,OAAO,CAAE,CAAC,EAAE,KAAI;AACtB,YAAA,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AACxB,QAAA,CAAC,CAAE;AAEH,QAAA,QAAQ,CAAC,OAAO,CAAE,CAAC,EAAE,KAAI;YACxB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACzB,gBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB;AACD,QAAA,CAAC,CAAE;AAEJ,QAAA,OAAO,OAAO;IACf;IAED,cAAc,CAAC,UAAU,EAAE,EAAE,EAAA;QAC3B,IAAK,EAAE,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE;YAC/D,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QAC1C;AACA,QAAA,OAAO,UAAU;IACnB;AACA,IAAA,cAAc,CAAC,EAAE,EAAA;AACb,QAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE;AAC9B,QAAA,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC7B,QAAA,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE;AACrB,QAAA,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI;AACvB,QAAA,QAAQ,CAAC,MAAM,GAAG,EAAE,CAAC,aAAa,KAAK,IAAI,GAAG,KAAK,GAAE,IAAI;AACzD,QAAA,QAAQ,CAAC,IAAI,GAAG,UAAU;AAC1B,QAAA,QAAQ,CAAC,MAAM,GAAG,EAAE,CAAC,OAAO,KAAK,IAAI,GAAG,YAAY,GAAE,gBAAgB;AACtE,QAAA,IAAI,EAAE,CAAC,OAAO,EAAE;YACZ,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,GAAE,EAAE,CAAC,OAAO,CAAC,IAAI,GAAE,EAAE,CAAC,OAAO,CAAC,KAAK;YAChE,QAAQ,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO;QAC3C;AACA,QAAA,IAAI,EAAE,CAAC,UAAU,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AACzD,YAAA,QAAQ,CAAC,IAAI,GAAG,kBAAkB;QACtC;AACA,QAAA,QAAQ,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS;AACjC,QAAA,QAAQ,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS;AAEnC,QAAA,OAAO,QAAQ;IAClB;IACA,kBAAkB,CAAC,EAAE,EAAE,QAAQ,EAAA;QAC7B,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;IACvC;AAEE,IAAA,4BAA4B,CAAC,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAA;QACvE,MAAM,WAAW,GAAG,EAAE;QACrB,MAAM,gBAAgB,GAAG,EAAE;AAC3B,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,cAAc,GAAE,KAAK,CAAC,cAAc,GAAE,EAAE;QACnE,YAAY,CAAC,IAAI,CAAC,GAAG,GAAC,KAAK,CAAC,EAAE,CAAC;QAE/B,IAAI,gBAAgB,GAAG,EAAE;QACzB,IAAI,gBAAgB,GAAG,EAAE;AAEzB,QAAA,MAAM,YAAY,GAAG,IAAI,QAAQ,EAAE;AAChC,QAAA,YAAY,CAAC,IAAI,GAAG,eAAe;AACtC,QAAA,MAAM,YAAY,GAAG,IAAI,QAAQ,EAAE;AAC/B,QAAA,YAAY,CAAC,IAAI,GAAG,eAAe;AAEvC,QAAA,YAAY,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AACjC,QAAA,YAAY,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AAEjC,QAAA,eAAe,CAAC,IAAI,CAAE,CAAC,EAAE,KAAI;YAC3B,EAAE,CAAC,aAAa,CAAC,IAAI,CAAE,CAAC,IAAI,KAAI;AAC5B,gBAAA,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAG;AACjC,oBAAA,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,EAAE;AACpB,wBAAA,MAAM,OAAO,GAAG,IAAI,aAAa,EAAE;AAC7B,wBAAA,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC5B,wBAAA,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI;AACtB,wBAAA,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI;wBACtB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,EAAE,CAAC;AAChE,wBAAA,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC9B,gBAAgB,GAAG,SAAS,CAAC,gBAAgB,EAAE,EAAE,CAAC,YAAY,CAAC;oBACnE;yBAAO;AACL,wBAAA,MAAM,OAAO,GAAG,IAAI,aAAa,EAAE;AAC/B,wBAAA,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC5B,wBAAA,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI;AACtB,wBAAA,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI;wBACtB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,EAAE,CAAC;AAC9D,wBAAA,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;wBACpC,gBAAgB,GAAG,SAAS,CAAC,gBAAgB,EAAE,EAAE,CAAC,YAAY,CAAC;oBAChE;gBACD;AACJ,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAE;AAEH,QAAA,SAAS,SAAS,CAAC,IAAI,EAAE,IAAI,EAAA;AAC3B,YAAA,IAAI,CAAC,OAAO,CAAE,CAAC,IAAI,KAAI;AACtB,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAChB,YAAA,CAAC,CAAE;AACH,YAAA,OAAO,IAAI;QACb;QAEA,MAAM,YAAY,GAAG,EAAE;QACvB,MAAM,YAAY,GAAG,EAAE;QAEvB,QAAQ,IAAI,QAAQ,CAAC,OAAO,CAAE,CAAC,EAAE,KAAI;AACnC,YAAA,EAAE,CAAC,cAAc,IAAI,EAAE,CAAC,cAAc,CAAC,OAAO,CAAE,CAAC,IAAI,KAAI;AACtD,gBAAA,IAAI,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAG;oBACpC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAE;gBAChD;AACA,gBAAA,IAAI,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAG;oBACnC,YAAY,CAAC,IAAI,CAAE,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAE;gBAClD;AACH,YAAA,CAAC,CAAE;AACL,QAAA,CAAC,CAAC;AACH,QAAA,IAAI,YAAY,CAAC,MAAM,GAAE,CAAC,EAAG;AAC1B,YAAA,MAAM,SAAS,GAAG,IAAI,QAAQ,EAAE;AAChC,YAAA,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC9B,YAAA,SAAS,CAAC,IAAI,GAAG,eAAe;AAChC,YAAA,SAAS,CAAC,QAAQ,GAAG,YAAY;AACjC,YAAA,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;QAC9B;AACA,QAAA,IAAI,YAAY,CAAC,MAAM,GAAE,CAAC,EAAG;AACxB,YAAA,MAAM,SAAS,GAAG,IAAI,QAAQ,EAAE;AAChC,YAAA,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC9B,YAAA,SAAS,CAAC,IAAI,GAAG,eAAe;AAChC,YAAA,SAAS,CAAC,QAAQ,GAAG,YAAY;AACjC,YAAA,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;QAChC;AACF,QAAA,OAAO,WAAW;AAGnB,IAAA,CAAC;IAEF,oBAAoB,CAAC,QAAQ,EAAE,IAAI,EAAA;QACjC,MAAM,iBAAiB,GAAG,EAAE;QAC5B,QAAQ,IAAI,QAAQ,CAAC,OAAO,CAAE,CAAC,EAAE,KAAI;AACjC,YAAA,MAAM,KAAK,GAAG,EAAE,CAAC,cAAc,GAAG,EAAE,CAAC,cAAc,GAAE,EAAE;YACvD,KAAK,CAAC,IAAI,CAAC,GAAG,GAAC,IAAI,CAAC,EAAE,CAAC;AACvB,YAAA,KAAK,CAAC,IAAI,CAAE,CAAC,GAAG,KAAI;gBACjB,IAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACjC,oBAAA,MAAM,WAAW,GAAG,IAAI,OAAO,EAAE;AACjC,oBAAA,WAAW,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,oBAAA,WAAW,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI;AAC1B,oBAAA,WAAW,CAAC,IAAI,GAAG,SAAS;AAC9B,oBAAA,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;gBACpC;AACH,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AACH,QAAA,OAAO,iBAAiB;IACzB;IAEC,eAAe,CAAC,MAAM,EAAE,SAAS,EAAA;AAC9B,QAAA,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC;IACpD;AAEF,IAAA,kBAAkB,CAAC,OAAO,EAAA;QACvB,IAAI,SAAS,GAAG,EAAE;AAClB,QAAA,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,CAAE,CAAC,IAAI,KAAI;YAC1C,IAAI,SAAS,GAAG,EAAE;YAClB,IAAI,KAAK,GAAG,EAAE;AACf,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACtB,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;YAC7C;iBAAO;AACJ,gBAAA,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO;YAChC;YAEA,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAG;gBAClC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAE,CAAC,SAAS,KAAI;AAC3C,oBAAA,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE;AAC1B,wBAAA,KAAK,GAAG,KAAK,GAAG,GAAG,GAAE,GAAG,GAAC,SAAS,CAAC,GAAG,CAAC,GAAE,GAAG;oBAC/C;AACE,oBAAA,KAAK,GAAG,KAAK,GAAG,GAAG;AACvB,gBAAA,CAAC,CAAC;YACL;iBAAO;AACH,gBAAA,KAAK,GAAI,IAAI,CAAC,IAAI,CAAC,IAAI;YAC3B;AACA,YAAA,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;AACzB,YAAA,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;AAC1B,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,SAAS;IACnB;IAEA,MAAM,2BAA2B,CAAC,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAA;AACvF,QAAA,MAAM,SAAS,GAAG,MAAM,IAAI,OAAO,CAAE,OAAO,OAAO,EAAE,MAAM,KAAI;YAC5D,MAAM,aAAa,GAAG,EAAE;AACxB,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM;YACpB,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YAC5E,MAAM,kBAAkB,GAAG,EAAE;AAE7B,YAAA,aAAa,CAAC,cAAc,IAAI,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACzE,gBAAA,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;AACnC,YAAA,CAAC,CAAC;AACF,YAAA,MAAM,iBAAiB,GAAG,IAAI,QAAQ,EAAE;AACxC,YAAA,iBAAiB,CAAC,IAAI,GAAG,YAAY;AACrC,YAAA,iBAAiB,CAAC,IAAI,GAAG,YAAY;AACrC,YAAA,iBAAiB,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AACtC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAChD,gBAAA,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE;AAC9B,gBAAA,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC3B,gBAAA,MAAM,CAAC,IAAI,GAAG,kBAAkB,CAAC,CAAC,CAAC;AACnC,gBAAA,MAAM,CAAC,IAAI,GAAG,WAAW;AAEzB,gBAAA,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;AAC3C,YAAA,CAAC;YACD,IAAI,iBAAiB,CAAC,QAAQ,CAAC,MAAM,GAAE,CAAC,EAAG;AACxC,gBAAA,iBAAiB,CAAC,IAAI,GAAG,iBAAiB,CAAC,IAAI,GAAC,GAAG,GAAE,iBAAiB,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG;gBAC5F,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC;YACpD;YAEA,IAAI,eAAe,GAAG,EAAE;YACxB,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,SAAS,CAAC;YACrE,MAAM,QAAQ,GAAG,GAAG;YACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;YAC/C,MAAM,aAAa,GAAG,MAAM;AAC1B,iBAAA,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,EAAE;AAC7B,iBAAA,IAAI,CAAC,CAAC,OAAO,KAAI;AAChB,gBAAA,eAAe,GAAG,OAAO,IAAI,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,EAAE;AAC7D,gBAAA,MAAM,MAAM,GAAG,IAAI,QAAQ,EAAE;AAC7B,gBAAA,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC3B,gBAAA,MAAM,CAAC,IAAI,GAAG,iBAAiB;AAC/B,gBAAA,MAAM,CAAC,IAAI,GAAG,iBAAiB;gBAC/B,MAAM,mBAAmB,GAAG,EAAE;AAC9B,gBAAA,eAAe,CAAC,OAAO,CAAE,CAAC,GAAG,KAAI;AAC/B,oBAAA,MAAM,GAAG,GAAG,IAAIwF,QAAM,EAAE;AACxB,oBAAA,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AACxB,oBAAA,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI;AACnB,oBAAA,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI;oBACnB,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACnC,oBAAA,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC;AAC/B,gBAAA,CAAC,CAAE;AAEH,gBAAA,IAAI,mBAAmB,CAAC,MAAM,GAAE,CAAC,EAAG;AACjC,oBAAA,MAAM,CAAC,QAAQ,GAAG,mBAAmB;AACrC,oBAAA,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,GAAE,GAAG,GAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG;oBAC3D,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;oBACtC,WAAW,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC;gBACxE;AACH,YAAA,CAAC,CAAC;AAEH,YAAA,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;YACjC,MAAM,gCAAgC,GAAG,IAAI,CAAC,kBAAkB,CAC9D,aAAa,EACd,8BAA8B,CAC9B;YACD,IAAI,oBAAoB,GAAG,EAAE;YAC7B,MAAM,UAAU,GAAI,MAAM;AACnB,iBAAA,GAAG,CAAC,gCAAgC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE;AACpE,iBAAA,IAAI,CAAE,CAAC,MAAM,KAAI;gBACb,MAAM,CAAC,IAAI,CAAC,OAAO,CAAE,CAAC,IAAI,KAAI;AAC5B,oBAAA,oBAAoB,CAAC,IAAI,CAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAC,cAAc,CAAC,CAAE;AAC3E,gBAAA,CAAC,CAAE;gBAAC;AACT,YAAA,CAAC,CAAC;AACR,YAAA,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;YAC9B,IAAI,kBAAkB,GAAG,EAAE;AAC3B,YAAA,oBAAoB,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;gBACrC,MAAM,MAAM,GAAI;AACT,qBAAA,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC;;AAElD,gBAAA,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;AAClC,YAAA,CAAC,CAAC;YACF,IAAI,iBAAiB,GAAG,EAAE;AAC1B,YAAA,MAAM,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAE,CAAC,MAAU,KAAI;gBACzD,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,GAAO,KAAI;oBACjC,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC7B,GAAG,CAAC,IAAI,CAAC,OAAO,CAAE,CAAC,EAAE,KAAG;AACtB,4BAAA,MAAM,IAAI,GAAG,IAAI,OAAO,EAAE;AACpB,4BAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AACzB,4BAAA,IAAI,CAAC,IAAI,GAAK,EAAE,CAAC,IAAI;AACrB,4BAAA,EAAE,CAAC,IAAI,GAAG,aAAa;AAC7B,4BAAA,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9B,wBAAA,CAAC,CAAC;oBACL;AACJ,gBAAA,CAAC,CAAC;AACF,gBAAA,MAAM,GAAG,GAAG,IAAI,QAAQ,EAAE;gBACtB,GAAG,CAAC,IAAI,GAAG,0BAA0B,GAAG,iBAAiB,CAAC,MAAM,GAAE,GAAG;AACrE,gBAAA,GAAG,CAAC,IAAI,GAAG,cAAc;AACzB,gBAAA,GAAG,CAAC,QAAQ,GAAG,iBAAiB;AAChC,gBAAA,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;gBACxB,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;AACzC,YAAA,CAAC,CAAC;AAEF,YAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,kBAAkB,CACnD,aAAa,EACb,kBAAkB,CAClB,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAEpB,IAAI,YAAY,GAAG,EAAE;YACrB,IAAI,cAAc,GAAG,EAAE;YACvB,IAAI,cAAc,GAAG,EAAE;YAEvB,MAAM,QAAQ,GAAG,MAAM;AACtB,iBAAA,GAAG,CAAC,oBAAoB,EAAE,QAAQ,EAAE,EAAE;AACtC,iBAAA,IAAI,CAAC,CAAC,QAAQ,KAAI;AACjB,gBAAA,YAAY,GAAG,QAAQ,CAAC,IAAI;AAC/B,YAAA,CAAC,CAAC;YAEF,MAAM,YAAY,GAAG,EAAE;AACvB,YAAA,YAAY,CAAC,OAAO,CAAG,CAAC,MAAM,KAAI;gBAC/B,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAC9C,MAAM,EACN,YAAY,CACb;gBACD,MAAM,MAAM,GAAI;AACT,qBAAA,GAAG,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE;AACrD,qBAAA,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5C,gBAAA,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;AAC7B,YAAA,CAAC,CAAC;AACF,YAAA,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAE,CAAC,MAAU,KAAI;gBACjD,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,GAAO,KAAI;AACpC,oBAAA,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;wBAChC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;AACzB,4BAAA,IAAG,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE;gCACrB,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,EAAE,CAAC;4BACzD;AAAO,iCAAA,IAAG,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,EAAC;gCAC3B,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,EAAE,CAAC;4BACzD;AACF,wBAAA,CAAC,CAAC;oBACL;yBAAO;AACH,wBAAA,IAAG,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE;AACpB,4BAAA,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;wBACnE;AAAO,6BAAA,IAAG,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,EAAC;AAC1B,4BAAA,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;wBACnE;oBACJ;AAED,gBAAA,CAAC,CAAC;AAED,gBAAA,MAAM,GAAG,GAAG,IAAI,QAAQ,EAAE;gBACxB,GAAG,CAAC,IAAI,GAAG,kBAAkB,GAAG,cAAc,CAAC,MAAM,GAAE,GAAG;AAC1D,gBAAA,GAAG,CAAC,IAAI,GAAG,YAAY;AACvB,gBAAA,GAAG,CAAC,QAAQ,GAAG,cAAc;AAC7B,gBAAA,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;gBACxB,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;AACrC,gBAAA,MAAM,OAAO,GAAG,IAAI,QAAQ,EAAE;gBAC5B,OAAO,CAAC,IAAI,GAAG,kBAAkB,GAAG,cAAc,CAAC,MAAM,GAAE,GAAG;AAC9D,gBAAA,OAAO,CAAC,IAAI,GAAG,YAAY;AAC3B,gBAAA,OAAO,CAAC,QAAQ,GAAG,cAAc;AACjC,gBAAA,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;gBAC5B,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;gBAC3C,OAAO,CAAC,mBAAmB,CAAC;AAC/B,YAAA,CAAC,CAAC;AACD,YAAA,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,CAAE,MAAK,EAAG,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEF,YAAY,GAAG,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,EAAA;YACxD,OAAO,EAAE,CAAC,QAAQ;AACrB,QAAA,CAAC,CAAC;AACD,QAAA,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC;AACtC,IAAA,CAAC;IAGD,MAAM,kCAAkC,CAAC,UAAU,EAAE,YAAY,EAAG,eAAe,EAAE,MAAM,EAAE,WAAW,EAAA;AACrG,QAAA,MAAM,SAAS,GAAG,MAAM,IAAI,OAAO,CAAE,OAAO,OAAO,EAAE,MAAM,KAAI;YAC5D,MAAM,aAAa,GAAG,EAAE;AACxB,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM;YACpB,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AAC/E,YAAA,MAAM,MAAM,GAAG,IAAI,QAAQ,EAAE;AAC5B,YAAA,MAAM,CAAC,IAAI,GAAG,YAAY;AAC1B,YAAA,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AAE5B,YAAA,UAAU,CAAC,YAAY,IAAI,UAAU,CAAC,YAAY,CAAC,OAAO,CAAE,CAAC,EAAE,KAAI;AACjE,gBAAA,MAAM,IAAI,GAAG,IAAI,SAAS,EAAE;AAC1B,gBAAA,IAAI,CAAC,IAAI,GAAG,EAAE;AACd,gBAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AACzB,gBAAA,IAAI,CAAC,IAAI,GAAG,mBAAmB;AACjC,gBAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5B,YAAA,CAAC,CAAC;AACF,YAAA,UAAU,CAAC,aAAa,IAAI,UAAU,CAAC,aAAa,CAAC,OAAO,CAAE,CAAC,EAAE,KAAI;AACnE,gBAAA,MAAM,IAAI,GAAG,IAAI,SAAS,EAAE;AAC3B,gBAAA,IAAI,CAAC,IAAI,GAAG,EAAE;AACd,gBAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AACzB,gBAAA,IAAI,CAAC,IAAI,GAAG,oBAAoB;AACjC,gBAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5B,YAAA,CAAC,CAAC;AACF,YAAA,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,GAAG,GAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG;YAC5D,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;YAEtC,MAAM,QAAQ,GAAG,GAAG;YACpB,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;YACxD,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAE,UAAU,EAAE,YAAY,CAAE;;AAE7E,YAAA,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,EAAE;AACjF,iBAAA,IAAI,CAAC,CAAC,GAAG,KAAI;AACZ,gBAAA,MAAM,MAAM,GAAE,IAAI,QAAQ,EAAE;gBAC5B,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,GAAE,aAAa;AAC5C,gBAAA,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;gBAC3B,GAAG,CAAC,IAAI,CAAC,OAAO,CAAE,CAAC,IAAI,KAAI;AACzB,oBAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAE;AAClD,gBAAA,CAAC,CAAC;AACF,gBAAA,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAC,GAAG;gBAC5D,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;AACvC,YAAA,CAAC,CAAC;AACF,YAAA,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;YAE9B,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;AACtD,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAE,UAAU,EAAE,UAAU,CAAE,CAAC;AAC1E,YAAA,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,eAAe,EAAE,eAAe,EAAE,EAAE;AAC1E,iBAAA,IAAI,CAAC,CAAC,MAAM,KAAI;AACf,gBAAA,MAAM,MAAM,GAAE,IAAI,QAAQ,EAAE;gBAC5B,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,GAAE,WAAW;AAC1C,gBAAA,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;gBAC3B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAE,CAAC,IAAI,KAAI;AAC5B,oBAAA,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE;AACvB,oBAAA,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE;AACf,oBAAA,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;AACnB,oBAAA,EAAE,CAAC,IAAI,GAAG,SAAS;AACnB,oBAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;AAC3B,gBAAA,CAAC,CAAC;AACF,gBAAA,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAC,GAAG;gBAC5D,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;AACvC,YAAA,CAAC,CAAC;AAEF,YAAA,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC;YAE3B,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,CAAE,MAAK;gBACnC,OAAO,CAAC,UAAU,CAAC;AACtB,YAAA,CAAC,CAAC;QAEL,CAAC,CAAC,CAAC;QACA,YAAY,GAAG,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,EAAA;YACvD,OAAO,EAAE,CAAC,QAAQ;AACtB,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC;IACtC;IAED,MAAM,4BAA4B,CAAC,YAAY,EAAE,WAAW,EAAE,QAAQ,GAAC,GAAG,EAAA;QACtE,MAAM,MAAM,GAAG,EAAE;QACjB,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;QACtD,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAE,YAAY,EAAE,UAAU,CAAE;AAC3E,QAAA,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,eAAe,EAAE,eAAe,EAAE,EAAE;AAC1E,aAAA,IAAI,CAAC,CAAC,MAAM,KAAI;YACf,MAAM,CAAC,IAAI,CAAC,OAAO,CAAE,CAAC,IAAI,KAAI;AAC5B,gBAAA,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE;AACvB,gBAAA,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AACvB,gBAAA,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE;AACjB,gBAAA,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;AACnB,gBAAA,EAAE,CAAC,IAAI,GAAG,SAAS;AACnB,gBAAA,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;AAClB,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC;IACtC;IAEA,MAAM,8BAA8B,CAC/B,cAAc,EACd,YAAY,EACZ,WAAW,EACX,MAAM,EACN,WAAW,EAAA;AAGd,QAAA,MAAM,WAAW,GAAG,MAAM,IAAI,OAAO,CAAE,OAAO,OAAO,EAAE,MAAM,KAAI;YAC9D,MAAM,aAAa,GAAG,EAAE;AACxB,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM;YACpB,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;AACvE,YAAA,MAAM,YAAY,GAAG,EAAE,CAAC,cAAc,GAAE,EAAE,CAAC,cAAc,GAAE,EAAE;AAE5D,YAAA,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,KAAI;AACxB,gBAAA,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE;AAC3B,gBAAA,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AACxB,gBAAA,GAAG,CAAC,IAAI,GAAG,IAAI;AACf,gBAAA,GAAG,CAAC,IAAI,GAAG,uBAAuB;gBAClC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;AACzC,YAAA,CAAC,CAAC;YACD,MAAM,QAAQ,GAAG,GAAG;YACpB,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;YACzD,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAE,sBAAsB,CAAC;YACzE,IAAI,eAAe,GAAG,EAAE;AACxB,YAAA,MAAM,iBAAiB,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,aAAa,EAAE,eAAe,EAAE,EAAE;AACjF,iBAAA,IAAI,CAAE,OAAO,MAAM,KAAI;AACrB,gBAAA,eAAe,GAAG,MAAM,CAAC,IAAI;AAC7B,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,QAAQ,CAAC;gBACrE,MAAM,QAAQ,GAAG,EAAE;AAClB,gBAAA,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,KAAK,EAAE,IAAI,EAAE,EAAE;AACvC,oBAAA,eAAe,CAAC,IAAI,GAAG,IAAI;AAC3B,oBAAA,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,GAAG,CACxB,aAAa,EACb,eAAe,EACf,EAAE,CAChB,CAAE,IAAI,CAAC,CAAC,UAAU,KAAI;wBACrB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC/B,4BAAA,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5B,wBAAA,CAAC,CAAC;AACJ,oBAAA,CAAC,CAAC;AACJ,oBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;AAC1B,oBAAA,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;AAClC,gBAAA,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAK;AAC9B,oBAAA,MAAM,WAAW,GAAG,IAAI,QAAQ,EAAE;AAClC,oBAAA,WAAW,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,oBAAA,eAAe,CAAC,OAAO,CAAE,CAAC,GAAG,KAAI;AAC9B,wBAAA,MAAM,MAAM,GAAG,IAAI,QAAQ,EAAE;AAC7B,wBAAA,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC3B,wBAAA,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE;AACpB,wBAAA,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI;AACtB,wBAAA,MAAM,CAAC,IAAI,GAAG,oBAAoB;AAClC,wBAAA,MAAM,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ;AAC9B,wBAAA,MAAM,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ;AAC9B,wBAAA,MAAM,CAAC,QAAQ,GAAG,IAAI;AACtB,wBAAA,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;AACpC,oBAAA,CAAC,CAAC;AACA,oBAAA,WAAW,CAAC,IAAI,GAAG,uBAAuB,GAAE,WAAW,CAAC,QAAQ,CAAC,MAAM,GAAE,GAAG;oBAC5E,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;AAClD,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC,CAAC;AACF,YAAA,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC;YAErC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,CAAE,MAAK;gBACnC,OAAO,CAAC,mBAAmB,CAAC;AAC/B,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;QACC,YAAY,GAAG,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,EAAA;YACvD,OAAO,EAAE,CAAC,QAAQ;AACtB,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC;IACvC;IAEC,eAAe,CAAC,gBAAgB,EAAE,YAAY,EAAA;AAC1C,QAAA,MAAM,cAAc,GAAG,IAAI,KAAK,CAC5B,IAAI,CAAC,QAAQ,EAAE,EACf,yBAAyB,EACzB,mCAAmC,CACtC;AACD,QAAA,MAAM,gBAAgB,GAAG,IAAI,KAAK,CAC9B,IAAI,CAAC,QAAQ,EAAE,EACf,2BAA2B,EAC3B,oCAAoC,CACvC;AACD,QAAA,MAAM,eAAe,GAAG,IAAI,KAAK,CAC7B,IAAI,CAAC,QAAQ,EAAE,EACf,0BAA0B,EAC1B,mCAAmC,CACtC;AACD,QAAA,MAAM,cAAc,GAAG,IAAI,KAAK,CAC5B,IAAI,CAAC,QAAQ,EAAE,EACf,yBAAyB,EACzB,kCAAkC,CACrC;AAED,QAAA,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,gBAAgB,EAAE,iCAAiC,CAAC;AAC/F,QAAA,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,gBAAgB,EAAE,iCAAiC,CAAC;AAC/F,QAAA,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,gBAAgB,EAAE,iCAAiC,CAAC;AAC/F,QAAA,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,gBAAgB,EAAE,iCAAiC,CAAC;AAC/F,QAAA,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,gBAAgB,EAAE,iCAAiC,CAAC;AAC/F,QAAA,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,gBAAgB,EAAE,iCAAiC,CAAC;AAC/F,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,gBAAgB,EAAE,kCAAkC,CAAC;AAC9F,QAAA,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,gBAAgB,EAAE,iCAAiC,CAAC;AAEjG,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1C,YAAA,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC;AAClC,YAAA,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AAEnD,YAAA,IAAI,UAAU,CAAC,QAAQ,KAAK,KAAK,EAAE;AAC/B,gBAAA,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;YAC5C;AAAO,iBAAA,IAAI,UAAU,CAAC,QAAQ,KAAK,OAAO,EAAE;AACxC,gBAAA,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;YAC9C;AAAO,iBAAA,IAAI,UAAU,CAAC,QAAQ,KAAK,MAAM,EAAE;AACvC,gBAAA,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;YAC7C;AAAO,iBAAA,IAAI,UAAU,CAAC,QAAQ,KAAK,KAAK,EAAE;AACtC,gBAAA,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;YAC5C;AAAO,iBAAA,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,EAAE;AACjE,gBAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;YACrC;AAAO,iBAAA,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,EAAE;AACjE,gBAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;YACrC;AAAO,iBAAA,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,EAAE;AACjE,gBAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;YACrC;AAAO,iBAAA,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,EAAE;AACjE,gBAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;YACrC;AAAO,iBAAA,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,EAAE;AACjE,gBAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;YACrC;AAAO,iBAAA,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,EAAE;AACjE,gBAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;YACrC;iBAAO,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,EAAE;AACnC,gBAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;YACnC;iBAAO,IACH,GAAG,KAAK,GAAG;AACX,gBAAA,GAAG,KAAK,GAAG;AACX,gBAAA,GAAG,KAAK,GAAG;AACX,gBAAA,GAAG,KAAK,GAAG;AACX,gBAAA,GAAG,KAAK,GAAG;AACX,gBAAA,GAAG,KAAK,GAAG;AACX,gBAAA,GAAG,KAAK,GAAG;AACX,gBAAA,GAAG,KAAK,GAAG;AACX,gBAAA,GAAG,KAAK,GAAG;gBACX,GAAG,KAAK,GAAG,EACb;AACE,gBAAA,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;YACvC;AACJ,QAAA,CAAC;QAED,IAAI,cAAc,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YACpC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAA;gBACvC,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;AACF,YAAA,cAAc,CAAC,IAAI,GAAG,cAAc,CAAC,IAAI,GAAG,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG;AACtF,YAAA,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;QAClD;QAEA,IAAI,gBAAgB,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YACtC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAA;gBACzC,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;AACF,YAAA,gBAAgB,CAAC,IAAI,GAAG,gBAAgB,CAAC,IAAI,GAAG,GAAG,GAAG,gBAAgB,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG;AAC5F,YAAA,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC;QACpD;QACA,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YACrC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAA;gBACxC,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;AACF,YAAA,eAAe,CAAC,IAAI,GAAG,eAAe,CAAC,IAAI,GAAG,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG;AACzF,YAAA,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC;QACnD;QACA,IAAI,cAAc,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YACpC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAA;gBACvC,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;AACF,YAAA,cAAc,CAAC,IAAI,GAAG,cAAc,CAAC,IAAI,GAAG,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG;AACtF,YAAA,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;QAClD;QACA,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAA;gBAChC,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG;AACjE,YAAA,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;QAC3C;QACA,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAA;gBAChC,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG;AACjE,YAAA,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;QAC3C;QACA,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAA;gBAChC,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG;AACjE,YAAA,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;QAC3C;QACA,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAA;gBAChC,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG;AACjE,YAAA,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;QAC3C;QACA,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAA;gBAChC,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG;AACjE,YAAA,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;QAC3C;QACA,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAA;gBAChC,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG;AACjE,YAAA,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;QAC3C;QACA,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3B,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAA;gBAC9B,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;AACF,YAAA,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG;AAC3D,YAAA,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QACzC;QACA,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/B,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAA;gBAClC,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;AACF,YAAA,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,GAAG,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG;AACvE,YAAA,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;QAC7C;AACA,QAAA,gBAAgB,CAAC,IAAI,GAAG,gBAAgB,CAAC,IAAI,GAAG,GAAG,GAAG,YAAY,CAAC,MAAM,GAAG,GAAG;AAC/E,QAAA,OAAO,gBAAgB;IAC3B;IAEA,MAAM,qCAAqC,CACvC,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,MAAM,EACN,WAAW,EAAA;AAEZ,QAAA,MAAM,SAAS,GAAG,MAAM,IAAI,OAAO,CAAC,OAAO,OAAO,EAAE,MAAM,KAAI;YAC3D,MAAM,aAAa,GAAG,EAAE;AACxB,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM;YACpB,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;YACrF,MAAM,QAAQ,GAAG,GAAG;AAExB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACrF,IAAI,iBAAiB,GAAG,EAAE;YAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;AAC7C,YAAA,MAAM,SAAS,GAAG,IAAI,QAAQ,EAAE;AAC9B,YAAA,SAAS,CAAC,IAAI,GAAE,yBAAyB;AACzC,YAAA,SAAS,CAAC,IAAI,GAAE,cAAc;AAC9B,YAAA,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,YAAA,MAAM,wBAAwB,GAAI,MAAM,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;AACpE,iBAAA,IAAI,CAAE,CAAC,MAAM,KAAI;gBAChB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAE,CAAC,EAAE,KAAI;AAC1B,oBAAA,MAAM,GAAG,GAAG,IAAI,OAAO,EAAE;AACrB,oBAAA,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AACxB,oBAAA,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI;AAClB,oBAAA,GAAG,CAAC,IAAI,GAAG,aAAa;AACxB,oBAAA,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC,UAAU,GAAE,KAAK,GAAE,IAAI;AACzC,oBAAA,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,QAAQ,GAAE,KAAK,GAAE,IAAI;AACrC,oBAAA,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC,QAAQ,GAAE,KAAK,GAAE,IAAI;AACvC,oBAAA,GAAG,CAAC,QAAQ,GAAG,KAAK;AACpB,oBAAA,GAAG,CAAC,eAAe,GAAG,EAAE,CAAC,eAAe,GAAE,EAAE,CAAC,eAAe,GAAC,IAAI;AACjE,oBAAA,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,GAAE,EAAE,CAAC,UAAU,GAAE,IAAI;AACnD,oBAAA,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS;AAC5B,oBAAA,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS;AAC5B,oBAAA,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;AAClC,gBAAA,CAAC,CAAE;AACL,gBAAA,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,GAAE,GAAG,GAAE,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAE,GAAG;gBACpE,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;AAC/C,YAAA,CAAC,CAAC;AACE,YAAA,aAAa,CAAC,IAAI,CAAC,wBAAwB,CAAC;YAE5C,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;YACtD,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,YAAY,CAAC;YAC9D,IAAI,GAAG,GAAG,EAAE;YACZ,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,eAAe,EAAE,EAAE;AACzD,iBAAA,IAAI,CAAC,CAAC,MAAM,KAAI;AACf,gBAAA,GAAG,GAAG,MAAM,CAAC,IAAI;AACjB,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,QAAQ,CAAC;gBACrE,MAAM,QAAQ,GAAG,EAAE;AACnB,gBAAA,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,KAAK,EAAE,IAAI,EAAE,EAAE;AACxC,oBAAA,eAAe,CAAC,IAAI,GAAG,IAAI;AAC3B,oBAAA,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAClB,GAAG,EACH,eAAe,EACf,EAAE,CAChB,CAAE,IAAI,CAAC,CAAC,UAAU,KAAI;wBACrB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC/B,4BAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AAChB,wBAAA,CAAC,CAAC;AACJ,oBAAA,CAAC,CAAC;AACJ,oBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;AAC1B,oBAAA,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;AACjC,gBAAA,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAK;AAC/B,oBAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE;AAC/B,oBAAA,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC7B,oBAAA,GAAG,CAAC,OAAO,CAAE,CAAC,IAAI,KAAI;AACnB,wBAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AACpD,oBAAA,CAAC,CAAC;AACD,oBAAA,QAAQ,CAAC,IAAI,GAAG,wBAAwB,GAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAE,GAAG;oBACtE,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC3C,gBAAA,CAAC,CAAC;AACL,YAAA,CAAC,CAAC;AACH,YAAA,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,CAAE,MAAK;gBAClC,OAAO,CAAC,mBAAmB,CAAC;AAChC,YAAA,CAAC,CAAE;AAEL,QAAA,CAAC,CAAC;QAED,YAAY,GAAG,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,EAAA;YACvD,OAAO,EAAE,CAAC,QAAQ;AACtB,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC;AACtC,IAAA,CAAC;IAEH,MAAM,4CAA4C,CAC5C,mBAAmB,EACnB,YAAY,EACZ,yBAAyB,EACzB,MAAM,EACN,WAAW,EAAA;QAEZ,MAAM,SAAS,GAAG,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrD,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM;YACpB,MAAM,aAAa,GAAG,EAAE;YACxB,MAAM,kBAAkB,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1G,MAAM,QAAQ,GAAG,GAAG;YACpB,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;YACtD,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,EAAE,cAAc,CAAC;YACvE,IAAI,OAAO,GAAG,EAAE;YAChB,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,eAAe,EAAE,EAAE;AACzD,iBAAA,IAAI,CAAC,CAAC,MAAM,KAAI;AACf,gBAAA,OAAO,GAAG,MAAM,CAAC,IAAI;AACrB,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,QAAQ,CAAC;gBACrE,MAAM,QAAQ,GAAG,EAAE;AACnB,gBAAA,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,KAAK,EAAE,IAAI,EAAE,EAAE;AACxC,oBAAA,eAAe,CAAC,IAAI,GAAG,IAAI;AAC3B,oBAAA,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAClB,GAAG,EACH,eAAe,EACf,EAAE,CAChB,CAAE,IAAI,CAAC,CAAC,UAAU,KAAI;wBACrB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC/B,4BAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AACpB,wBAAA,CAAC,CAAC;AACJ,oBAAA,CAAC,CAAC;AACJ,oBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;AAC1B,oBAAA,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;AACjC,gBAAA,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAK;AAC/B,oBAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE;AAC/B,oBAAA,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC7B,oBAAA,OAAO,CAAC,OAAO,CAAE,CAAC,EAAE,KAAI;AACrB,wBAAA,MAAM,IAAI,GAAG,IAAI,OAAO,EAAE;AAC1B,wBAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AACzB,wBAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE;AACjB,wBAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI;AACnB,wBAAA,IAAI,CAAC,IAAI,GAAG,aAAa;AACzB,wBAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AAC/B,oBAAA,CAAC,CAAC;AACA,oBAAA,QAAQ,CAAC,IAAI,GAAG,eAAe,GAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAE,GAAG;oBAC9D,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;AAClD,gBAAA,CAAC,CAAC;AACL,YAAA,CAAC,CAAC;AACF,YAAA,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;YAE7B,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;YAEvD,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,EAAE,UAAU,CAAC;YACpE,IAAI,QAAQ,GAAG,EAAE;YACjB,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,gBAAgB,EAAE,EAAE;AAC5D,iBAAA,IAAI,CAAC,CAAC,MAAM,KAAI;AACf,gBAAA,QAAQ,GAAG,MAAM,CAAC,IAAI;AACtB,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,QAAQ,CAAC;gBACrE,MAAM,SAAS,GAAG,EAAE;AACpB,gBAAA,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,KAAK,EAAE,IAAI,EAAE,EAAE;AACxC,oBAAA,gBAAgB,CAAC,IAAI,GAAG,IAAI;AAC5B,oBAAA,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,CACnB,IAAI,EACJ,gBAAgB,EAChB,EAAE,CAChB,CAAE,IAAI,CAAC,CAAC,UAAU,KAAI;wBACrB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC/B,4BAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACrB,wBAAA,CAAC,CAAC;AACJ,oBAAA,CAAC,CAAC;AACJ,oBAAA,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC;AAC5B,oBAAA,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC;AAClC,gBAAA,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,MAAK;AAChC,oBAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE;AAC/B,oBAAA,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC7B,oBAAA,QAAQ,CAAC,OAAO,CAAE,CAAC,EAAE,KAAI;AACtB,wBAAA,MAAM,IAAI,GAAG,IAAI,OAAO,EAAE;AAC1B,wBAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AACzB,wBAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE;AACjB,wBAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI;AACnB,wBAAA,IAAI,CAAC,IAAI,GAAG,SAAS;AACrB,wBAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AAC/B,oBAAA,CAAC,CAAC;AACD,oBAAA,QAAQ,CAAC,IAAI,GAAG,WAAW,GAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAE,GAAG;oBAC1D,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;AACjD,gBAAA,CAAC,CAAC;AACL,YAAA,CAAC,CAAC;AACH,YAAA,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;YAE9B,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,CAAE,MAAK;gBACnC,OAAO,CAAC,MAAM,CAAC;AAClB,YAAA,CAAC,CAAE;AAEL,QAAA,CAAC,CAAC;QAED,YAAY,GAAG,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,EAAA;YACvD,OAAO,EAAE,CAAC,QAAQ;AACtB,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC;AACtC,IAAA,CAAC;+GAz9BQ,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFd,MAAM,EAAA,CAAA,CAAA;;4FAET,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA;;;ACPD;AA2CM,MAAO,0BAA2B,SAAQ,sBAAsB,CAAA;IAsEpE,WAAA,CACoC,eAAgC,EAC9B,WAA4B,EACvD,UAAsB,EACtB,MAAqB,EACtB,iBAAoC,EACpC,cAAuC,EAAA;AAE9C,QAAA,KAAK,EAAE;QAP0B,IAAA,CAAA,eAAe,GAAf,eAAe;QACb,IAAA,CAAA,WAAW,GAAX,WAAW;QACtC,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,MAAM,GAAN,MAAM;QACP,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,cAAc,GAAd,cAAc;;QA1ExB,IAAA,CAAA,KAAK,GAAG,oBAAoB;QAE5B,IAAA,CAAA,MAAM,GAAG,CAAC;QACV,IAAA,CAAA,iBAAiB,GAAG,IAAI;QAExB,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,SAAS,GAAG,IAAI;QAChB,IAAA,CAAA,eAAe,GAAG,IAAI;QACtB,IAAA,CAAA,QAAQ,GAAG,EAAE;QACb,IAAA,CAAA,mBAAmB,GAAG,CAAC;QACvB,IAAA,CAAA,oBAAoB,GAAG,KAAK;QAC5B,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,qBAAqB,GAAG,CAAC;QACzB,IAAA,CAAA,sBAAsB,GAAG,KAAK;QAC9B,IAAA,CAAA,WAAW,GAAG,EAAE;QAChB,IAAA,CAAA,sBAAsB,GAAG,CAAC;QAC1B,IAAA,CAAA,uBAAuB,GAAG,KAAK;QAC/B,IAAA,CAAA,gBAAgB,GAAG,EAAE;QACrB,IAAA,CAAA,2BAA2B,GAAG,CAAC;QAC/B,IAAA,CAAA,4BAA4B,GAAG,KAAK;QACpC,IAAA,CAAA,oBAAoB,GAAG,EAAE;QACzB,IAAA,CAAA,+BAA+B,GAAG,CAAC;QACnC,IAAA,CAAA,gCAAgC,GAAG,KAAK;QACxC,IAAA,CAAA,uBAAuB,GAAG,EAAE;QAC5B,IAAA,CAAA,kCAAkC,GAAG,CAAC;QACtC,IAAA,CAAA,mCAAmC,GAAG,KAAK;QAC3C,IAAA,CAAA,OAAO,GAAG,EAAE;QACZ,IAAA,CAAA,oBAAoB,GAAG,iBAAiB;QAMxC,IAAA,CAAA,wBAAwB,GAAG,EAAE;QAC7B,IAAA,CAAA,iBAAiB,GAAG,EAAE;QACtB,IAAA,CAAA,mBAAmB,GAAG,EAAE;QACxB,IAAA,CAAA,oBAAoB,GAAG,EAAE;QACzB,IAAA,CAAA,mBAAmB,GAAG,EAAE;QACxB,IAAA,CAAA,gCAAgC,GAAG,EAAE;QAGrC,IAAA,CAAA,iBAAiB,GAAG,KAAK;QACzB,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,YAAY,GAAG,EAAE;QAUjB,IAAA,CAAA,SAAS,GAAG,EAAE;QAOd,IAAA,CAAA,mBAAmB,GAAO,EAAE;QAK5B,IAAA,CAAA,WAAW,GAAG,EAAE;;IAYhB;IAES,QAAQ,GAAA;QACd,IAAI,CAAC,iBAAiB,EAAE;IAC3B;AAEE,IAAA,eAAe,CAAC,QAAQ,EAAA;AACxB,QAAA,OAAO,SAAS,CAAC;AACf,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE;AACR,SAAA,CAAC;IACF;AAEF,IAAA,MAAM,iBAAiB,GAAA;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACpB,QAAA,MAAM,IAAI,CAAC,cAAc,EAAE;QAC3B,IAAI,CAAC,wBAAwB,EAAE;IAClC;IAEC,MAAM,eAAe,CAAE,QAAQ,EAAA;QAC5B,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;QACxD,OAAO,MAAM,IAAI,CAAC;AACjB,aAAA,GAAG,CAAC,CAAA,UAAA,CAAY,EAAE,iBAAiB,EAAE,EAAE;AACvC,aAAA,IAAI,CAAC,OAAO,MAAM,KAAI;AACpB,YAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,GAAE,MAAM,CAAC,IAAI,GAAE,EAAE;YAC9C,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,GAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,CAAC;AACzG,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AACnD,gBAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YACzB;iBAAO,IAAI,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAC9D,gBAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;AAClC,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,QAAQ,CAAC;gBACrE,MAAM,QAAQ,GAAG,EAAE;AACnB,gBAAA,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,KAAK,EAAE,IAAI,EAAE,EAAE;AACxC,oBAAA,iBAAiB,CAAC,IAAI,GAAG,IAAI;AAC7B,oBAAA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;AAC7B,yBAAA,GAAG,CACF,CAAA,UAAA,CAAY,EACX,iBAAiB,EAClB,EAAE,CACH,CAAC,IAAI,CAAC,CAAC,UAAU,KAAI;wBACpB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC/B,4BAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5B,wBAAA,CAAC,CAAC;AACJ,oBAAA,CAAC,CAAC;AACH,oBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;AAC1B,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;gBACpC;gBACA,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAK;;AAEhC,gBAAA,CAAC,CAAC;YACL;AACJ,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAG;YACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,OAAO,CAAC;QACnE,CAAC,CAAC,CAAC;IACN;IAEA,MAAM,aAAa,CAAC,QAAQ,EAAA;QAC3B,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;QACrD,OAAO,MAAM,IAAI,CAAC;AACX,aAAA,GAAG,CAAC,CAAA,QAAA,CAAU,EAAE,eAAe,EAAE,EAAE;AACnC,aAAA,IAAI,CAAE,OAAO,MAAM,KAAI;AACtB,YAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,GAAE,MAAM,CAAC,IAAI,GAAE,EAAE;YAC5C,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,GAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,CAAC;AACvG,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AAChD,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YACxB;iBAAO,IAAI,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAC5D,gBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,QAAQ,CAAC;gBACrE,MAAM,UAAU,GAAG,EAAE;AACrB,gBAAA,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,KAAK,EAAE,IAAI,EAAE,EAAE;AACxC,oBAAA,eAAe,CAAC,IAAI,GAAG,IAAI;AAC3B,oBAAA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;AAC5B,yBAAA,GAAG,CACF,CAAA,QAAA,CAAU,EACT,eAAe,EAChB,EAAE;AAEH,yBAAA,IAAI,CAAC,CAAC,UAAU,KAAI;wBACnB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC/B,4BAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1B,wBAAA,CAAC,CAAC;AACJ,oBAAA,CAAC,CAAC;AACJ,oBAAA,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;AAC5B,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;gBACpC;gBACA,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAK;;AAElC,gBAAA,CAAC,CAAC;YACJ;AACJ,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAG;YACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,OAAO,CAAC;AACjE,QAAA,CAAC,CAAC;IACR;IAEA,MAAM,oBAAoB,CAAC,QAAQ,EAAA;QAC9B,MAAM,uBAAuB,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;QAC/D,OAAO,MAAM,IAAI,CAAC;AACb,aAAA,GAAG,CAAC,CAAA,gBAAA,CAAkB,EAAE,uBAAuB,EAAE,EAAE;AACnD,aAAA,IAAI,CAAE,OAAO,MAAM,KAAI;AACtB,YAAA,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,IAAI,GAAE,MAAM,CAAC,IAAI,GAAE,EAAE;YACnD,IAAI,CAAC,2BAA2B,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,GAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,CAAC;AAChH,YAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE;AAChE,gBAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YACxB;iBAAO,IAAI,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACpE,gBAAA,IAAI,CAAC,4BAA4B,GAAG,IAAI;AACxC,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,QAAQ,CAAC;gBACrE,MAAM,WAAW,GAAG,EAAE;AACtB,gBAAA,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,KAAK,EAAE,IAAI,EAAE,EAAE;AACxC,oBAAA,uBAAuB,CAAC,IAAI,GAAG,IAAI;AACnC,oBAAA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;AAC5B,yBAAA,GAAG,CACF,CAAA,gBAAA,CAAkB,EACjB,uBAAuB,EACxB,EAAE;AAEH,yBAAA,IAAI,CAAC,CAAC,UAAU,KAAI;AACnB,wBAAA,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAClD,4BAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;AAClC,wBAAA,CAAC,CAAC;AACJ,oBAAA,CAAC,CAAC;AACJ,oBAAA,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;AAC7B,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;gBACpC;gBAEA,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAK;;AAEnC,gBAAA,CAAC,CAAC;YACJ;AACL,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAG;YACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,OAAO,CAAC;AACxE,QAAA,CAAC,CAAC;IACR;IAEA,MAAM,gBAAgB,CAAC,QAAQ,EAAA;QAC1B,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;QACrD,OAAO,MAAM,IAAI,CAAC;AACd,aAAA,GAAG,CAAC,CAAA,YAAA,CAAc,EAAE,cAAc,EAAE,EAAE;AACtC,aAAA,IAAI,CAAE,OAAO,MAAM,KAAI;AACtB,YAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,GAAE,MAAM,CAAC,IAAI,GAAE,EAAE;YAC/C,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,GAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,CAAC;AAC1G,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;AACtD,gBAAA,IAAI,CAAC,WAAW,GAAG,EAAE;AACrB,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YACxB;iBAAO,IAAI,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAC/D,gBAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI;AACnC,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,QAAQ,CAAC;gBACrE,MAAM,UAAU,GAAG,EAAE;AACrB,gBAAA,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,KAAK,EAAE,IAAI,EAAE,EAAE;AACxC,oBAAA,cAAc,CAAC,IAAI,GAAG,IAAI;AAC1B,oBAAA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;AAC5B,yBAAA,GAAG,CACF,CAAA,YAAA,CAAc,EACb,cAAc,EACf,EAAE;AAEH,yBAAA,IAAI,CAAC,CAAC,UAAU,KAAI;wBACnB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC/B,4BAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7B,wBAAA,CAAC,CAAC;AACJ,oBAAA,CAAC,CAAC;AACJ,oBAAA,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;AAC5B,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;gBACpC;gBACA,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAK;;AAEjC,gBAAA,CAAC,CAAC;YACL;AACL,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAG;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,OAAO,CAAC;AACpE,QAAA,CAAC,CAAC;IACP;IAED,MAAM,sBAAsB,CAAC,QAAQ,EAAA;AAChC,QAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE;QAC9B,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;QACxD,OAAO,MAAM,IAAI,CAAC;AACb,aAAA,GAAG,CAAC,CAAA,oBAAA,CAAsB,EAAE,iBAAiB,EAAE,EAAE;AACjD,aAAA,IAAI,CAAC,OAAO,MAAM,KAAI;AACrB,YAAA,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,IAAI,GAAE,MAAM,CAAC,IAAI,GAAE,EAAE;YACxD,IAAI,CAAC,+BAA+B,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,GAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,CAAC;AACnH,YAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,KAAK,CAAC,EAAE;AACxE,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YACxB;iBAAO,IAAI,IAAI,CAAC,+BAA+B,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACxE,gBAAA,IAAI,CAAC,gCAAgC,GAAG,IAAI;AAC5C,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,QAAQ,CAAC;gBACrE,MAAM,UAAU,GAAG,EAAE;AACrB,gBAAA,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,KAAK,EAAE,IAAI,EAAE,EAAE;AACxC,oBAAA,iBAAiB,CAAC,IAAI,GAAG,IAAI;AAC7B,oBAAA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;AAC5B,yBAAA,GAAG,CACF,CAAA,oBAAA,CAAsB,EACrB,iBAAiB,EAClB,EAAE;AAEH,yBAAA,IAAI,CAAC,CAAC,UAAU,KAAI;wBACnB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC/B,4BAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;AACtC,wBAAA,CAAC,CAAC;AACJ,oBAAA,CAAC,CAAC;AACJ,oBAAA,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;AAC5B,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;gBACpC;gBAEA,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAK;;AAElC,gBAAA,CAAC,CAAC;YACJ;AACL,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAG;YACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC;AACtE,QAAA,CAAC,CAAC;IACR;IACA,MAAM,8BAA8B,CAAC,QAAQ,EAAA;AACzC,QAAA,IAAI,CAAC,uBAAuB,GAAG,EAAE;QACjC,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;QAClD,OAAO,MAAM,IAAI,CAAC;AACZ,aAAA,GAAG,CAAC,CAAA,4BAAA,CAA8B,EAAE,WAAW,EAAE,EAAE;AACnD,aAAA,IAAI,CAAC,OAAO,MAAM,KAAI;AACpB,YAAA,IAAI,CAAC,uBAAuB,GAAG,MAAM,CAAC,IAAI,GAAE,MAAM,CAAC,IAAI,GAAE,EAAE;YAC3D,IAAI,CAAC,kCAAkC,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,GAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,CAAC;AACvH,YAAA,IAAI,CAAC,IAAI,CAAC,uBAAuB,IAAI,IAAI,CAAC,uBAAuB,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9E,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YACxB;iBAAO,IAAI,IAAI,CAAC,kCAAkC,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAC3E,gBAAA,IAAI,CAAC,mCAAmC,GAAG,IAAI;AAC/C,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,QAAQ,CAAC;gBACrE,MAAM,UAAU,GAAG,EAAE;AACrB,gBAAA,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,KAAK,EAAE,IAAI,EAAE,EAAE;AACxC,oBAAA,WAAW,CAAC,IAAI,GAAG,IAAI;AACvB,oBAAA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;AAC5B,yBAAA,GAAG,CACF,CAAA,4BAAA,CAA8B,EAC7B,WAAW,EACZ,EAAE;AAEH,yBAAA,IAAI,CAAC,CAAC,UAAU,KAAI;wBACnB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC/B,4BAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;AACzC,wBAAA,CAAC,CAAC;AACJ,oBAAA,CAAC,CAAC;AACJ,oBAAA,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;AAC5B,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;gBACpC;gBACA,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAK;;AAElC,gBAAA,CAAC,CAAC;YACJ;AACL,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAG;YACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gDAAgD,EAAE,KAAK,CAAC;AAC9E,QAAA,CAAC,CAAC;IACR;IACA,MAAM,YAAY,CAAC,QAAQ,EAAA;AACxB,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;QACjB,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;QACrD,OAAO,MAAM,IAAI,CAAC;AACX,aAAA,GAAG,CAAC,CAAA,OAAA,CAAS,EAAE,cAAc,EAAE,EAAE;AACjC,aAAA,IAAI,CAAC,OAAO,MAAM,KAAI;AACrB,YAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,GAAE,MAAM,CAAC,IAAI,GAAE,EAAE;YAC5C,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,GAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,CAAC;AACtG,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9C,gBAAA,IAAI,CAAC,OAAO,GAAG,EAAE;YACnB;AAAO,iBAAA,IAAI,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACtD,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,QAAQ,CAAC;gBACrE,MAAM,UAAU,GAAG,EAAE;AACrB,gBAAA,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,KAAK,EAAE,IAAI,EAAE,EAAE;AACxC,oBAAA,cAAc,CAAC,IAAI,GAAG,IAAI;AAC1B,oBAAA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;AAC5B,yBAAA,GAAG,CACF,CAAA,OAAA,CAAS,EACR,cAAc,EACf,EAAE;AAEH,yBAAA,IAAI,CAAC,CAAC,UAAU,KAAI;wBACnB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC/B,4BAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB,wBAAA,CAAC,CAAC;AACJ,oBAAA,CAAC,CAAC;AACJ,oBAAA,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;AAC5B,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;gBACpC;gBACA,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAK;AACjC,oBAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM;AAC/C,gBAAA,CAAC,CAAC;YACJ;AACH,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAG;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC;AACtD,QAAA,CAAC,CAAC;IAEX;AAEA,IAAA,MAAM,cAAc,GAAA;QAClB,MAAM,SAAS,GAAI,MAAM,IAAI,OAAO,CAAG,CAAC,OAAO,EAAE,MAAM,KAAI;YACzD,IAAI,kBAAkB,GAAE,EAAE;YAC1B,MAAM,QAAQ,GAAG,GAAG;YACpB,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;AAC1C,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;YAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;AACvC,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC;AAC/C,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;AAC3C,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;YAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC;AAClD,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,8BAA8B,CAAC,QAAQ,CAAC;AAC3D,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;YAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;AACvC,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACjE,QAAA,CAAC,CAAC;IACJ;IAEC,wBAAwB,GAAA;AAClB,QAAA,IAAI;YACA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAClD,0BAA0B,EAC1B,4BAA4B,EAC5B,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,oBAAoB,EACzB,IAAI,CAAC,uBAAuB,EAC5B,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,sBAAsB,EACjF,IAAI,CAAC,2BAA2B,EAAE,IAAI,CAAC,+BAA+B,EACtE,IAAI,CAAC,kCAAkC,EACvC,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,4BAA4B,EAAE,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,uBAAuB,EACvH,IAAI,CAAC,gCAAgC,EAAE,IAAI,CAAC,mCAAmC,CAClF;AAED,YAAA,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;YAC5B,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,EAAA;gBACjD,OAAO,CAAC,CAAC,QAAQ;AACrB,YAAA,CAAC,CAAC;;AAEF,YAAA,IAAI,CAAC,wBAAwB,GAAG,EAAE;AAClC,YAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;AAC3B,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,YAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE;AAC9B,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,YAAA,IAAI,CAAC,gCAAgC,GAAG,EAAE;AAE1C,YAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,yBAAyB,CAC1D,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,wBAAwB,EAC7B,eAAe,CAClB;AACD,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,yBAAyB,CACnD,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,iBAAiB,EACtB,SAAS,CACZ;AACD,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,yBAAyB,CACrD,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,mBAAmB,EACxB,UAAU,CACb;AACD,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,yBAAyB,CACtD,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,oBAAoB,EACzB,QAAQ,CACX;AAED,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,yBAAyB,CACrD,IAAI,CAAC,oBAAoB,EACzB,IAAI,CAAC,mBAAmB,EACxB,eAAe,CAClB;AAED,YAAA,IAAI,CAAC,gCAAgC,GAAG,IAAI,CAAC,yBAAyB,CAClE,IAAI,CAAC,uBAAuB,EAC5B,IAAI,CAAC,gCAAgC,EACrC,uBAAuB,CAC1B;YAED,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC;QAC1D;QAAE,OAAO,GAAO,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;QAClC;AAEA,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;IAC5B;AAEC,IAAA,yBAAyB,CAAC,cAAc,EAAE,GAAG,EAAE,QAAQ,EAAA;QACrD,cAAc,IAAI,cAAc,CAAC,OAAO,CAAE,CAAC,EAAE,KAAI;AAChD,YAAA,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;AAClB,QAAA,CAAC,CAAC;AACH,QAAA,OAAO,GAAG;IACX;AAED,IAAA,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,GAAG,EAAA;AAC1B,QAAA,IAAI,KAAK;AACT,QAAA,OAAO,CAAC,GAAG,IAAI,KAAI;AACjB,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;YAC7B,YAAY,CAAC,KAAK,CAAC;YACnB,KAAK,GAAG,UAAU,CAAC,MAAK,EAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;AAChE,QAAA,CAAC;IACH;AAEA,IAAA,cAAc,CAAC,KAAK,EAAA;AACnB,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,KAAI,QAAQ,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,IAAI,KAAK,CAAC,GAAG,KAAI,WAAW,IAAI,KAAK,CAAC,GAAG,KAAI,OAAO,EAAE;AACzI,YAAA,IAAI,CAAC,oBAAoB,GAAG,iBAAiB;YAC7C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzC;IACD;AAEE,IAAA,kBAAkB,CAAC,KAAK,EAAA;AACpB,QAAA,MAAM,GAAG,GAAG,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE;AAC3C,QAAA,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC;IAC1C;IAEA,mBAAmB,GAAA;AACf,QAAA,IAAI,CAAC,oBAAoB,GAAG,iBAAiB;AAC7C,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;QACrB,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,qBAAqB,EAAE;QAC5B,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;AAC9B,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;YAC7B,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;YACpD;QACJ;AACA,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,QAAA,IAAI,CAAC,mBAAmB,GAAE,EAAE;QAC5B,IAAI,IAAI,CAAC,YAAY,KAAK,kBAAkB,IAAI,IAAI,CAAC,4BAA4B,EAAE;AAC/E,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,wBAAwB;QAC5D;aAAO,IAAI,IAAI,CAAC,YAAY,KAAK,UAAU,IAAI,IAAI,CAAC,oBAAoB,EAAE;AACtE,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,iBAAiB;QACrD;aAAO,IAAI,IAAI,CAAC,YAAY,KAAK,YAAY,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAC1E,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB;QACvD;aAAO,IAAI,IAAI,CAAC,YAAY,KAAK,cAAc,IAAI,IAAI,CAAC,uBAAuB,EAAE;AAC7E,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,oBAAoB;QACxD;aAAO,IAAI,IAAI,CAAC,YAAY,KAAK,sBAAsB,IAAI,IAAI,CAAC,gCAAgC,EAAE;AAC9F,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB;QACvD;aAAO,IAAI,IAAI,CAAC,YAAY,KAAK,8BAA8B,IAAI,IAAI,CAAC,mCAAmC,EAAE;AACzG,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,gCAAgC;QACpE;QAEA,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,UAAU,CAAC;QACtD;IACJ;AAEA,IAAA,4BAA4B,CAAC,SAAS,EAAA;QACpC,IAAI,IAAI,CAAC,YAAY,KAAK,EAAE,IAAI,SAAS,KAAK,EAAE,EAAE;AACzC,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;YAC9B;QACR;aAAO;AACF,YAAA,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC;QACzC;IACF;AAEA,IAAA,oBAAoB,CAAC,SAAS,EAAA;AAC1B,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,SAAS,KAAK,EAAE,EAAE;YAClB,IAAI,CAAC,qBAAqB,EAAE;QAChC;aAAO;YACH,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,qBAAqB,EAAE;YAE5B,IAAI,KAAK,GAAG,EAAE;YACd,IAAI,WAAW,GAAG,EAAE;YACpB,MAAM,OAAO,GAAG,EAAE;YAClB,IAAI,IAAI,CAAC,YAAY,KAAK,kBAAkB,IAAI,CAAC,IAAI,CAAC,4BAA4B,EAAE;AAChF,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;gBACtE,MAAM,EAAE,GAAO,IAAI,CAAC,cAAc,CAAC,uBAAuB,CAAC,KAAK,CAAC;;AAEjE,gBAAA,IAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;AACvC,oBAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtC;AAED,gBAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,EAAA;oBAChE,OAAO,EAAE,CAAC,QAAQ;AACvB,gBAAA,CAAC,CAAC;AACF,gBAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,EAAC,CAAC,KAAI;AACzC,oBAAA,IAAI,CAAC,KAAI,CAAC,EAAE;AACT,wBAAA,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;oBACzB;AACH,gBAAA,CAAC,CAAE;AACH,gBAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,gBAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,KAAK;gBAChC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,gBAAA,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC;YACrF;iBAAO,IAAI,IAAI,CAAC,YAAY,KAAK,kBAAkB,IAAI,IAAI,CAAC,4BAA4B,EAAE;AACtF,gBAAA,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC;YACrF;iBAAO,IAAI,IAAI,CAAC,YAAY,KAAK,cAAc,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE;AAC9E,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;gBACtE,MAAM,EAAE,GAAO,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,KAAK,CAAC;;AAE9D,gBAAA,IAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;AACvC,oBAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtC;AACD,gBAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,EAAA;oBAChE,OAAO,EAAE,CAAC,QAAQ;AACvB,gBAAA,CAAC,CAAC;AACF,gBAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,EAAC,CAAC,KAAI;AACzC,oBAAA,IAAI,CAAC,KAAK,CAAC,EAAE;AACX,wBAAA,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;oBACxB;AACH,gBAAA,CAAC,CAAE;AACH,gBAAA,IAAI,CAAC,WAAW,GAAG,EAAE;AACrB,gBAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK;gBAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAE9B,gBAAA,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC;YACrF;iBAAO,IAAI,IAAI,CAAC,YAAY,KAAK,cAAc,IAAI,IAAI,CAAC,uBAAuB,EAAE;AAC7E,gBAAA,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC;YACrF;iBAAO,IAAI,IAAI,CAAC,YAAY,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;AACvE,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;gBACtE,MAAM,EAAE,GAAO,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAC3D,gBAAA,EAAE,CAAC,YAAY,GAAG,SAAS;AAC3B,gBAAA,IAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;AACxC,oBAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrC;AACD,gBAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,EAAA;oBAChE,OAAO,EAAE,CAAC,QAAQ;AACvB,gBAAA,CAAC,CAAC;AACF,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,gBAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK;gBACxB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,gBAAA,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC;AACjF,gBAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,EAAC,CAAC,KAAI;AAC1C,oBAAA,IAAK,CAAC,KAAK,CAAC,EAAE;AACZ,wBAAA,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;oBACxB;AACF,gBAAA,CAAC,CAAE;YAEP;iBAAO,IAAI,IAAI,CAAC,YAAY,KAAK,UAAU,IAAI,IAAI,CAAC,oBAAoB,EAAE;AACtE,gBAAA,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC;YACrF;iBAAO,IAAI,IAAI,CAAC,YAAY,KAAK,YAAY,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;AAC3E,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;gBACtE,MAAM,EAAE,GAAO,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,KAAK,CAAC;AAC5D,gBAAA,EAAE,CAAC,YAAY,GAAG,SAAS;AAC3B,gBAAA,IAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;AACzC,oBAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrC;AACA,gBAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,EAAA;oBAChE,OAAO,EAAE,CAAC,QAAQ;AACvB,gBAAA,CAAC,CAAC;AAEF,gBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE;AACvB,gBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK;gBAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,gBAAA,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC;AACjF,gBAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,EAAC,CAAC,KAAI;AAC1C,oBAAA,IAAI,CAAC,KAAK,CAAC,EAAE;AACX,wBAAA,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;oBACxB;AACF,gBAAA,CAAC,CAAE;YACP;iBAAO,IAAI,IAAI,CAAC,YAAY,KAAK,YAAY,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAC1E,gBAAA,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC;YACrF;iBAAO,IAAI,IAAI,CAAC,YAAY,KAAK,sBAAsB,IAAI,CAAC,IAAI,CAAC,gCAAgC,EAAE;AAChG,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;gBACrE,MAAM,EAAE,GAAO,IAAI,CAAC,cAAc,CAAC,0BAA0B,CAAC,KAAK,CAAC;AACpE,gBAAA,EAAE,CAAC,YAAY,GAAG,SAAS;AAE3B,gBAAA,IAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;AACzC,oBAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpC;AACD,gBAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,EAAA;oBAChE,OAAO,EAAE,CAAC,QAAQ;AACvB,gBAAA,CAAC,CAAC;AACF,gBAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,EAAC,CAAC,KAAI;AAC1C,oBAAA,IAAI,CAAC,KAAK,CAAC,EAAE;AACX,wBAAA,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;oBACxB;AACF,gBAAA,CAAC,CAAE;AACH,gBAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AAChE,gBAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE;AAC9B,gBAAA,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,GAAG,KAAK;gBACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,gBAAA,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC;YACrF;iBAAO,IAAI,IAAI,CAAC,YAAY,KAAK,sBAAsB,IAAI,IAAI,CAAC,gCAAgC,EAAE;AAC7F,gBAAA,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC;YACtF;iBAAO,IAAI,IAAI,CAAC,YAAY,KAAK,8BAA8B,IAAI,CAAC,IAAI,CAAC,mCAAmC,EAAE;AAC1G,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;gBACtE,MAAM,EAAE,GAAO,IAAI,CAAC,cAAc,CAAC,iCAAiC,CAAC,KAAK,CAAC;AAC3E,gBAAA,EAAE,CAAC,YAAY,GAAG,SAAS;AAC3B,gBAAA,IAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;AACxC,oBAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtC;AACA,gBAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,EAAA;oBAChE,OAAO,EAAE,CAAC,QAAQ;AACvB,gBAAA,CAAC,CAAC;AACF,gBAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,EAAC,CAAC,KAAI;AAC1C,oBAAA,IAAI,CAAC,KAAK,CAAC,EAAE;AACX,wBAAA,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;oBACxB;AACF,gBAAA,CAAC,CAAE;AACH,gBAAA,IAAI,CAAC,uBAAuB,GAAG,EAAE;AACjC,gBAAA,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,GAAG,KAAK;gBACvC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,gBAAA,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC;YACrF;iBAAO,IAAI,IAAI,CAAC,YAAY,KAAK,8BAA8B,IAAI,IAAI,CAAC,mCAAmC,EAAE;AACxG,gBAAA,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC;YACtF;;YAEA,KAAK,GAAG,IAAI,CAAC,4BAA4B,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC;YACtE,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,EAAE;AACxC,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;gBAC3B,IAAI,CAAC,qBAAqB,EAAE;YAChC;iBAAO;AACH,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC;;;gBAG3B,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAM,EAAA;AAC1C,oBAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,CAAC;;AAE1C,oBAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,CAAC;AACvD,oBAAA,IAAI,QAAQ,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE,IAAI,QAAQ,KAAK,QAAQ,EAAE;AAC7E,wBAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;oBAC7C;AACJ,gBAAA,CAAC,CAAC;YACN;QAEJ;IACJ;IAEA,YAAY,CAAC,QAAY,EAAE,EAAE,EAAA;QAC5B,OAAO,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAE,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,KAAI,EAAE,CAAC,IAAI,CAAE;IACjE;AAEA,IAAA,4BAA4B,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,EAAA;AACtD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,WAAW,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzD,YAAA,IAAI,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC;AACrB,YAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AAChB,YAAA,OAAO,EAAE,CAAC,MAAM,EAAE;AACf,gBAAA,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;gBAC1C,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;AAC9B,oBAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;AACpB,oBAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC;gBACxB;AACA,gBAAA,EAAE,GAAG,EAAE,CAAC,MAAM;YACjB;QACH;AACE,QAAA,OAAO,KAAK;IAChB;AAEA,IAAA,uBAAuB,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAA;QACnD,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC;;QAExC,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,CAAC;QAClD,IAAI,CAAC,IAAI,EAAE;YACP;QACJ;AACA,QAAA,IAAI,UAAU,IAAI,UAAU,KAAK,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE,EAAE;AACtF,YAAA,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;QAC7B;AACA,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,SAAS;AAC1E,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,UAAU,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtD,YAAA,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC;QACvE;AACA,QAAA,OAAO,WAAW;IACtB;IAEA,qBAAqB,GAAA;QACjB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAAE,UAAsB,CAAK,EAAA;AAC7D,YAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC;AAC5C,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,CAAK,EAAA;YACtD,OAAO,CAAC,CAAC,SAAS,GAAG,kBAAkB,GAAG,MAAM;AACpD,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,EAAA;QAC5B,MAAM,OAAO,GAAG,EAAE;AAClB,QAAA,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACxC,YAAA,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AAClB,YAAA,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;gBACvC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC;YACA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACrB,YAAA,IAAI,CAAC,GAAG,CAAC,EAAE;AACP,gBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC;YAC/B;YACA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B;AACA,QAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AAC9B,QAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AAE9B,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC;AACrB,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,kBAAkB,EAAE;YAC1C,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7C;AAAO,aAAA,IAAI,IAAI,CAAC,YAAY,KAAK,UAAU,EAAE;YACzC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7C;AAAO,aAAA,IAAI,IAAI,CAAC,YAAY,KAAK,YAAY,EAAE;YAC3C,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7C;AAAO,aAAA,IAAI,IAAI,CAAC,YAAY,KAAK,cAAc,EAAE;YAC7C,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7C;AAAO,aAAA,IAAI,IAAI,CAAC,YAAY,KAAK,sBAAsB,EAAE;YACrD,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7C;AAAO,aAAA,IAAI,IAAI,CAAC,YAAY,KAAK,8BAA8B,EAAE;YAC7D,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7C;AACA,QAAA,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC;AACjF,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;;;YAGxC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;;gBAErC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AACzB,gBAAA,IAAI,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE;AACvC,oBAAA,MAAM,SAAS,GAAG,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC,SAAS,CAAC;AAC3D,oBAAA,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,UAAU,MAAM,EAAA;AACzC,wBAAA,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;AAC9C,oBAAA,CAAC,CAAC;AACF,oBAAA,EAAE,CAAC,QAAQ,GAAG,GAAG;AACjB,oBAAA,EAAE,CAAC,SAAS,GAAG,IAAI;AACnB,oBAAA,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,UAAU,OAAO,EAAA;wBAC9C,OAAO,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE;AACzC,oBAAA,CAAC,CAAC;AACF,oBAAA,SAAS,CAAC,QAAQ,GAAG,MAAM;oBAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC;oBAC3C;gBACJ;YACJ;iBAAO;AACH,gBAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE;AACxC,oBAAA,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,UAAU,MAAM,EAAA;AAC1C,wBAAA,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;AAC9C,oBAAA,CAAC,CAAC;AACF,oBAAA,SAAS,CAAC,QAAQ,GAAG,GAAG;AACxB,oBAAA,SAAS,CAAC,SAAS,GAAG,IAAI;oBAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC;oBAC3C;gBACJ;YACJ;QACJ;AACA,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC;AACrB,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,kBAAkB,EAAE;YAC1C,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClD;AAAO,aAAA,IAAI,IAAI,CAAC,YAAY,KAAK,UAAU,EAAE;YACzC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClD;AAAO,aAAA,IAAI,IAAI,CAAC,YAAY,KAAK,YAAY,EAAE;YAC3C,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClD;AAAO,aAAA,IAAI,IAAI,CAAC,YAAY,KAAK,cAAc,EAAE;YAC7C,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClD;AAAO,aAAA,IAAI,IAAI,CAAC,YAAY,KAAK,sBAAsB,EAAE;YACrD,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClD;AAAO,aAAA,IAAI,IAAI,CAAC,YAAY,KAAK,8BAA8B,EAAE;YAC7D,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClD;AACA,QAAA,IAAI,SAAS,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE;YACnC,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,MAAM,EAAA;AAClD,gBAAA,OAAO,MAAM,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;AACzC,YAAA,CAAC,CAAC;AACF,YAAA,SAAS,CAAC,QAAQ,GAAG,GAAG;YACxB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC;QAC/C;aAAO;AACH,YAAA,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ;AACrC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,gBAAA,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE;;AAEvC,oBAAA,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,MAAM,EAAA;AACtD,wBAAA,OAAO,MAAM,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;AACzC,oBAAA,CAAC,CAAC;AACF,oBAAA,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,GAAG;AAC5B,oBAAA,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,UAAU,OAAO,EAAA;AAC9C,wBAAA,OAAO,OAAO,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;AAC1C,oBAAA,CAAC,CAAC;AACF,oBAAA,SAAS,CAAC,QAAQ,GAAG,MAAM;oBAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC;oBAC3C;gBACJ;YACJ;QACJ;QAEA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC;AAC3C,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC;QAE9B,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAoB,CAAK,EAAA;AACtD,YAAA,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;AACjC,gBAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC;YAC1C;iBAAO;AACH,gBAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC;YAC5C;AACJ,QAAA,CAAC,CAAC;IACN;IAEA,eAAe,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC;YACtD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC;QAC5C;IACJ;AAEA,IAAA,SAAS,CAAC,WAAW,EAAA;QACjB,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,WAAW,EAAE;YACb,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,eAAe,EAAE;QAC1B;AACA,QAAA,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAChD,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC3B,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;AACjB,gBAAA,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,QAAQ;AACxB,gBAAA,CAAC,CAAC,QAAQ,GAAG,IAAI;AACjB,gBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YACtB;QACJ;AACA,QAAA,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC5C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACvB,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;AACjB,gBAAA,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,QAAQ;AACxB,gBAAA,CAAC,CAAC,QAAQ,GAAG,IAAI;AACjB,gBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YACtB;QACJ;QAEA,IAAI,CAAC,qBAAqB,EAAE;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;QACnB,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,CAAC,SAAS,EAAE;IACpB;AACA,IAAA,MAAM,CAAC,CAAC,EAAA;AACJ,QAAA,IAAI,CAAC,CAAC,SAAS,EAAE;AACb,YAAA,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,SAAS;AACxB,YAAA,CAAC,CAAC,SAAS,GAAG,IAAI;QACtB;IACJ;IAEA,QAAQ,GAAA;AACJ,QAAA,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAChD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACvB,YAAA,IAAI,CAAC,CAAC,QAAQ,EAAE;AACZ,gBAAA,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,QAAQ;AACxB,gBAAA,CAAC,CAAC,QAAQ,GAAG,IAAI;AACjB,gBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YACtB;QACJ;IACJ;IACD,aAAa,GAAA;QACZ,OAAO,IAAI,CAAC,YAAY;IACzB;AACA,IAAA,MAAM,qBAAqB,GAAA;AACpB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE;QACvC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;QAC1C,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,YAAY,CAAA,gCAAA,EAAmC,IAAI,CAAC,UAAU,CAAA,uCAAA,CAAyC;QAC3H,OAAO,MAAM,IAAI,CAAC;aACjB,IAAI,CAAC,GAAG;AACR,aAAA,IAAI,CAAC,CAAC,MAAU,KAAI;AACnB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,YAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI;YAC/B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAE,CAAC,GAAG,KAAI;AAC5B;;;AAGM;gBACL,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACzC,YAAA,CAAC,CAAE;AACH,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;YAC3B,MAAM,MAAM,GAAI,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,GAAE,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;YAC/D,IAAI,CAAC,oBAAoB,GAAG,eAAe,GAAE,IAAI,CAAC,UAAU,GAAE,kBAAkB,GAAE,MAAM,GAAE,OAAO,GAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAE,UAAU;AAChJ,QAAA,CAAC,CAAC,CAAC,KAAK,CAAE,CAAC,KAAK,KAAI;AACnB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YACtB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;AAChC,QAAA,CAAC,CAAC;IAEV;IAEA,iBAAiB,GAAA;QACZ,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;AAC9B,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,YAAA,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;YACpD;QACJ;AACA,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;QAE7B,IAAI,IAAI,CAAC,YAAY,KAAK,kBAAkB,IAAI,IAAI,CAAC,4BAA4B,EAAE;AAC/E,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC,MAAM,KACnE,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAC/D;QACL;aAAO,IAAI,IAAI,CAAC,YAAY,KAAK,kBAAkB,IAAI,CAAC,IAAI,CAAC,4BAA4B,EAAE;YACxF,IAAI,CAAC,qBAAqB,EAAE;QAC/B;aAAO,IAAI,IAAI,CAAC,YAAY,KAAK,UAAU,IAAK,IAAI,CAAC,oBAAoB,EAAE;AACvE,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,MAAM,KAC5D,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAC/D;QACL;aAAO,IAAI,IAAI,CAAC,YAAY,KAAK,UAAU,IAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE;YACzE,IAAI,CAAC,qBAAqB,EAAE;QAC/B;aAAO,IAAI,IAAI,CAAC,YAAY,KAAK,YAAY,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAC1E,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,MAAM,KAC9D,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAC/D;QACL;aAAO,IAAI,IAAI,CAAC,YAAY,KAAK,YAAY,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;YAC5E,IAAI,CAAC,qBAAqB,EAAE;QAC/B;aAAO,IAAI,IAAI,CAAC,YAAY,KAAK,cAAc,IAAI,IAAI,CAAC,uBAAuB,EAAE;AAC7E,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,MAAM,KAC/D,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAC/D;QACL;aAAO,IAAI,IAAI,CAAC,YAAY,KAAK,cAAc,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE;YAC/E,IAAI,CAAC,qBAAqB,EAAE;QAC/B;aAAO,IAAI,IAAI,CAAC,YAAY,KAAK,sBAAsB,IAAI,IAAI,CAAC,gCAAgC,EAAE;AAC9F,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,MAAM,KAC9D,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAC/D;QACL;aAAO,IAAI,IAAI,CAAC,YAAY,KAAK,sBAAsB,IAAI,CAAC,IAAI,CAAC,gCAAgC,EAAE;YAChG,IAAI,CAAC,qBAAqB,EAAE;QAC/B;aAAO,IAAI,IAAI,CAAC,YAAY,KAAK,8BAA8B,IAAI,IAAI,CAAC,mCAAmC,EAAE;AACzG,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,gCAAgC,CAAC,MAAM,CAAC,CAAC,MAAM,KAC3E,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAC/D;QACL;aAAO,IAAI,IAAI,CAAC,YAAY,KAAK,8BAA8B,IAAI,CAAC,IAAI,CAAC,mCAAmC,EAAE;YAC3G,IAAI,CAAC,qBAAqB,EAAE;QAC/B;IACL;IACA,MAAM,GAAA;IAEN;IACA,OAAO,GAAA;IAEP;IACA,iBAAiB,GAAA;AACd,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;QACpB,IAAI,CAAC,wBAAwB,EAAE;AAC/B,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;;QAE9B,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,QAAQ,EAAE;QACf,IAAI,CAAC,qBAAqB,EAAE;IAC/B;IAEA,wBAAwB,GAAA;AACrB,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;AACrB,QAAA,IAAI,CAAC,oBAAoB,GAAG,iBAAiB;QAC3C,IAAI,IAAI,CAAC,YAAY,KAAK,kBAAkB,IAAI,IAAI,CAAC,4BAA4B,EAAE;AAC/E,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC,MAAM,KACnE,IAAI,CAAC,UAAU,KAAG,EAAE,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CACvF;QACL;aAAO,IAAI,IAAI,CAAC,YAAY,KAAK,kBAAkB,IAAI,CAAC,IAAI,CAAC,4BAA4B,EAAE;AACxF,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;QAChC;aAAO,IAAI,IAAI,CAAC,YAAY,KAAK,UAAU,IAAK,IAAI,CAAC,oBAAoB,EAAE;AACvE,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,MAAM,KAC5D,IAAI,CAAC,UAAU,KAAG,EAAE,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CACvF;QACL;aAAO,IAAI,IAAI,CAAC,YAAY,KAAK,UAAU,IAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE;AACzE,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;QAChC;aAAO,IAAI,IAAI,CAAC,YAAY,KAAK,YAAY,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAC1E,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,MAAM,KAC9D,IAAI,CAAC,UAAU,KAAG,EAAE,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CACvF;QACL;aAAO,IAAI,IAAI,CAAC,YAAY,KAAK,YAAY,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;AAC5E,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;QAChC;aAAO,IAAI,IAAI,CAAC,YAAY,KAAK,cAAc,IAAI,IAAI,CAAC,uBAAuB,EAAE;AAC7E,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,MAAM,KAC/D,IAAI,CAAC,UAAU,KAAG,EAAE,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CACvF;QACL;aAAO,IAAI,IAAI,CAAC,YAAY,KAAK,cAAc,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE;AAC/E,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;QAChC;aAAO,IAAI,IAAI,CAAC,YAAY,KAAK,sBAAsB,IAAI,IAAI,CAAC,gCAAgC,EAAE;AAC9F,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,MAAM,KAC9D,IAAI,CAAC,UAAU,KAAG,EAAE,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CACvF;QACL;aAAO,IAAI,IAAI,CAAC,YAAY,KAAK,sBAAsB,IAAI,CAAC,IAAI,CAAC,gCAAgC,EAAE;AAChG,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;QAChC;aAAO,IAAI,IAAI,CAAC,YAAY,KAAK,8BAA8B,IAAI,IAAI,CAAC,mCAAmC,EAAE;AACzG,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,gCAAgC,CAAC,MAAM,CAAC,CAAC,MAAM,KAC3E,IAAI,CAAC,UAAU,KAAG,EAAE,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CACvF;QACL;aAAO,IAAI,IAAI,CAAC,YAAY,KAAK,8BAA8B,IAAI,CAAC,IAAI,CAAC,mCAAmC,EAAE;AAC3G,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;QAChC;IACL;IAEA,eAAe,GAAA;AACV,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;IAClC;IAEA,SAAS,GAAA;;AAEL,QAAA,MAAM,SAAS,GAAQ,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,YAAY,CAAC;AACrE,QAAA,SAAS,CAAC,CAAC,GAAG,CAAC;QACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC;IACzC;AAED,IAAA,aAAa,CAAC,CAAC,EAAA;QACV,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE;AAC3B,YAAA,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,SAAS;AAC/B,YAAA,CAAC,CAAC,SAAS,GAAG,IAAI;QACtB;AACA,QAAA,IAAI,CAAC,CAAC,QAAQ,EAAE;AACZ,YAAA,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,QAAQ;AACxB,YAAA,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC;AAC1D,YAAA,CAAC,CAAC,QAAQ,GAAG,IAAI;QACrB;IACL;IAEA,YAAY,GAAA;AACN,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,QAAA,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;QAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,GAAI,MAAM,CAAC,KAAK;QAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM;QAEjD,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC;AAExC,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AAEtB,QAAA,MAAM,UAAU,GAAG,CAAC,CAAC,KAAI;YACrB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC;AAC3C,QAAA,CAAC;AACD,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;QAE5C,IAAI,CAAC,GAAG,GAAG;aACN,MAAM,CAAC,uBAAuB;AAC9B,aAAA,IAAI,CAAC,OAAO,EAAE,MAAM;AACpB,aAAA,IAAI,CAAC,QAAQ,EAAE,MAAM;AACrB,aAAA,IAAI,CAAC,IAAI,CAAC,IAAI;AACd,aAAA,IAAI,CAAC,SAAS,EAAE,WAAW,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,GAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE,MAAM,GAAC,CAAC,GAAE,MAAM,CAAC,MAAM,CAAC;aACvG,MAAM,CAAC,GAAG;AACV,aAAA,IAAI,CAAC,WAAW,EAAE,YAAY,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QAE5D,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,YAAA;AAC1B,YAAA,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;AAC1D,QAAA,CAAC,CAAC;QAEF,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE;AAC9B,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,GAAG,CAAC;AAC1B,QAAA,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,GAAG;QACzB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;;AAE5C,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;AAElC,QAAA,CAAC,CAAC,KAAK,CAAC,MAAK;AACT,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,YAAY;AAChC,YAAA,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG;AACvB,YAAA,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,GAAG;AACtB,YAAA,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC;AACpB,YAAA,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC;QACzE,CAAC,EAAE,GAAG,CAAC;QAEP,SAAS,QAAQ,CAAC,CAAC,EAAA;YACf,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE;AAC3B,gBAAA,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,SAAS;AAC/B,gBAAA,CAAC,CAAC,SAAS,GAAG,IAAI;YACtB;AACA,YAAA,IAAI,CAAC,CAAC,QAAQ,EAAE;AACZ,gBAAA,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,QAAQ;AACxB,gBAAA,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;AAC7B,gBAAA,CAAC,CAAC,QAAQ,GAAG,IAAI;YACrB;QACJ;IACN;AAEE,IAAA,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,KAAK,EAAA;QAC9B,IAAI,OAAO,EAAE;YACT,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE;QAClC;QACA,MAAM,QAAQ,GAAG,GAAG;AACpB,QAAA,IAAI;YACA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;YAC/C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;AACxC,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QACrD;QAAE,OAAO,CAAK,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,GAAE,CAAC,CAAC,OAAO,CAAC;QACjE;QACA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;AACvC,QAAA,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC;AAClF,QAAA,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;AACzE,QAAA,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;AAC1E,QAAA,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;AAE3E,QAAA,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,mBAAmB,CAAC;AACxF,QAAA,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;AAC3E,QAAA,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;AAC5E,QAAA,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;AAE7E,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAA;YAC1B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,GAAG;AACvB,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,EAAA;AACjE,YAAA,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE;AACpB,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACjB,aAAA,KAAK;aACL,MAAM,CAAC,GAAG;AACV,aAAA,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,KAAI;YACjB,IAAI,SAAS,GAAG,EAAE;YAElB,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE;gBACrF,SAAS,GAAG,aAAa;YAC7B;AACA,YAAA,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,uBAAuB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,EAAE;gBACxN,SAAS,GAAG,UAAU;YAC1B;YACA,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE;gBAC/E,SAAS,GAAG,SAAS;YACzB;YACA,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE;gBAC1F,SAAS,GAAG,SAAS;YACzB;AACA,YAAA,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,EAAG;gBACtI,SAAS,GAAG,gBAAgB;YACjC;YACA,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,EAAE;gBAC1F,SAAS,GAAG,gBAAgB;YAChC;YACA,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC,EAAE;gBACtG,SAAS,GAAG,oBAAoB;YACpC;YACA,IACI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,8BAA8B,CAAC;AACzD,gBAAA,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,uBAAuB,CAAC,EACpD;gBACE,SAAS,GAAG,4BAA4B;YAC5C;AAEA,YAAA,SAAS,GAAG,CAAC,CAAC,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,iBAAiB,GAAG,SAAS;AAE7E,YAAA,OAAO,SAAS;AACpB,QAAA,CAAC;AACA,aAAA,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,EAAA;AAC1B,YAAA,IAAI,MAAM,IAAI,MAAM,CAAC,CAAC,EAAE;AACpB,gBAAA,OAAO,YAAY,GAAG,MAAM,CAAC,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,GAAG,GAAG;YACzD;iBAAO;AACH,gBAAA,OAAO,YAAY,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;YAC/C;AACJ,QAAA,CAAC,CAAC;AAEN,QAAA,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,CAAC,KAAI;YAC1C,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;AAC9C,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc;AAC9B,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW;AACvC,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU;AACpC,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB;AACxC,YAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,oBAAoB;AAEpD,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE;AAC7C,gBAAA,EAAE,CAAC,MAAM,CAAC,kBAAkB;AACvB,qBAAA,KAAK,CAAC,UAAU,EAAE,UAAU;qBAC5B,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,GAAG,IAAI;qBAClC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,GAAG,IAAI;AACjC,qBAAA,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC;YAClC;iBAAO;gBACH;YACJ;YACA,IAAI,GAAG,GAAG,IAAI;YACd,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,kBAAkB,CAAE,EAAG;gBACtF,IAAG,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,YAAY,EAAE;oBAChC,QAAQ,CAAC,aAAa,CAAC;oBACvB,QAAQ,CAAC,mBAAmB,CAAC;oBAC7B,QAAQ,CAAC,aAAa,CAAC;gBAC1B;qBAAO;oBACJ,SAAS,CAAC,aAAa,CAAC;oBACxB,SAAS,CAAC,mBAAmB,CAAC;oBAC9B,SAAS,CAAC,aAAa,CAAC;gBAC3B;gBACC,QAAQ,CAAC,QAAQ,CAAC;gBAClB,QAAQ,CAAC,OAAO,CAAC;gBACjB,QAAQ,CAAC,OAAO,CAAC;gBACjB,SAAS,CAAC,QAAQ,CAAC;gBACnB,SAAS,CAAC,OAAO,CAAC;gBAClB,SAAS,CAAC,QAAQ,CAAC;gBACnB,SAAS,CAAC,UAAU,CAAC;gBACrB,SAAS,CAAC,mBAAmB,CAAC;gBAC9B,SAAS,CAAC,aAAa,CAAC;gBACxB,SAAS,CAAC,OAAO,CAAC;gBAClB,SAAS,CAAC,OAAO,CAAC;AAElB,gBAAA,IAAI,CAAC,mBAAmB,GAAG,UAAU;YACzC;AAAO,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE;gBACvD,IAAG,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,aAAa,EAAE;oBAClC,QAAQ,CAAC,aAAa,CAAC;oBACvB,QAAQ,CAAC,mBAAmB,CAAC;oBAC7B,QAAQ,CAAC,aAAa,CAAC;gBACzB;qBAAO;oBACL,SAAS,CAAC,aAAa,CAAC;oBACxB,SAAS,CAAC,mBAAmB,CAAC;oBAC9B,SAAS,CAAC,aAAa,CAAC;gBACxB;gBACA,QAAQ,CAAC,QAAQ,CAAC;gBAClB,QAAQ,CAAC,OAAO,CAAC;gBACjB,SAAS,CAAC,QAAQ,CAAC;gBACnB,SAAS,CAAC,OAAO,CAAC;gBAClB,QAAQ,CAAC,OAAO,CAAC;gBACjB,SAAS,CAAC,QAAQ,CAAC;gBACnB,SAAS,CAAC,UAAU,CAAC;gBAErB,SAAS,CAAC,OAAO,CAAC;gBAClB,SAAS,CAAC,OAAO,CAAC;AAClB,gBAAA,IAAI,CAAC,mBAAmB,GAAG,aAAa;YAE5C;AAAO,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;gBACjD,QAAQ,CAAC,QAAQ,CAAC;gBAClB,QAAQ,CAAC,OAAO,CAAC;gBACjB,SAAS,CAAC,QAAQ,CAAC;gBACnB,SAAS,CAAC,OAAO,CAAC;gBAClB,SAAS,CAAC,OAAO,CAAC;gBAClB,QAAQ,CAAC,QAAQ,CAAC;gBAClB,SAAS,CAAC,UAAU,CAAC;gBACrB,SAAS,CAAC,mBAAmB,CAAC;gBAC9B,SAAS,CAAC,aAAa,CAAC;gBACxB,SAAS,CAAC,OAAO,CAAC;gBAClB,SAAS,CAAC,OAAO,CAAC;gBAClB,QAAQ,CAAC,aAAa,CAAC;AACvB,gBAAA,IAAI,CAAC,mBAAmB,GAAG,SAAS;YAExC;AAAO,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB,EAAE;gBACxD,SAAS,CAAC,QAAQ,CAAC;gBACnB,QAAQ,CAAC,OAAO,CAAC;gBACjB,SAAS,CAAC,QAAQ,CAAC;gBACnB,SAAS,CAAC,OAAO,CAAC;gBAClB,SAAS,CAAC,OAAO,CAAC;gBAClB,SAAS,CAAC,QAAQ,CAAC;gBACnB,SAAS,CAAC,UAAU,CAAC;gBACrB,SAAS,CAAC,mBAAmB,CAAC;gBAC9B,SAAS,CAAC,aAAa,CAAC;gBACxB,SAAS,CAAC,OAAO,CAAC;gBAClB,SAAS,CAAC,OAAO,CAAC;gBAClB,SAAS,CAAC,aAAa,CAAC;AAExB,gBAAA,IAAI,CAAC,mBAAmB,GAAG,gBAAgB;YAC/C;AAAO,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,oBAAoB,EAAE;gBAC5D,SAAS,CAAC,QAAQ,CAAC;gBACnB,SAAS,CAAC,QAAQ,CAAC;gBACnB,QAAQ,CAAC,OAAO,CAAC;gBACjB,SAAS,CAAC,OAAO,CAAC;gBAClB,SAAS,CAAC,OAAO,CAAC;gBAClB,SAAS,CAAC,QAAQ,CAAC;gBACnB,SAAS,CAAC,mBAAmB,CAAC;gBAC9B,SAAS,CAAC,aAAa,CAAC;gBACxB,SAAS,CAAC,UAAU,CAAC;gBACrB,SAAS,CAAC,OAAO,CAAC;gBAClB,SAAS,CAAC,OAAO,CAAC;gBAClB,SAAS,CAAC,aAAa,CAAC;AACxB,gBAAA,IAAI,CAAC,mBAAmB,GAAG,eAAe;YAE9C;AAAO,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;gBACjD,QAAQ,CAAC,QAAQ,CAAC;gBAClB,SAAS,CAAC,QAAQ,CAAC;gBACnB,QAAQ,CAAC,OAAO,CAAC;gBACjB,SAAS,CAAC,OAAO,CAAC;gBAClB,QAAQ,CAAC,OAAO,CAAC;gBACjB,SAAS,CAAC,QAAQ,CAAC;gBACnB,QAAQ,CAAC,UAAU,CAAC;gBACpB,SAAS,CAAC,mBAAmB,CAAC;gBAC9B,SAAS,CAAC,aAAa,CAAC;gBACxB,QAAQ,CAAC,OAAO,CAAC;gBACjB,QAAQ,CAAC,OAAO,CAAC;gBACjB,SAAS,CAAC,aAAa,CAAC;AACxB,gBAAA,IAAI,CAAC,mBAAmB,GAAG,SAAS;gBACpC,GAAG,GAAG,EAAE;YACZ;AAAO,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,uBAAuB,EAAE;gBAC/D,SAAS,CAAC,QAAQ,CAAC;gBACnB,SAAS,CAAC,QAAQ,CAAC;gBACnB,QAAQ,CAAC,OAAO,CAAC;gBACjB,SAAS,CAAC,OAAO,CAAC;gBAClB,SAAS,CAAC,OAAO,CAAC;gBAClB,SAAS,CAAC,QAAQ,CAAC;gBACnB,SAAS,CAAC,UAAU,CAAC;gBACrB,SAAS,CAAC,mBAAmB,CAAC;gBAC9B,SAAS,CAAC,aAAa,CAAC;gBACxB,SAAS,CAAC,OAAO,CAAC;gBAClB,SAAS,CAAC,OAAO,CAAC;gBAClB,SAAS,CAAC,aAAa,CAAC;AACxB,gBAAA,IAAI,CAAC,mBAAmB,GAAG,uBAAuB;YAEtD;AACA,YAAA,IAAI,CAAC,eAAe,GAAG,GAAG;AAC1B,YAAA,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;AAClD,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;aACf,MAAM,CAAC,QAAQ;AACf,aAAA,IAAI,CAAC,OAAO,EAAE,MAAM;AACpB,aAAA,IAAI,CAAC,GAAG,EAAE,EAAE;AACZ,aAAA,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,EAAA;YACtB,OAAO,CAAC,CAAC,SAAS,GAAG,kBAAkB,GAAG,MAAM;AACpD,QAAA,CAAC;aACA,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC,KAAI;AAC1B,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC;AAClC,QAAA,CAAC;AACA,aAAA,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,iBAAiB;AACrC,aAAA,EAAE,CAAC,aAAa,EAAE,CAAC,KAAK,KAAI;YACzB,KAAK,CAAC,cAAc,EAAE;AAC1B,QAAA,CAAC;aACA,EAAE,CAAC,OAAO,EAAE,OAAQ,KAAK,EAAE,CAAM,KAAI;YACnC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;gBACjF,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,UAAU;qBACvC,QAAQ,CAAC,GAAG;AACZ,qBAAA,KAAK,CAAC,eAAe,EAAE,IAAI;AAC3B,qBAAA,UAAU;qBACV,QAAQ,CAAC,IAAI;AACb,qBAAA,KAAK,CAAC,cAAc,EAAE,GAAG;AACzB,qBAAA,UAAU;qBACV,QAAQ,CAAC,GAAG;AACZ,qBAAA,KAAK,CAAC,cAAc,EAAE,GAAG;AACzB,qBAAA,UAAU;qBACV,QAAQ,CAAC,IAAI;AACb,qBAAA,KAAK,CAAC,cAAc,EAAE,GAAG;AACzB,qBAAA,UAAU;qBACV,QAAQ,CAAC,GAAG;AACZ,qBAAA,KAAK,CAAC,cAAc,EAAE,GAAG;AACzB,qBAAA,UAAU;qBACV,QAAQ,CAAC,IAAI;AACb,qBAAA,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC;YACnC;AACC,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE;AAC7C,gBAAA,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;YAC1D;AACA,YAAA,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;AAC9C,YAAA,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACrC,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;AAClD,gBAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;oBACZ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;gBACnC;AACA,gBAAA,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,QAAQ;AACxB,gBAAA,CAAC,CAAC,QAAQ,GAAG,IAAI;YACrB;iBAAO;AACH,gBAAA,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;oBACvC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC;gBACA,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;oBACnC,IAAI,cAAc,GAAG,IAAI;AACvB,oBAAA,CAAC,CAAC,SAAS,GAAG,IAAI;oBACpB,IACI,CAAC,CAAC,IAAI;wBACN,CAAC,CAAC,IAAI,CAAC,QAAQ;AACf,wBAAA,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,KAAK;AACzB,yBAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU;AAC3B,4BAAA,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,kBAAkB,CAAC;wBACnC,CAAC,CAAC,CAAC,QAAQ;AACX,wBAAA,CAAC,CAAC,CAAC,SAAS,EACd;AACE,wBAAA,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,WAAW;AACjC,wBAAA,MAAM,GAAG,GAAI,MAAM,IAAI,CAAC,iBAAiB,CAAC,6BAA6B,CACnE,CAAC,EACD,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,OAAO,CACf;AACD,wBAAA,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;AACpB,wBAAA,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC;wBAC1B,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,KAAI;AACnC,4BAAA,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC;AACnC,wBAAA,CAAC,CAAC;AACF,wBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;oBACtB;yBAAO,IACH,CAAC,CAAC,IAAI;wBACN,CAAC,CAAC,IAAI,CAAC,QAAQ;AACf,wBAAA,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,KAAK;AACzB,wBAAA,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS;wBACzB,CAAC,CAAC,CAAC,QAAQ;AACX,wBAAA,CAAC,CAAC,CAAC,SAAS,EACd;AACE,wBAAA,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,WAAW;wBACjC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,2BAA2B,CAChE,CAAC,EACD,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,WAAW,CACnB;AACD,wBAAA,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;AACpB,wBAAA,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC;wBAC1B,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,KAAI;AACnC,4BAAA,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC;AACnC,wBAAA,CAAC,CAAC;AACF,wBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;oBACtB;yBAAO,IACH,CAAC,CAAC,IAAI;wBACN,CAAC,CAAC,IAAI,CAAC,QAAQ;AACf,wBAAA,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,KAAK;AACzB,wBAAA,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB;wBAChC,CAAC,CAAC,CAAC,QAAQ;AACX,wBAAA,CAAC,CAAC,CAAC,SAAS,EACd;AACE,wBAAA,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,WAAW;wBACjC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,kCAAkC,CACvE,CAAC,EACD,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,WAAW,CACnB;AACD,wBAAA,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;AACpB,wBAAA,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC;wBAC1B,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,KAAI;AACnC,4BAAA,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC;AACnC,wBAAA,CAAC,CAAC;AACF,wBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;oBACtB;yBAAO,IACH,CAAC,CAAC,IAAI;wBACN,CAAC,CAAC,IAAI,CAAC,QAAQ;AACf,wBAAA,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,KAAK;AACzB,wBAAA,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa;wBAC7B,CAAC,CAAC,CAAC,QAAQ;AACX,wBAAA,CAAC,CAAC,CAAC,SAAS,EACd;AACC,wBAAA,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,WAAW;wBAChC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,8BAA8B,CACnE,CAAC,EACD,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,WAAW,CACnB;AACD,wBAAA,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;AACpB,wBAAA,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC;wBAC1B,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,KAAI;AACnC,4BAAA,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC;AACnC,wBAAA,CAAC,CAAC;AACF,wBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;oBACtB;yBAAO,IACH,CAAC,CAAC,IAAI;wBACN,CAAC,CAAC,IAAI,CAAC,QAAQ;AACf,wBAAA,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,KAAK;AACzB,wBAAA,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,oBAAoB;wBACpC,CAAC,CAAC,CAAC,QAAQ;AACX,wBAAA,CAAC,CAAC,CAAC,SAAS,EACd;AACC,wBAAA,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,WAAW;wBAChC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,qCAAqC,CAC1E,CAAC,EACD,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,oBAAoB,EACzB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,WAAW,CACnB;AACD,wBAAA,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;AACpB,wBAAA,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC;wBAC1B,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,KAAI;AACnC,4BAAA,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC;AACnC,wBAAA,CAAC,CAAC;AACF,wBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;oBACtB;yBAAO,IACH,CAAC,CAAC,IAAI;wBACN,CAAC,CAAC,IAAI,CAAC,QAAQ;AACf,wBAAA,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,KAAK;AACzB,wBAAA,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,uBAAuB;wBACvC,CAAC,CAAC,CAAC,QAAQ;AACX,wBAAA,CAAC,CAAC,CAAC,SAAS,EACd;AACC,wBAAA,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,WAAW;wBAChC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,4CAA4C,CACjF,CAAC,EACD,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,uBAAuB,EAC5B,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,WAAW,CACnB;AAED,wBAAA,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;AACpB,wBAAA,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC;wBAC1B,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,KAAI;AACnC,4BAAA,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC;AACnC,wBAAA,CAAC,CAAC;AACF,wBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;oBACtB;yBAAO;AACH,wBAAA,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,SAAS;oBAC5B;gBACJ;qBAAO;AACH,oBAAA,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,SAAS;gBAC5B;AACA,gBAAA,IAAI,CAAC,CAAC,SAAS,EAAE;AACb,oBAAA,CAAC,CAAC,SAAS,GAAG,IAAI;gBACtB;YACJ;YAEA,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS,EAAE;AAC3B,gBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YACtB;AAEA,YAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,2BAA2B,EAAE,EAAE,CAAC;AAC1D,YAAA,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC;YACjD,IAAI,QAAQ,KAAK,KAAK,IAAI,WAAW,KAAK,KAAK,EAAE;AAC7C,gBAAA,wBAAwB,EAAE;YAC9B;AACJ,QAAA,CAAC,CAAC;AAEN,QAAA,IAAI,CAAC;aACA,MAAM,CAAC,eAAe;AACtB,aAAA,IAAI,CAAC,QAAQ,EAAE,IAAI;AACnB,aAAA,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,EAAA;YACtB,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,GAAE,KAAK,GAAE,KAAK;AAChE,QAAA,CAAC;AACA,aAAA,IAAI,CAAC,GAAG,EAAE,IAAI;AACd,aAAA,IAAI,CAAC,GAAG,EAAG,UAAU,CAAC,EAAA;YAClB,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAG,KAAK,GAAE,IAAI,GAAE,KAAK;AAC9D,QAAA,CAAC;aACD,MAAM,CAAC,YAAY;AACnB,aAAA,KAAK,CAAC,YAAY,EAAE,aAAa;aACjC,IAAI,CAAC,UAAU,CAAC,EAAA;AACb,YAAA,OAAO,0CAA0C,CAAC,CAAC,IAAI,CAAC,IAAI,eAAe;AAC/E,QAAA,CAAC,CAAC;AAEN,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAEjD,QAAA,IAAI,CAAC;AACA,aAAA,UAAU;aACV,QAAQ,CAAC,QAAQ;AACjB,aAAA,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,EAAA;AAC1B,YAAA,OAAO,YAAY,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;AAC/C,QAAA,CAAC,CAAC;QAEN,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC;AAE7E,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AAChB,aAAA,IAAI;AACJ,aAAA,UAAU;aACV,QAAQ,CAAC,QAAQ;AACjB,aAAA,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,EAAA;AAC1B,YAAA,IAAI,MAAM,IAAI,MAAM,CAAC,CAAC,EAAE;AACpB,gBAAA,OAAO,YAAY,GAAG,MAAM,CAAC,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,GAAG,GAAG;YACzD;iBAAO;AACH,gBAAA,OAAO,YAAY,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;YAC/C;AACJ,QAAA,CAAC;AACA,aAAA,MAAM,EAAE;AAEb,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;AACtD,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,EAAA;AACpE,YAAA,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE;AACpB,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AAClB,aAAA,KAAK;AACL,aAAA,MAAM,CAAC,MAAM,EAAE,GAAG;AAClB,aAAA,IAAI,CAAC,OAAO,EAAE,MAAM;AACpB,aAAA,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,EAAA;AAClB,YAAA,IAAI,CAAC;AACL,YAAA,IAAI,MAAM,IAAI,MAAM,CAAC,CAAC,EAAE;AACpB,gBAAA,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE;YACpC;iBAAO;AACH,gBAAA,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;YAC1B;YACA,OAAO,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;AAC9B,QAAA,CAAC;AACA,aAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAErB,QAAA,IAAI,CAAC;AACA,aAAA,UAAU;aACV,QAAQ,CAAC,QAAQ;AACjB,aAAA,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,EAAA;YAClB,OAAO,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC;AACrC,QAAA,CAAC,CAAC;AAEN,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AAChB,aAAA,IAAI;AACJ,aAAA,UAAU;aACV,QAAQ,CAAC,QAAQ;AACjB,aAAA,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,EAAA;AAClB,YAAA,IAAI,CAAC;AACL,YAAA,IAAI,MAAM,IAAI,MAAM,CAAC,CAAC,EAAE;AACpB,gBAAA,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE;YACpC;iBAAO;AACH,gBAAA,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;YAC1B;YACA,OAAO,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;AAC9B,QAAA,CAAC;AACA,aAAA,MAAM,EAAE;AAEb,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAM,EAAA;AAC/B,YAAA,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACV,YAAA,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACd,QAAA,CAAC,CAAC;QAEF,SAAS,SAAS,CAAC,IAAI,EAAA;AACnB,YAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;QAC5C;QAEA,SAAS,QAAQ,CAAC,IAAI,EAAA;AAClB,YAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC;QAC7C;AAEA,QAAA,SAAS,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAA;YACtB,MAAM,IAAI,GAAG,CAAA,EAAA,EAAK,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC;AACvB,eAAA,EAAA,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,CAAA;AACtB,eAAA,EAAA,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,CAAA;AACtB,eAAA,EAAA,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,EAAE;AAEjB,YAAA,OAAO,IAAI;QACf;AAEA,QAAA,SAAS,wBAAwB,GAAA;YAC7B,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,UAAU,CAAM,EAAA;AACxC,gBAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC;AAC9C,gBAAA,MAAM,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,EAAE,EAAE,CAAC;gBACtD,IAAI,QAAQ,KAAK,KAAK,IAAI,YAAY,KAAK,SAAS,EAAE;AAClD,oBAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC;gBAC1C;qBAAO,IAAI,QAAQ,KAAK,KAAK,IAAI,YAAY,KAAK,SAAS,EAAE;AACzD,oBAAA,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,GAAG,kBAAkB,GAAG,MAAM;AACvD,oBAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC;gBACxC;AACJ,YAAA,CAAC,CAAC;QACN;AAEA,QAAA,SAAS,WAAW,CAAC,GAAG,EAAE,SAAS,EAAA;YAC/B,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM,EAAE;gBACxB;YACJ;AACA,YAAA,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;AACpE,gBAAA,GAAG,CAAC,SAAS,GAAG,EAAE;YACtB;AACA,YAAA,IAAI,GAAG,CAAC,QAAQ,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACpD,gBAAA,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,QAAQ;gBAC5B,IAAI,GAAG,CAAC,SAAS;oBACb,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI;AACvB,wBAAA,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC;AAC/B,oBAAA,CAAC,CAAC;AACN,gBAAA,GAAG,CAAC,QAAQ,GAAG,IAAI;YACvB;AAEA,YAAA,IAAI,GAAG,CAAC,QAAQ,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;gBACrD,IAAI,GAAG,CAAC,QAAQ;oBACZ,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI;AACtB,wBAAA,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC;AAC/B,oBAAA,CAAC,CAAC;YACV;QACJ;AAEA,QAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE;AAC1B,YAAA,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC;QAC3C;AACJ,IAAA,CAAC;IAED,SAAS,GAAA;AACL,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB,EAAE;AAClE,QAAA,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG;QAC/D,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,GAAG,GAAG,GAAG,WAAW,CAAC,MAAM;AAC9D,QAAA,MAAM,YAAY,GAAG,QAAQ,GAAG,CAAC;AACjC,QAAA,MAAM,eAAe,GAAG,WAAW,GAAG,CAAC;AAEvC,QAAA,IAAI,eAAe,IAAI,YAAY,EAAE;AACjC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS;AAC5B,YAAA,KAAK,CAAC,CAAC,GAAG,YAAY,GAAG,GAAG,GAAG,CAAC;AAChC,YAAA,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC;QAChE;IACJ;AAEA,IAAA,QAAQ,CAAC,CAAC,EAAA;AACN,QAAA,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE;AACvC,YAAA,OAAO,KAAK;QAChB;AAAO,aAAA,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE;AAC9C,YAAA,OAAO,kBAAkB;QAC7B;aAAO;AACH,YAAA,OAAO,kBAAkB;QAC7B;IACJ;IAEA,MAAM,GAAA;AACF,QAAA,IAAI,CAAC;AACA,aAAA,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,EAAA;AACnB,YAAA,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AACrB,QAAA,CAAC;AACA,aAAA,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,EAAA;AACnB,YAAA,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AACrB,QAAA,CAAC;AACA,aAAA,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,EAAA;AACnB,YAAA,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AACrB,QAAA,CAAC;AACA,aAAA,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,EAAA;AACnB,YAAA,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AACrB,QAAA,CAAC,CAAC;QAEN,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,EAAA;AACpC,YAAA,OAAO,YAAY,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;AAC/C,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,UAAU,CAAC,CAAC,EAAA;QACR,OAAO,CAAC,YAAY,MAAM,IAAI,CAAC,CAAC,WAAW,KAAK,MAAM;IAC1D;AAEA,IAAA,gBAAgB,CAAC,UAAU,EAAA;QACvB,IAAI,IAAI,GAAG,uDAAuD;QAClE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AACzC,QAAA,IAAI,CAAC,OAAO,CAAE,CAAC,CAAC,KAAI;AAChB,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;gBACrC,MAAM,IAAI,GAAQ,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AACpC,gBAAA,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,EAAE,GAAG,MAAM;YACxD;iBAAO;AACH,gBAAA,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,CAAC,GAAG,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM;YACnE;AACJ,QAAA,CAAC,CAAC;QACF,OAAO,IAAI,GAAG,SAAS;IAC3B;AAEA,IAAA,SAAS,CAAC,CAAC,EAAA;AACP,QAAA,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,EAAE;AACtB,YAAA,OAAO,SAAS;QACpB;aAAO;AACH,YAAA,OAAO,MAAM;QACjB;IACJ;IAEA,WAAW,CAAC,KAAK,EAAE,CAAC,EAAA;AAChB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE;QAC9C;AACA,QAAA,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACV,QAAA,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACd;AAEA,IAAA,OAAO,CAAC,CAAC,EAAA;AACL,QAAA,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACV,QAAA,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACd;IAEA,SAAS,CAAC,KAAK,EAAE,CAAC,EAAA;AACd,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;QAClC;AAEA,QAAA,CAAC,CAAC,EAAE,GAAG,IAAI;AACX,QAAA,CAAC,CAAC,EAAE,GAAG,IAAI;IACf;IACA,iBAAiB,GAAA;QACb,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC;AACxC,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;QAC7C;IACJ;IACA,eAAe,CAAC,KAAK,EAAE,CAAC,EAAA;QACpB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC;QACxC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC;AAC1C,QAAA,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI;QAC5B,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI;QACjC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;AAChC,QAAA,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC,CAAC;IACnF;IACA,iBAAiB,CAAC,KAAK,EAAE,CAAC,EAAA;AACxB,QAAA,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AAC3C,QAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;QACzC,MAAM,QAAQ,GAAU,UAAU,GAAE,CAAC,GAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAE,CAAC;QACvF,IAAI,IAAI,GAAG,CAAA,gCAAA,CAAkC;AAC7C,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAA;YACpB,IACI,CAAC,KAAK,YAAY;AAClB,gBAAA,CAAC,KAAK,UAAU;AAChB,gBAAA,CAAC,KAAK,aAAa;AACnB,gBAAA,CAAC,KAAK,MAAM;AACZ,gBAAA,CAAC,KAAK,QAAQ;AACd,gBAAA,CAAC,KAAK,cAAc;AACpB,gBAAA,CAAC,KAAK,UAAU;AAChB,gBAAA,CAAC,KAAK,IAAI;AACV,gBAAA,CAAC,KAAK,UAAU;AAChB,gBAAA,CAAC,KAAK,QAAQ;AACd,gBAAA,CAAC,KAAK,OAAO;AACb,gBAAA,CAAC,KAAK,GAAG;AACT,gBAAA,CAAC,KAAK,GAAG;AACT,gBAAA,CAAC,KAAK,UAAU;AAChB,gBAAA,CAAC,KAAK,IAAI;gBACV,CAAC,KAAK,IAAI,EACZ;;YAEF;AAAO,iBAAA,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,KAAK,EAAE;gBAC9B,IAAI;oBACA,IAAI;wBACJ,+CAA+C;wBAC/C,CAAC;wBACD,+BAA+B;AAC/B,wBAAA,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,gCAAgC,CAAC;AAC3C,wBAAA,cAAc;YACtB;iBAAO;gBACH,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE;AAC/B,gBAAA,IAAI,GAAG,IAAI,GAAG,+CAA+C,GAAG,CAAC,GAAG,+BAA+B,GAAG,OAAO,GAAG,cAAc;YAClI;AACJ,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,KAAK,KAAK,IAAI,QAAQ,GAAG,IAAI,CAAC,iBAAiB,GAAC,CAAC,EAAE;AACxF,YAAA,IAAI,GAAG,IAAI,GAAG,uFAAuF;QAC1G;aAAO,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,KAAK,KAAK,IAAI,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAC;AAC5F,YAAA,IAAI,GAAG,IAAI,GAAG,2EAA2E;QAC9F;QACA,OAAO,IAAI,GAAG,QAAQ;IAC1B;+GA30DS,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAuE1B,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAChB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAAzF,IAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA0F,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,uBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAxEjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,0GC3CvC,4/GAkGA,EAAA,MAAA,EAAA,CAAA,y8iBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA/E,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAuB,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAoB,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,OAAA,EAAA,8BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,mDAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,yBAAA,EAAA,4BAAA,EAAA,cAAA,EAAA,yBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FDvDa,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBARtC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,EAAA,aAAA,EACnB,iBAAiB,CAAC,IAAI,cAGzB,KAAK,EAAA,QAAA,EAAA,4/GAAA,EAAA,MAAA,EAAA,CAAA,y8iBAAA,CAAA,EAAA;;0BA0Ef,MAAM;2BAAC,gBAAgB;;0BACvB,MAAM;2BAAC,iBAAiB;;;AE3ExB,MAAO,uBAAwB,SAAQ,eAAe,CAAA;AAiB1D,IAAA,WAAA,CACiD,eAAgC,EACtE,GAA0B,EACG,WAA4B,EAChE,cAA8B,EACS,UAA4B,EAChC,MAAwB,EACxC,MAAc,EACd,KAAqB,EACxC,QAAkB,EAClB,UAAqB,EAAA;AAEvB,QAAA,KAAK,CAAC,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,CAAC;QAXrD,IAAA,CAAA,eAAe,GAAf,eAAe;QACrD,IAAA,CAAA,GAAG,GAAH,GAAG;QAC0B,IAAA,CAAA,WAAW,GAAX,WAAW;QAGZ,IAAA,CAAA,MAAM,GAAN,MAAM;QACtB,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,KAAK,GAAL,KAAK;QAxBnB,IAAA,CAAA,wBAAwB,GAAU,EAAE;AACnC,QAAA,IAAA,CAAA,KAAK,GAAsB,IAAI,YAAY,EAAO;QAEnD,IAAA,CAAA,UAAU,GAAG,cAAc;QAC3B,IAAA,CAAA,WAAW,GAAG,UAAU;QAEjC,IAAA,CAAA,QAAQ,GAAG,QAAQ;QACnB,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,iBAAiB,GAAG,KAAK;AACzB,QAAA,IAAA,CAAA,YAAY,GAAQ;AAClB,YAAA,EAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS;SAChC;QAED,IAAA,CAAA,QAAQ,GAAQ,EAAE;QAwLlB,IAAA,CAAA,QAAQ,GAAG,EAAE;AAzKX,QAAA,IAAI,CAAC,wBAAwB,GAAG,EAAE;IACpC;IAES,QAAQ,GAAA;QACf,KAAK,CAAC,QAAQ,EAAE;AAChB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,OAAW,KAAI;AAC5D,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;QACzB,CAAC,CAAC,CACH;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AACjD,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB;YACF;AACA,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACtB,CAAC,CAAC,CACH;IACH;IAES,aAAa,GAAA;QACpB,KAAK,CAAC,aAAa,EAAE;AACrB,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE;AACzB,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE;AACzB,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;gBAC1B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAC,CAAC;YAC/E;iBAAO;gBACL,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAC,CAAC;YAClF;AACA,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;AAC7B,gBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAC,CAAC;YAClE;YACA,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,EAAE;AACtC,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE;AAC3E,gBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,CAAA,SAAA,EAAY,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAC,CAAC;YAC7E;QACF;QACA,IAAI,CAAC,2BAA2B,EAAE;QAClC,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChD,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,MAAM,IAAG;AACvC,YAAA,IAAI,CAAC,YAAY,GAAG,MAAM;AAC5B,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,QAAQ,EAAE;AACf,QAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;QACxC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC/C;IAEA,2BAA2B,GAAA;QACzB,IAAI,CAAC,iBAAiB,CAAC,6BAA6B,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,KAAI;AACxE,YAAA,IAAI,CAAC,wBAAwB,GAAG,UAAU;AAC5C,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;IACjC;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC7C;AAEA,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;IACzF;AAEA,IAAA,oBAAoB,CAAC,MAAM,EAAA;AACzB,QAAA,QAAO,MAAM,CAAC,EAAE;AACd,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,IAAI,EAAE;gBACX;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,YAAY,EAAE;gBACnB;;IAEN;AAEA,IAAA,qBAAqB,CAAC,MAAM,EAAA;AAC1B,QAAA,QAAO,MAAM,CAAC,IAAI;AAChB,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,IAAI,EAAE;gBACX;AACF,YAAA,KAAK,OAAO;gBACV,IAAI,CAAC,SAAS,EAAE;gBAChB;AACF,YAAA,KAAK,aAAa;AAChB,gBAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI;gBAC3B;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,YAAY,EAAE;gBACnB;;IAEN;IAEA,MAAM,IAAI,CAAC,KAAM,EAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE;YAChC;QACF;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC/B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;AACvD,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE;AAC9C,QAAA,IAAG,CAAC,OAAO,IAAI,CAAC,UAAU,EAAE;YAC1B;QACF;AAEA,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC3C,YAAA,IAAI,MAAM,EAAE,KAAK,EAAE;AACjB,gBAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;oBAC3B;gBACF;AACA,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC7B,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK;gBACxB,IAAI,CAAC,gBAAgB,EAAE;gBACvB;YACF;AACA,YAAA,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM;YACpD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,IAAI,CAAC,QAAQ;AACrC,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;YAC/B;iBAAO;AACL,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;YAC/B;YACA,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC/C,QAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACxB,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;QAChB,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC/B,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI;QAC5B;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IAC7B;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,sBAAsB,GAAG,kCAAkC,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA,CAAE,GAAG,EAAE,CAAC;IACrI;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,MAAM,IAAI,GAAQ;AACZ,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE;AAC/B,YAAA,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,EAAE;AACrC,YAAA,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,cAAc,IAAI,EAAE;AAClD,YAAA,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB;AAClD,YAAA,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW;AACtC,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,GAAG;AAC/B,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI;SACjC;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,EAAC,GAAG,EAAE,IAAI,EAAC;QAC3D;AACA,QAAA,OAAO,IAAI;IACb;IAEA,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,IAAG;AACrD,YAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI;YAC3B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;YACxC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC/C,QAAA,CAAC,CAAC;IACJ;IAGA,IAAI,OAAO,CAAC,IAAI,EAAA;AACd,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACtB;IAEA,qBAAqB,GAAA;QACnB,IAAI,CAAC,QAAQ,CAAC,iBAAiB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB;IACpE;IAEA,iBAAiB,GAAA;QACf,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW;IACxD;IAEA,KAAK,GAAA;IACL;IAEA,kBAAkB,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAC5C,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,mBAAmB,CACzC;IACH;AAEA,IAAA,IAAI,uBAAuB,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE;IACnE;AA/NW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,kBAkBtB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAAoC,qBAAA,EAAA,EAAA,EAAA,KAAA,EAEhB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAAnF,cAAA,EAAA,EAAA,EAAA,KAAA,EAEjB,6BAA6B,aAC7B,kBAAkB,EAAA,EAAA,EAAA,KAAA,EAAAM,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAJ,IAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAvBnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EARrB;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,YAAY;AACrB,gBAAA,QAAQ,EAAE;AACb;AACJ,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrCL,03TA6MA,EAAA,MAAA,EAAA,CAAA,08DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAwB,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAyC,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAiB,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,aAAA,EAAA,UAAA,EAAA,cAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,aAAA,EAAA,OAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,oBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,OAAA,EAAA,aAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,aAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,cAAA,EAAA,eAAA,EAAA,YAAA,EAAA,WAAA,EAAA,cAAA,EAAA,aAAA,EAAA,+BAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,8BAAA,EAAA,+BAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDrKa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAZnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EAAA,SAAA,EAGrB;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,YAAY;AACrB,4BAAA,QAAQ,EAAE;AACb;AACJ,qBAAA,EAAA,UAAA,EACW,KAAK,EAAA,QAAA,EAAA,03TAAA,EAAA,MAAA,EAAA,CAAA,08DAAA,CAAA,EAAA;;0BAoBd,MAAM;2BAAC,gBAAgB;;0BAEvB,MAAM;2BAAC,iBAAiB;;0BAExB,MAAM;2BAAC,6BAA6B;;0BACpC,MAAM;2BAAC,kBAAkB;;sBAtB7B;;sBACA;;;ME7BU,wBAAwB,CAAA;AAOjC,IAAA,WAAA,CACqC,eAAgC,EAC9B,WAA4B,EACvD,cAA8B,EACJ,UAA4B,EAAA;QAH7B,IAAA,CAAA,eAAe,GAAf,eAAe;QACb,IAAA,CAAA,WAAW,GAAX,WAAW;QACtC,IAAA,CAAA,cAAc,GAAd,cAAc;QACY,IAAA,CAAA,UAAU,GAAV,UAAU;QAThD,IAAA,CAAA,oBAAoB,GAAQ,EAAE;QAC9B,IAAA,CAAA,uBAAuB,GAAQ,EAAE;QACjC,IAAA,CAAA,kBAAkB,GAAQ,EAAE;QAC5B,IAAA,CAAA,sBAAsB,GAAQ,EAAE;IAO7B;AAEH,IAAA,IAAI,CAAC,QAAQ,EAAA;QACT,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,GAAQ,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACjE,QAAA,MAAM,GAAG,GAAG,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AACnH,QAAA,OAAO,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,MAAW,KAAI;YACxE,MAAM,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,QAAQ,CAAC,EAAE;YAC1C,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,iBAAiB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,KAAI;gBAC1F,OAAO,UAAU,CAAC,IAAI;AAC1B,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,eAAoB,KAAI;AACvE,gBAAA,MAAM,SAAS,GAAG;AACd,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;iBAC1B;AACD,gBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,eAAA,EAAkB,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA,CAAE,EACpD,CAAA,aAAA,EAAgB,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA,iBAAA,EAAoB,QAAQ,CAAC,IAAI,CAAA,CAAE,CACtF;AACD,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,gBAAA,OAAO,SAAS;AACpB,YAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAI;AAChB,gBAAA,OAAO,KAAK;AAChB,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAI;YACd,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC;YAC3D,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,MAAA,EAAS,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAA,eAAA,CAAiB,EAC5D,YAAY,CACf;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,YAAA,MAAM,IAAI;AACd,QAAA,CAAC,CAAC;IACN;IAEA,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAA;AACrC,QAAA,MAAM,SAAS,GAAG,IAAI,UAAU,EAAE;AAClC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC;AACvC,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAC7B,QAAO,IAAI;AACP,gBAAA;oBACI,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;;AAE5C,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,SAAS;IACpB;IAEA,eAAe,GAAA;AACX,QAAA,MAAM,MAAM,GAAG;AACX,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE;SACV;AACD,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AAC1E,YAAA,OAAO,CAAC,EAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;AAC7D,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,eAAe,CAAC,GAAG,EAAA;AACf,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC;AAClC,QAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,WAAA,CAAa,EACb,CAAA,gCAAA,CAAkC,CACrC;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACzC;AAEA,IAAA,qBAAqB,CAAC,EAAE,EAAA;QACpB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,iBAAiB,EAAE,EAAE,EAAE,UAAU,EAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AAChH,YAAA,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,IAAI;AACrC,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;gBAC9D,OAAO,GAAG,CAAC,IAAI;AACnB,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,uBAAuB,CAAC,EAAE,EAAA;QACtB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,iBAAiB,EAAE,EAAE,EAAE,YAAY,EAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AAClH,YAAA,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,IAAI;AACvC,YAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;gBACpE,OAAO,MAAM,CAAC,IAAI;AACtB,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,aAAa,CAAC,EAAE,EAAA;AACZ,QAAA,MAAM,GAAG,GAAQ,CAAA,iBAAA,EAAoB,EAAE,EAAE;QACzC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;IACrC;AA/GS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAQrB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAChB,iBAAiB,wCAEjB,iBAAiB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAXpB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cAFrB,MAAM,EAAA,CAAA,CAAA;;4FAET,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BASQ,MAAM;2BAAC,gBAAgB;;0BACvB,MAAM;2BAAC,iBAAiB;;0BAExB,MAAM;2BAAC,iBAAiB;;;ACc3B,MAAO,0BAA2B,SAAQ,eAAe,CAAA;AAkB7D,IAAA,WAAA,CACiD,eAAgC,EACtE,GAA6B,EACA,WAA4B,EAChE,cAA8B,EACH,UAA4B,EACpC,MAAc,EACd,KAAqB,EACxC,QAAkB,EAAA;AAEpB,QAAA,KAAK,CAAC,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,CAAC;QATzC,IAAA,CAAA,eAAe,GAAf,eAAe;QACrD,IAAA,CAAA,GAAG,GAAH,GAAG;QAC0B,IAAA,CAAA,WAAW,GAAX,WAAW;QAG5B,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,KAAK,GAAL,KAAK;QAxBnB,IAAA,CAAA,wBAAwB,GAAU,EAAE;AACnC,QAAA,IAAA,CAAA,KAAK,GAAsB,IAAI,YAAY,EAAO;QACnD,IAAA,CAAA,YAAY,GAAG,KAAK;QAEpB,IAAA,CAAA,UAAU,GAAG,iBAAiB;QAC9B,IAAA,CAAA,WAAW,GAAG,UAAU;QAEjC,IAAA,CAAA,QAAQ,GAAG,QAAQ;QACnB,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,iBAAiB,GAAG,KAAK;AACzB,QAAA,IAAA,CAAA,YAAY,GAAQ;AAClB,YAAA,EAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS;SAChC;QAED,IAAA,CAAA,QAAQ,GAAQ,EAAE;QA+KlB,IAAA,CAAA,QAAQ,GAAG,EAAE;AAlKX,QAAA,IAAI,CAAC,wBAAwB,GAAG,EAAE;IACpC;IAES,QAAQ,GAAA;QACf,KAAK,CAAC,QAAQ,EAAE;AAChB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,OAAW,KAAI;AAC5D,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;QACzB,CAAC,CAAC,CACH;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AACjD,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB;YACF;AACA,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACtB,CAAC,CAAC,CACH;IACH;IAES,aAAa,GAAA;QACpB,KAAK,CAAC,aAAa,EAAE;AACrB,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE;AACzB,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE;AACzB,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;gBAC1B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAC,CAAC;YAC/E;iBAAO;gBACL,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAC,CAAC;YAClF;AACA,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;AAC7B,gBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAC,CAAC;YAClE;QACF;QACA,IAAI,CAAC,2BAA2B,EAAE;QAClC,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChD,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,MAAM,IAAG;AACvC,YAAA,IAAI,CAAC,YAAY,GAAG,MAAM;AAC5B,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,QAAQ,EAAE;AACf,QAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;QACxC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC/C;IAEA,2BAA2B,GAAA;QACzB,IAAI,CAAC,iBAAiB,CAAC,6BAA6B,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,KAAI;AACxE,YAAA,IAAI,CAAC,wBAAwB,GAAG,UAAU;AAC5C,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;IACjC;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC7C;AAEA,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;IACzF;AAEA,IAAA,qBAAqB,CAAC,MAAM,EAAA;AAC1B,QAAA,QAAO,MAAM,CAAC,IAAI;AAChB,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,IAAI,EAAE;gBACX;AACF,YAAA,KAAK,OAAO;gBACV,IAAI,CAAC,SAAS,EAAE;gBAChB;AACF,YAAA,KAAK,aAAa;AAChB,gBAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI;gBAC3B;;IAEN;AAEA,IAAA,oBAAoB,CAAC,MAAM,EAAA;AACzB,QAAA,QAAQ,MAAM,CAAC,EAAE;AACf,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,IAAI,EAAE;gBACX;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,YAAY,EAAE;gBACnB;;IAEN;IAEA,MAAM,IAAI,CAAC,KAAM,EAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE;YAChC;QACF;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC/B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;AACvD,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE;AAC9C,QAAA,IAAG,CAAC,OAAO,IAAI,CAAC,UAAU,EAAE;YAC1B;QACF;AAEA,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC3C,YAAA,IAAI,MAAM,EAAE,KAAK,EAAE;AACjB,gBAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;oBAC3B;gBACF;AACA,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC7B,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK;gBACxB,IAAI,CAAC,gBAAgB,EAAE;gBACvB;YACF;AACA,YAAA,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM;YACpD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,IAAI,CAAC,QAAQ;AACrC,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;YAC/B;iBAAO;AACL,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;YAC/B;YACA,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC/C,QAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACxB,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;QAChB,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC/B,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI;QAC5B;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IAC7B;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,sBAAsB,GAAG,kCAAkC,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA,CAAE,GAAG,EAAE,CAAC;IACrI;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,MAAM,IAAI,GAAQ;AACZ,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE;AAC/B,YAAA,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,EAAE;AACrC,YAAA,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,cAAc,IAAI,EAAE;AAClD,YAAA,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB;AAClD,YAAA,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW;AACtC,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,GAAG;AAC/B,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI;SACjC;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,EAAC,GAAG,EAAE,IAAI,EAAC;QAC3D;AACA,QAAA,OAAO,IAAI;IACb;IAEA,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,IAAG;AACrD,YAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI;YAC3B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;YACxC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC/C,QAAA,CAAC,CAAC;IACJ;IAGA,IAAI,OAAO,CAAC,IAAI,EAAA;AACd,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACtB;IAEA,cAAc,CAAC,KAAK,GAAG,SAAS,EAAA;AAC9B,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,KAAK;YAC9B;QACF;QACA,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ;IAClD;IAEA,iBAAiB,GAAA;QACf,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW;IACxD;IAEA,KAAK,GAAA;IACL;AAjNW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAmBzB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAAC,wBAAA,EAAA,EAAA,EAAA,KAAA,EAEhB,iBAAiB,wCAEjB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAAvF,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAJ,IAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAvBlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EARxB;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,YAAY;AACrB,gBAAA,QAAQ,EAAE;AACb;AACJ,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnCL,ozLAwIA,EAAA,MAAA,EAAA,CAAA,6wDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA2F,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,aAAA,EAAA,UAAA,EAAA,cAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,aAAA,EAAA,OAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,oBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAxC,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAyC,wBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAArD,iBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAsD,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDlGa,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAZtC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,EAAA,SAAA,EAGxB;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,YAAY;AACrB,4BAAA,QAAQ,EAAE;AACb;AACJ,qBAAA,EAAA,UAAA,EACW,KAAK,EAAA,QAAA,EAAA,ozLAAA,EAAA,MAAA,EAAA,CAAA,6wDAAA,CAAA,EAAA;;0BAqBd,MAAM;2BAAC,gBAAgB;;0BAEvB,MAAM;2BAAC,iBAAiB;;0BAExB,MAAM;2BAAC,iBAAiB;;sBAtB5B;;sBACA;;sBACA;;;ME1BU,qBAAqB,CAAA;IAwBhC,IAAa,UAAU,CAAC,IAAI,EAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE;YAC7B;QACF;AACA,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACvB,IAAI,CAAC,YAAY,EAAE;QACnB,KAAK,CAAC,MAAK;YACT,IAAI,CAAC,gBAAgB,EAAE;AACzB,QAAA,CAAC,CAAC;IACJ;;AAGA,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW;IACzB;IAGA,IAAa,YAAY,CAAC,YAAqB,EAAA;AAC7C,QAAA,IAAI,CAAC,aAAa,GAAG,YAAY;QACjC,IAAI,CAAC,gBAAgB,EAAE;IACzB;AACA,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,aAAa;IAC3B;IAGA,IAAa,MAAM,CAAC,MAAW,EAAA;AAC7B,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM;QACrB,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,CAAC,gBAAgB,EAAE;IACzB;AAEA,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO;IACrB;IAMA,WAAA,CAAoB,SAAwB,EAAU,cAA8B,EAAA;QAAhE,IAAA,CAAA,SAAS,GAAT,SAAS;QAAyB,IAAA,CAAA,cAAc,GAAd,cAAc;QA/DpE,IAAA,CAAA,cAAc,GAAG,KAAK;QAEtB,IAAA,CAAA,KAAK,GAAU,EAAE;AAEjB,QAAA,IAAA,CAAA,WAAW,GAAG;YACZ,OAAO;YACP,OAAO;SACR;AAED,QAAA,IAAA,CAAA,WAAW,GAAG;YACZ,kBAAkB;YAClB;SACD;QACD,IAAA,CAAA,cAAc,GAAG,KAAK;;QAGb,IAAA,CAAA,QAAQ,GAAG,KAAK;QAEhB,IAAA,CAAA,YAAY,GAAQ,EAAE;AACrB,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,YAAY,EAAO;QAEtD,IAAA,CAAA,WAAW,GAAQ,EAAE;AAYX,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAO;QAKpD,IAAA,CAAA,aAAa,GAAG,KAAK;QASrB,IAAA,CAAA,OAAO,GAAG,KAAK;AAYf,QAAA,IAAA,CAAA,wBAAwB,GAAQ,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC;AAC9E,QAAA,IAAA,CAAA,wBAAwB,GAAQ,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC;IAI9E;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,UAAU,EAAE;IACnB;IAEA,eAAe,GAAA;QACb,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE;YACnC,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;gBAClD,KAAK,CAAC,MAAK;oBACT,IAAI,CAAC,gBAAgB,EAAE;AACzB,gBAAA,CAAC,CAAC;YACJ;QACF;IACF;IAEA,UAAU,GAAA;QACR,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,EAAE;AACnC,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;QAChC;IACF;IAEA,SAAS,GAAA;QACP,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAS,KAAI;YAC/B,IAAI,IAAI,EAAE,SAAS;AAAE,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AAC/C,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;IACjB;AAEA,IAAA,YAAY,CAAC,MAAW,EAAA;AACtB,QAAA,IAAI,MAAM,CAAC,UAAU,EAAE;YACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC;AAChG,YAAA,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE;AAC1B,gBAAA,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS;gBAC1B,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY;AACxC,gBAAA,IAAI,IAAI,EAAE,QAAQ,CAAC,WAAW,EAAE;AAC9B,oBAAA,MAAM,KAAK,GAAc,IAAI,CAAC,QAAQ,CAAC,SAAS;AAChD,oBAAA,IAAI,SAAS;AACb,oBAAA,IAAG,KAAK;AAAE,wBAAA,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;gBACvC;YACF;QACF;IACF;IAEA,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;gBAChD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;oBAC7B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;gBAC7C;YACF;QACF;IACF;AAEA,IAAA,cAAc,CAAC,KAAK,EAAE,IAAA,GAAY,EAAE,EAAA;AAClC,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACrB,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,gBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;oBACzB,IAAI,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE;wBACzC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;AACtC,wBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;oBAC3D;oBACA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;gBACrC;qBAAO;AACL,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACjD;YACF;iBAAO,IAAI,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE;AACnD,gBAAA,IAAI,GAAG;AACP,gBAAA,QAAQ,IAAI,CAAC,GAAG;AACd,oBAAA,KAAK,kBAAkB;AACrB,wBAAA,GAAG,GAAG;4BACJ,QAAQ,EAAE,IAAI,CAAC,QAAQ;4BACvB,OAAO,EAAE,IAAI,CAAC,OAAO;4BACrB,IAAI,EAAE,IAAI,CAAC,IAAI;4BACf,eAAe,EAAE,IAAI,CAAC,eAAe;4BACrC,cAAc,EAAE,IAAI,CAAC,cAAc;4BACnC,WAAW,EAAE,IAAI,CAAC,WAAW;4BAC7B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;4BACvC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;4BACvC,iBAAiB,EAAE,IAAI,CAAC;yBACzB;wBACD;AACF,oBAAA,KAAK,KAAK;AACR,wBAAA,GAAG,GAAG;4BACJ,QAAQ,EAAE,IAAI,CAAC,QAAQ;4BACvB,OAAO,EAAE,IAAI,CAAC,OAAO;4BACrB,IAAI,EAAE,IAAI,CAAC,IAAI;4BACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;yBACxB;wBACD;AACF,oBAAA;AACE,wBAAA,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;wBACpB;;gBAEJ,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC;YAC/C;AAAO,iBAAA,IAAI,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE;AACpC,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACvD;AACF,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,IAAI;IACb;IAEA,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YAC1C;QACF;QAEA,MAAM,IAAI,GAAG,EAAE;QACf,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;AACvC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;QAC3B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;IAC7C;IAEA,gBAAgB,CAAC,KAAK,EAAE,IAAA,GAAY,EAAE,EAAE,UAAU,GAAG,QAAQ,EAAA;AAC3D,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACrB,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACzB,gBAAA,IAAI,IAAI,CAAC,UAAU,EAAE;oBACnB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU;gBAClC;qBAAO,IAAI,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE;AAChD,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU;gBACrD;qBAAO;AACL,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;gBACrB;YACF;AAAO,iBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;AACjC,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC;gBAC5D,IAAI,aAAa,GAAG,KAAK;gBACzB,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACxB,oBAAA,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;wBACzF,aAAa,GAAG,IAAI;oBACtB;AACF,gBAAA,CAAC,CAAC;AACF,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,aAAa,GAAG,GAAG,GAAG,SAAS;YAClD;iBAAO;gBACL,IAAI,KAAK,GAAG,EAAE;gBACd,IAAI,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE;oBAC5C,KAAK,GAAG,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE;gBACpD;AAAO,qBAAA,IAAI,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE;oBACpC,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU;oBAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;AAC9D,wBAAA,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oBACrC;AACA,oBAAA,KAAK,GAAG,CAAC,EAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAC,CAAC;gBACvC;AACA,gBAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;oBACrB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK;AAC7B,gBAAA,CAAC,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,cAAc,CAAC,MAAO,EAAE,WAAW,GAAG,IAAI,EAAA;QACxC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,UAAU,CAAC;AACjE,QAAA,IAAI,gBAAgB;QACpB,IAAI,KAAK,GAAG,IAAI;QAChB,IAAI,MAAM,EAAE;;YAEV,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC;YACtC,UAAU,CAAC,GAAG,CAAC;AACf,YAAA,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;YACrC,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;AACpC,YAAA,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;AACjC,YAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM;QACpC;AACA,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;QACtB,MAAM,qBAAqB,GAAG,EAAE;AAChC,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,gBAAgB,CAAC;AACrE,QAAA,IAAI,CAAC,0BAA0B,CAAC,gBAAgB,EAAE,qBAAqB,CAAC;QACxE,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,IAAI;YACtC,IAAI,WAAW,EAAE;AACf,gBAAA,IAAI,CAAC,mBAAmB,CAAC,qBAAqB,CAAC;YACjD;QACF;QACA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;AAC/C,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;IACnC;IAEA,0BAA0B,CAAC,gBAAgB,EAAE,qBAAqB,EAAA;AAChE,QAAA,gBAAgB,EAAE,OAAO,CAAC,CAAC,KAAK,KAAI;AAClC,YAAA,IAAI,IAAI,GAAG,KAAK,CAAC,YAAY;YAC7B,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE;gBAC5C,IAAI,IAAI,GAAG,GAAG,KAAK,EAAE,MAAM,EAAE,eAAe;YAC9C;AACA,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBAClB,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAA,GAAA,EAAM,IAAI,CAAA,MAAA,EAAS,KAAK,CAAC,OAAO,CAAA,CAAE;YAClE;AACF,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,gBAAgB,GAAG,EAAE,EAAA;QAChF,IAAI,OAAO,GAAG,IAAI;AAClB,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACrB,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;gBAC1B,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,EAAE;oBAC7F,OAAO,GAAG,KAAK;gBACjB;YACF;iBAAO,IAAI,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,mBAAmB,EAAE;gBACzD,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,CAAC;YACxE;iBAAO;gBACL,MAAM,kBAAkB,GAAQ,gBAAgB,EAAE,IAAI,CAAC,CAAC,KAAK,KAAI;AAC/D,oBAAA,IAAI,UAAU,GAAG,KAAK,CAAC,YAAY;oBACnC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE;wBAC5C,UAAU,IAAI,GAAG,GAAG,KAAK,EAAE,MAAM,EAAE,eAAe;oBACpD;AACA,oBAAA,MAAM,OAAO,GAAG,UAAU,MAAM,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACtD,oBAAA,OAAO,OAAO;AAChB,gBAAA,CAAC,CAAC;gBACF,IAAI,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE;oBACzC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,kBAAkB,CAAC;gBAC5D;YACF;AACF,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,OAAO;IAChB;AAEA,IAAA,mBAAmB,CAAC,qBAAqB,EAAA;QACvC,IAAI,iBAAiB,GAAG,EAAE;AAC1B,QAAA,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE;AACnC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC;YACzC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,KAAI;AAC3B,gBAAA,iBAAiB,IAAI,CAAA,IAAA,EAAO,qBAAqB,CAAC,GAAG,CAAC,OAAO;AAC/D,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,IAAI,OAAO,CAAC,iBAAiB,CAAC,EAAE;YAC9B,iBAAiB,GAAG,2FAA2F;QACjH;aAAO;AACL,YAAA,iBAAiB,GAAG,CAAA,6BAAA,EAAgC,iBAAiB,CAAA,KAAA,CAAO;QAC9E;AACA,QAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,uBAAA,CAAyB,EACzB,iBAAiB,CACpB;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACvC;IAEA,YAAY,GAAA;QACV,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AAC/E,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAC5B;IACF;IAEA,eAAe,GAAA;QACX,KAAK,CAAC,MAAK;YACT,IAAI,CAAC,qBAAqB,EAAE;AAC9B,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,eAAe,CAAC,KAAK,EAAA;QACnB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;IAC7C;AAEA,IAAA,yBAAyB,CAAC,IAAI,EAAA;AAC5B,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACvB,YAAA,OAAO;iBACF,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;iBAChD,MAAM,CAAC,IAAI,IAAI,IAAI,KAAK,SAAS,CAAC;QACzC;aAAO,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE;YACpD,OAAO,MAAM,CAAC,WAAW,CACrB,MAAM,CAAC,OAAO,CAAC,IAAI;AACd,iBAAA,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,KAAK,KAAK,SAAS;iBAC1C,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAC,CAC3E;QACH;AACA,QAAA,OAAO,IAAI;IACb;+GAlVW,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAlF,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAhB,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EA+DC,gBAAgB,EAAA,EAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACtC,mBAAmB,gDC/EhC,ymBASA,EAAA,MAAA,EAAA,CAAA,4DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,YAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA6F,iBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDMa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,cAGjB,KAAK,EAAA,QAAA,EAAA,ymBAAA,EAAA,MAAA,EAAA,CAAA,4DAAA,CAAA,EAAA;;sBAoBlB;;sBAEA;;sBACA;;sBAGA;;sBAWA;;sBAMA;;sBASA;;sBAaA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,aAAa,EAAE,EAAC,IAAI,EAAE,gBAAgB,EAAC;;sBACjD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,mBAAmB,EAAE,EAAC,MAAM,EAAE,KAAK,EAAC;;;AE/EjD;;;;;;;;;;;;;;AAcE;AA+CI,MAAO,oBAAqB,SAAQ,eAAe,CAAA;IACvD,IAAsB,QAAQ,CAAC,IAAI,EAAA;AACjC,QAAA,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE;AAClB,YAAA,IAAI,CAAC,OAAO,GAAG,EAAE;QACnB;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI;QACxB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE;YACtB,IAAI,GAAG,CAAC,IAAI,EAAE,sBAAsB,CAAC,KAAK,QAAQ,EAAE;AAClD,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,mBAAmB,GAAG,GAAG,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC;YACnE;iBAAO;AACL,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;YACtB;QACF;AAAO,aAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE;AACrC,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACtB;IACF;AAEA,IAAA,IAAa,QAAQ,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,GAAG,EAAE,QAAQ;IAC3B;AAkCA,IAAA,WAAA,CACiD,eAAgC,EACtE,GAAuB,EACM,WAA4B,EAChE,cAA8B,EACK,UAA4B,EAC5C,MAAc,EACd,KAAqB,EACxC,QAAkB,EAClB,UAAqB,EAAA;AAEvB,QAAA,KAAK,CAAC,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,CAAC;QAVrD,IAAA,CAAA,eAAe,GAAf,eAAe;QACrD,IAAA,CAAA,GAAG,GAAH,GAAG;QAC0B,IAAA,CAAA,WAAW,GAAX,WAAW;QAG5B,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,KAAK,GAAL,KAAK;QAvCnB,IAAA,CAAA,qBAAqB,GAAU,EAAE;AAChC,QAAA,IAAA,CAAA,KAAK,GAAsB,IAAI,YAAY,EAAO;QAE5D,IAAA,CAAA,SAAS,GAAG,KAAK;AAIjB,QAAA,IAAA,CAAA,UAAU,GAAG;AACX,YAAA,EAAC,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,eAAe,EAAC;AAC5C,YAAA,EAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAC;AAC/B,YAAA,EAAC,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAC;AACnC,YAAA,EAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAC;SAChC;AACD,QAAA,IAAA,CAAA,YAAY,GAAG;AACb,YAAA,EAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAC;AACxB,YAAA,EAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAC;AACpC,YAAA,EAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAC;SAC3B;AACD,QAAA,IAAA,CAAA,SAAS,GAAG;AACV,YAAA,EAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAC;AACxB,YAAA,EAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;SACxB;QAED,IAAA,CAAA,QAAQ,GAAG,QAAQ;QACnB,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,QAAQ,GAAQ,EAAE;QAClB,IAAA,CAAA,4BAA4B,GAAQ,QAAQ,CAAC,CAAC,UAAkB,KAAK,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;QAExH,IAAA,CAAA,UAAU,GAAG,UAAU;QACvB,IAAA,CAAA,WAAW,GAAGpF,SAAO;AAe5B,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;IAES,QAAQ,GAAA;QACf,KAAK,CAAC,QAAQ,EAAE;AAChB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,KAAK;AAC7B,QAAA,IAAI,CAAC,GAAG,CAAC,gBAAgB,GAAG,SAAS;AACrC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,OAAW,KAAI;AAC5D,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;QACzB,CAAC,CAAC,CACH;IACH;IAES,aAAa,GAAA;QACpB,KAAK,CAAC,aAAa,EAAE;QACrB,IAAI,CAAC,wBAAwB,EAAE;AAC/B,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE;AAC/B,QAAA,IAAI,CAAC,GAAG,CAAC,wBAAwB,EAAE;AACnC,QAAA,IAAI,CAAC,GAAG,CAAC,4BAA4B,EAAE;AACvC,QAAA,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE;QACpB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AACxC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACjB,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AACjD,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB;YACF;QACF,CAAC,CAAC,CACL;QACD,IAAI,CAAC,QAAQ,EAAE;AACf,QAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;QACxC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC/C;IAEA,wBAAwB,GAAA;QACtB,IAAI,CAAC,iBAAiB,CAAC,yBAAyB,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,KAAI;AACpE,YAAA,IAAI,CAAC,qBAAqB,GAAG,UAAU;AACzC,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;IACjC;IAES,eAAe,GAAA;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;AAC/B,YAAA,IAAI,CAAC,cAAc,EAAE,aAAa,EAAE,KAAK,EAAE;QAC7C;QACA,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY;AACzC,QAAA,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;AAC/B,YAAA,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE;QAC3B;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE;IACvB;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC7C;AAEA,IAAA,aAAa,CAAC,MAAM,EAAA;QAClB,IAAI,IAAI,CAAC,GAAG,CAAC,gBAAgB,KAAK,SAAS,EAAE;AAC3C,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,EAAE;QAC7B;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;IAC1B;AAEA,IAAA,mBAAmB,CAAC,UAAkB,EAAA;QACpC,MAAM,OAAO,GAAG,EAAE;AAClB,QAAA,IAAI,UAAU,IAAI,UAAU,KAAK,EAAE,EAAE;YACnC,OAAO,CAAC,IAAI,CAAC;AACX,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,UAAU,EAAE,MAAM;AAClB,gBAAA,IAAI,EAAE,WAAW;AAClB,aAAA,CAAC;QACJ;AACA,QAAA,IAAI,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE;YACjC,OAAO,CAAC,IAAI,CAAC;AACX,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,oBAAoB;AACpC,gBAAA,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,oBAAoB;AACpC,gBAAA,UAAU,EAAE,aAAa;AACzB,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,IAAI,EAAE,GAAG;AACT,gBAAA,SAAS,EAAE;AACZ,aAAA,CAAC;QACJ;QACA,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;IACjC;AAEA,IAAA,iBAAiB,CAAC,MAAM,EAAA;AACtB,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC9B;QACF;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,gBAAgB,GAAG,EAAE;AAC9B,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,EAAE;QAC3B,MAAM,OAAO,GAAG,EAAE;QAClB,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE;AAC1C,YAAA,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE;YAC5B;QACF;AACA,QAAA,IAAI,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE;YACjC,OAAO,CAAC,IAAI,CAAC;AACX,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,oBAAoB;AACpC,gBAAA,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,oBAAoB;AACpC,gBAAA,UAAU,EAAE,aAAa;AACzB,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,IAAI,EAAE,GAAG;AACT,gBAAA,SAAS,EAAE;AACZ,aAAA,CAAC;QACJ;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,EAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAK;AACvC,YAAA,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE;AAC9B,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,gBAAgB,KAAK,SAAS;IAC3F;AAEA,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,SAAS,CAAC;IACxD;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC9B;QACF;AACA,QAAA,IAAI,CAAC,YAAY,EAAE,qBAAqB,EAAE;QAC1C,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAClD;AAEA,IAAA,uBAAuB,CAAC,KAAK,EAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC9B,KAAK,CAAC,eAAe,EAAE;YACvB;QACF;QACA,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,YAAY,EAAE,qBAAqB,EAAE;QAC1C,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAClD;IAEmB,wBAAwB,GAAA;QACzC,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,KAAI;AACjD,YAAA,OAAO,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC;AAC9C,QAAA,CAAC,CAAC;IACJ;IAEmB,oBAAoB,GAAA;;AAErC,QAAA,IAAI,IAAI,CAAC,wBAAwB,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,wBAAwB,CAAC,CAAC,KAAK,EAAE;QACxC;QAEA,IAAI,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW,KAAI;AAC9C,YAAA,MAAM,IAAI,GAAG;AACX,gBAAA,QAAQ,EAAE,yBAAyB;AACnC,gBAAA,KAAK,EAAE,mBAAmB;AAC1B,gBAAA,QAAQ,EAAE,sEAAsE;gBAChF,aAAa,EAAE,CAAC,WAAW,CAAC;AAC5B,gBAAA,eAAe,EAAE;aAClB;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,0BAA0B,EAAE;AACjE,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,SAAS,EAAE,KAAK;AACjB,aAAA,CAAC;YAEF,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AAC3C,gBAAA,IAAI,MAAM,EAAE,SAAS,EAAE;AACrB,oBAAA,IAAI,CAAC,SAAS,GAAG,IAAI;oBACrB,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAK;AAClD,wBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAClC,SAAS,EACT,SAAS,EACT,iBAAiB,EACjB,CAAA,8BAAA,EAAiC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAA,2BAAA,CAA6B,CACjF;AACD,wBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;wBACrC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,QAAQ,IAAI,UAAU,CAAC;AACzD,oBAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAI;wBACjB,MAAM,WAAW,GAAG,IAAI,YAAY,CAClC,OAAO,EACP,OAAO,EACP,CAAA,aAAA,CAAe,EACf,CAAA,0BAAA,EAA6B,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,OAAO,IAAI,eAAe,CAAA,CAAE,CACjG;AACD,wBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACvC,oBAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACd,wBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACxB,oBAAA,CAAC,CAAC;gBACJ;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEQ,mBAAmB,GAAA;AACzB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE;AACpB,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;AACxB,YAAA,iBAAiB,EAAE,EAAE;AACrB,YAAA,yBAAyB,EAAE;SAC5B;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC1G,YAAA,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI;YAC3B,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;gBAC5C,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACnF,oBAAA,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI;oBACtC,MAAM,QAAQ,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC/E,IAAI,QAAQ,EAAE;AACZ,wBAAA,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAC,CAAC;oBACxE;AACF,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AACpC,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAEjC,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACpH,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI;YAC5B,MAAM,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;AAC1C,gBAAA,MAAM,cAAc,GAAG,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACjH,gBAAA,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;;;AAG/B,oBAAA,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC7G,oBAAA,MAAM,yBAAyB,GAAG,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,EAAE;oBAC/F,IAAI,yBAAyB,EAAE;AAC7B,wBAAA,WAAW,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAC,CAAC;oBAC1E;AACA,oBAAA,OAAO,OAAO,CAAC,OAAO,EAAE;gBAC1B;AACA,gBAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AAC/E,oBAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE;oBAClC,MAAM,QAAQ,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACrE,IAAI,QAAQ,EAAE;AACZ,wBAAA,WAAW,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAC,CAAC;oBAC1E;AACF,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AACpC,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;AAEjC,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC;IAC/E;AAEQ,IAAA,uBAAuB,CAAC,WAAW,EAAA;QACzC,MAAM,QAAQ,GAAG,EAAE;AACnB,QAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;QAElE,WAAW,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AAC/C,YAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;AAC9D,QAAA,CAAC,CAAC;QAEF,WAAW,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AACvD,YAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;AACvE,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC9B;AAEA,IAAA,qBAAqB,CAAC,MAAM,EAAA;AAC1B,QAAA,QAAO,MAAM,CAAC,IAAI;AAChB,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,IAAI,EAAE;gBACX;AACF,YAAA,KAAK,OAAO;gBACV,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAI,CAAC,gBAAgB,EAAE;gBACvB;AACF,YAAA,KAAK,aAAa;AAChB,gBAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI;gBAC3B;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,YAAY,EAAE;gBACnB;;IAEN;AAEA,IAAA,oBAAoB,CAAC,MAAM,EAAA;AACzB,QAAA,QAAQ,MAAM,CAAC,EAAE;AACf,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,IAAI,EAAE;gBACX;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,YAAY,EAAE;gBACnB;;IAEN;IAEA,MAAM,IAAI,CAAC,KAAM,EAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE;YAChC;QACF;AACA,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;QACnC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;QACvD,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;AACzC,QAAA,IAAG,CAAC,OAAO,IAAI,CAAC,UAAU,EAAE;AAC1B,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,YAAA,CAAc,EACd,CAAA,qDAAA,CAAuD,CAC1D;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;YACrC;QACF;AAEA,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;YACnE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AACxB,gBAAA,IAAI,CAAC,QAAQ,GAAG,MAAM;AACtB,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;gBAC7B,IAAI,CAAC,eAAe,EAAE;YACxB;YACA,OAAO,MAAM,EAAE,EAAE;AACnB,QAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACxB,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,SAAS,IAAI,CAAC,MAAM,EAAE;YACxB,MAAM,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC;QAC1C;QACA,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;YAC3B,IAAI,CAAC,gBAAgB,EAAE;QACzB;IACF;IAEA,wBAAwB,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC9B;QACF;QACA,IAAI,CAAC,QAAQ,CAAC,kBAAkB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB;IACtE;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,sBAAsB,GAAG,8BAA8B,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA,CAAE,GAAG,EAAE,CAAC;IACjI;AAEA,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,YAAA,OAAO,uDAAuD;QAChE;aAAO;AACL,YAAA,OAAO,gEAAgE;QACzE;IACF;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,GAAG,CAAC,gBAAgB,GAAG,EAAE;AAC9B,QAAA,IAAI,CAAC,GAAG,CAAC,oBAAoB,GAAG,EAAE;AAClC,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,EAAE;IAC5B;IAEA,KAAK,GAAA;IACL;AA3aW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAsDnB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAAqF,kBAAA,EAAA,EAAA,EAAA,KAAA,EAEhB,iBAAiB,wCAEjB,yBAAyB,EAAA,EAAA,EAAA,KAAA,EAAA9F,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAJ,IAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA1D1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EARlB;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,YAAY;AACrB,gBAAA,QAAQ,EAAE;AACb;SACJ,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAuD+B,qBAAqB,yECjHzD,qydAmUA,EAAA,MAAA,EAAA,CAAA,gvIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAwB,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gHAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAc,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,aAAA,EAAA,UAAA,EAAA,cAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,aAAA,EAAA,OAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,oBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA4D,oBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,OAAA,EAAA,aAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,aAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAtD,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAuD,wBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAvE,oBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,cAAA,EAAA,eAAA,EAAA,YAAA,EAAA,WAAA,EAAA,cAAA,EAAA,aAAA,EAAA,+BAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,8BAAA,EAAA,+BAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAwE,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,aAAA,EAAA,YAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,aAAA,EAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDtQa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAZhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAAA,SAAA,EAGjB;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,YAAY;AACrB,4BAAA,QAAQ,EAAE;AACb;AACJ,qBAAA,EAAA,UAAA,EACW,KAAK,EAAA,QAAA,EAAA,qydAAA,EAAA,MAAA,EAAA,CAAA,gvIAAA,CAAA,EAAA;;0BAwDd,MAAM;2BAAC,gBAAgB;;0BAEvB,MAAM;2BAAC,iBAAiB;;0BAExB,MAAM;2BAAC,yBAAyB;;sBAzDpC;;sBAoBA;;sBACA;;sBA8BA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,cAAc,EAAE,EAAC,IAAI,EAAE,qBAAqB,EAAC;;;MEzG7C,aAAa,CAAA;AAN1B,IAAA,WAAA,GAAA;QAQW,IAAA,CAAA,QAAQ,GAAG,MAAM;QACjB,IAAA,CAAA,KAAK,GAAG,EAAE;QACV,IAAA,CAAA,OAAO,GAAG,EAAE;QACZ,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,EAAE,GAAG,EAAE;QACP,IAAA,CAAA,IAAI,GAAG,EAAE;AAKnB,IAAA;AAHC,IAAA,WAAW,CAAC,KAAK,EAAA;QACf,KAAK,CAAC,cAAc,EAAE;IACxB;+GAXW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,aAAa,6LCR1B,wiBAaI,EAAA,MAAA,EAAA,CAAA,wgGAAA,CAAA,EAAA,CAAA,CAAA;;4FDLS,aAAa,EAAA,UAAA,EAAA,CAAA;kBANzB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,cAGR,KAAK,EAAA,QAAA,EAAA,wiBAAA,EAAA,MAAA,EAAA,CAAA,wgGAAA,CAAA,EAAA;;sBAIlB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;AECG,MAAO,iBAAkB,SAAQ,eAAe,CAAA;AAKpD,IAAA,WAAA,CACiD,eAAgC,EACtE,GAAuB,EACM,WAA4B,EAChE,cAA8B,EACK,UAA4B,EAC5C,MAAc,EACd,KAAqB,EACxC,QAAkB,EAAA;AAEpB,QAAA,KAAK,CAAC,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,CAAC;QATzC,IAAA,CAAA,eAAe,GAAf,eAAe;QACrD,IAAA,CAAA,GAAG,GAAH,GAAG;QAC0B,IAAA,CAAA,WAAW,GAAX,WAAW;QAG5B,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,KAAK,GAAL,KAAK;AAVlB,QAAA,IAAA,CAAA,KAAK,GAAsB,IAAI,YAAY,EAAO;AAClD,QAAA,IAAA,CAAA,QAAQ,GAAsB,IAAI,YAAY,EAAO;IAa/D;IACA,KAAK,GAAA;IACL;IAEA,IAAI,GAAA;IACJ;IAEA,IAAI,GAAA;QACF,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA,EAAG,IAAI,CAAC,QAAQ,CAAA,CAAE,CAAC;IAChD;AAEA,IAAA,YAAY,CAAC,IAAI,EAAA;QACf,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA,UAAA,EAAa,IAAI,CAAA,CAAE,CAAC;IAChD;AA7BW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAMhB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAAN,kBAAA,EAAA,EAAA,EAAA,KAAA,EAEhB,iBAAiB,wCAEjB,yBAAyB,EAAA,EAAA,EAAA,KAAA,EAAA9F,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAJ,IAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAV1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,oJChB9B,yqDAgCA,EAAA,MAAA,EAAA,CAAA,+zEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAyG,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDhBa,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAN7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,cAGb,KAAK,EAAA,QAAA,EAAA,yqDAAA,EAAA,MAAA,EAAA,CAAA,+zEAAA,CAAA,EAAA;;0BAQd,MAAM;2BAAC,gBAAgB;;0BAEvB,MAAM;2BAAC,iBAAiB;;0BAExB,MAAM;2BAAC,yBAAyB;;sBARpC;;sBACA;;;MENU,8BAA8B,CAAA;AAczC,IAAA,WAAA,CAAoB,SAAyC,EAAkC,IAAS,EAAU,cAA8B,EAAA;QAA5H,IAAA,CAAA,SAAS,GAAT,SAAS;QAAkE,IAAA,CAAA,IAAI,GAAJ,IAAI;QAAe,IAAA,CAAA,cAAc,GAAd,cAAc;QAZhI,IAAA,CAAA,eAAe,GAAG,EAAE;QACpB,IAAA,CAAA,cAAc,GAAG,EAAE;QACnB,IAAA,CAAA,kBAAkB,GAAG,EAAE;QACvB,IAAA,CAAA,kBAAkB,GAAG,SAAS;QAC9B,IAAA,CAAA,kBAAkB,GAAG,EAAE;QAEvB,IAAA,CAAA,MAAM,GAAG,KAAK;QACd,IAAA,CAAA,WAAW,GAAQ,EAAE;QACrB,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,mBAAmB,GAAG,KAAK;AAGzB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;QACnC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI;IACpC;AAEA,IAAA,IAAI,gBAAgB,GAAA;QAClB,IAAI,QAAQ,GAAG,KAAK;QACpB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;YACjC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AAChC,gBAAA,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE;oBAC7B,QAAQ,GAAG,IAAI;gBACjB;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,QAAQ;IACjB;IAEA,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAA;AAC3B,QAAA,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,IAAI;AACrC,QAAA,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,UAAU;AAC3C,QAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,MAAM;AACnC,QAAA,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,OAAO;AACrC,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;IAChC;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO;IAC9B;IAEA,eAAe,GAAA;QACb,IAAI,gBAAgB,GAAG,EAAE;QACzB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;YACjC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;gBAChC,gBAAgB,KAAK,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC;AAClD,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,gBAAgB,CAAC;AAC/C,QAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,WAAA,CAAa,EACb,CAAA,gCAAA,CAAkC,CACrC;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACvC;IAEA,eAAe,GAAA;QACb,IAAI,gBAAgB,GAAG,EAAE;QACzB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;YACjC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;gBAChC,gBAAgB,KAAK,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC;AAClD,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,gBAAgB,CAAC;AAC/C,QAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,WAAA,CAAa,EACb,CAAA,gCAAA,CAAkC,CACrC;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACvC;AAEA,IAAA,OAAO,CAAC,UAAU,EAAA;AAChB,QAAA,UAAU,CAAC,OAAO,GAAG,SAAS;AAC9B,QAAA,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;IACpC;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC;IAChC;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;IAC9B;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;IAC7B;AA5FW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,8BAA8B,8CAc8B,eAAe,EAAA,EAAA,EAAA,KAAA,EAAA3G,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAd3E,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,8BAA8B,wFCb3C,sgGAwEA,EAAA,MAAA,EAAA,CAAA,u8JAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAsG,2BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,aAAA,EAAA,OAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,oBAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FD3Da,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAN1C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,6BAA6B,cAG3B,KAAK,EAAA,QAAA,EAAA,sgGAAA,EAAA,MAAA,EAAA,CAAA,u8JAAA,CAAA,EAAA;;0BAgB6C,MAAM;2BAAC,eAAe;;;AEAlF,MAAO,sBAAuB,SAAQ,eAAe,CAAA;IAmGzD,WAAA,CACiD,eAAgC,EACtE,GAAuB,EACM,WAA4B,EAChE,cAA8B,EACK,UAA4B,EAC5C,UAAqB,EAChC,iBAAoC,EACpC,mBAAwC,EAC7B,MAAc,EACd,KAAqB,EACxC,QAAkB,EAAA;AAEpB,QAAA,KAAK,CAAC,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,CAAC;QAZrD,IAAA,CAAA,eAAe,GAAf,eAAe;QACrD,IAAA,CAAA,GAAG,GAAH,GAAG;QAC0B,IAAA,CAAA,WAAW,GAAX,WAAW;QAG5B,IAAA,CAAA,UAAU,GAAV,UAAU;QACrB,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,mBAAmB,GAAnB,mBAAmB;QACR,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,KAAK,GAAL,KAAK;QA5GnB,IAAA,CAAA,qBAAqB,GAAU,EAAE;QACjC,IAAA,CAAA,sBAAsB,GAAU,EAAE;QAClC,IAAA,CAAA,uBAAuB,GAAU,EAAE;QAE5C,IAAA,CAAA,QAAQ,GAAG,IAAI;QACf,IAAA,CAAA,QAAQ,GAAG,QAAQ;QACnB,IAAA,CAAA,gBAAgB,GAAG,EAAE;QAGrB,IAAA,CAAA,YAAY,GAAG,KAAK;QACpB,IAAA,CAAA,iBAAiB,GAAG,EAAE;QACtB,IAAA,CAAA,yBAAyB,GAAG,EAAE;QAC9B,IAAA,CAAA,oBAAoB,GAAG,EAAE;QACzB,IAAA,CAAA,oBAAoB,GAAG,EAAE;QACzB,IAAA,CAAA,oBAAoB,GAAG,EAAE;QACzB,IAAA,CAAA,aAAa,GAAG,EAAE;QAClB,IAAA,CAAA,qBAAqB,GAAG,EAAE;QAC1B,IAAA,CAAA,gBAAgB,GAAG,EAAE;QACrB,IAAA,CAAA,gBAAgB,GAAG,EAAE;QACrB,IAAA,CAAA,gBAAgB,GAAG,EAAE;AACrB,QAAA,IAAA,CAAA,kBAAkB,GAAG;AACnB,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,cAAc,EAAE,EAAE;AAClB,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,kBAAkB,EAAE;SACrB;AACD,QAAA,IAAA,CAAA,0BAA0B,GAAG;AAC3B,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,YAAY,EAAC,WAAW;AACxB,YAAA,IAAI,EAAE;AACJ,gBAAA,UAAU,EAAE,EAAE;AACd,gBAAA,SAAS,EAAE,EAAE;AACb,gBAAA,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK;AACzB;SACF;AACD,QAAA,IAAA,CAAA,qBAAqB,GAAG;AACtB,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,YAAY,EAAE,WAAW;AACzB,YAAA,IAAI,EAAE;AACJ,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,eAAe,EAAE,IAAI;gBACrB,gBAAgB,EAAE,CAAC,KAAK;AACzB;SACF;AACD,QAAA,IAAA,CAAA,qBAAqB,GAAG;AACtB,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,YAAY,EAAE,EAAE;AAChB,YAAA,aAAa,EAAE;SAChB;AACD,QAAA,IAAA,CAAA,qBAAqB,GAAG;AACtB,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,YAAY,EAAE,EAAE;AAChB,YAAA,aAAa,EAAE;SAChB;QAMD,IAAA,CAAA,yBAAyB,GAAG,EAAE;QAC9B,IAAA,CAAA,wBAAwB,GAAG,EAAE;QAC7B,IAAA,CAAA,yBAAyB,GAAG,EAAE;QAC9B,IAAA,CAAA,wBAAwB,GAAG,EAAE;QAC7B,IAAA,CAAA,mBAAmB,GAAG,EAAE;QACxB,IAAA,CAAA,mBAAmB,GAAG,EAAE;QAIxB,IAAA,CAAA,WAAW,GAAG,KAAK;QACnB,IAAA,CAAA,WAAW,GAAG,KAAK;QAGnB,IAAA,CAAA,kBAAkB,GAAG,CAAC,CAAC;QACvB,IAAA,CAAA,aAAa,GAAG,CAAC,CAAC;QAClB,IAAA,CAAA,gBAAgB,GAAG,CAAC,CAAC;QACrB,IAAA,CAAA,aAAa,GAAG,CAAC,CAAC;QAClB,IAAA,CAAA,aAAa,GAAG,CAAC,CAAC;QAElB,IAAA,CAAA,iBAAiB,GAAG,KAAK;QACzB,IAAA,CAAA,mBAAmB,GAAG,KAAK;QAC3B,IAAA,CAAA,cAAc,GAAG,KAAK;QACtB,IAAA,CAAA,cAAc,GAAG,KAAK;QACtB,IAAA,CAAA,cAAc,GAAG,KAAK;AACtB,QAAA,IAAA,CAAA,cAAc,GAAyB,IAAI,eAAe,CAAM,KAAK,CAAC;QACtE,IAAA,CAAA,YAAY,GAAG,KAAK;QAEX,IAAA,CAAA,YAAY,GAAG,EAAE;QAEjB,IAAA,CAAA,UAAU,GAAG,UAAU;AAEtB,QAAA,IAAA,CAAA,KAAK,GAAsB,IAAI,YAAY,EAAO;AAClD,QAAA,IAAA,CAAA,QAAQ,GAAsB,IAAI,YAAY,EAAO;QAmF/D,IAAA,CAAA,WAAW,GAAG,KAAK;AAnEjB,QAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,EAAE;IACxB;IAGA,IAAsB,QAAQ,CAAC,IAAI,EAAA;AACjC,QAAA,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE;AAClB,YAAA,IAAI,CAAC,OAAO,GAAG,EAAE;QACnB;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI;QACxB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE;YACtB,IAAI,CAAC,kBAAkB,EAAE;YACzB,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC,KAAK,QAAQ,EAAE;gBACxD,IAAI,CAAC,YAAY,GAAG;oBAClB,EAAC,EAAE,EAAE,qBAAqB,EAAE,KAAK,EAAE,qBAAqB,EAAE,MAAM,EAAE,KAAK;iBACxE;YACH;iBAAO;AACL,gBAAA,IAAI,CAAC,YAAY,GAAG,EAAE;YACxB;QACF;aAAO;AACL,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;QAChC;AACA,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAC1B,IAAI,CAAC,gBAAgB,EAAE;IACzB;AAEA,IAAA,IAAa,QAAQ,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,GAAG,EAAE,QAAQ;IAC3B;IAGA,IAAa,QAAQ,CAAC,EAAU,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;QACnB,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,QAAQ,EAAE;AAClC,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;QAChC;AACA,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QACxB,IAAI,CAAC,gBAAgB,EAAE;IACzB;AAEA,IAAA,IAAa,QAAQ,GAAA;QACnB,OAAO,IAAI,CAAC,SAAS;IACvB;AAEA,IAAA,IAAa,0BAA0B,GAAA;QACrC,OAAO,KAAK,CAAC;eACN,CAAC,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,kBAAkB,CAAC;IAClE;AAEA,IAAA,IAAa,yBAAyB,GAAA;AACpC,QAAA,IAAI,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;AAC3E,YAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,iBAAiB;QACrD;QACA,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,kBAAkB,CAAC,EAAE;AAC7D,YAAA,OAAO,kFAAkF;QAC3F;AACA,QAAA,OAAO,EAAE;IACX;IAES,QAAQ,GAAA;QACf,KAAK,CAAC,QAAQ,EAAE;QAChB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,EAAE,QAAQ,EAAE,sBAAsB;AAC9E,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;QAChE,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,0BAA0B,EAAE;IACnC;IAGA,YAAY,GAAA;QACV,IAAI,CAAC,aAAa,GAAG,CAAA,EAAG,IAAI,CAAC,gBAAgB,8BAA8B;QAC3E,IAAI,CAAC,qBAAqB,GAAG,CAAA,EAAG,IAAI,CAAC,gBAAgB,6BAA6B;QAClF,IAAI,CAAC,gBAAgB,GAAG,CAAA,EAAG,IAAI,CAAC,gBAAgB,6BAA6B;QAC7E,IAAI,CAAC,gBAAgB,GAAG,CAAA,EAAG,IAAI,CAAC,gBAAgB,sCAAsC;QACtF,IAAI,CAAC,gBAAgB,GAAG,CAAA,EAAG,IAAI,CAAC,gBAAgB,sCAAsC;AACtF,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;AAC3B,QAAA,IAAI,CAAC,yBAAyB,GAAG,EAAE;AACnC,QAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE;AAC9B,QAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE;AAC9B,QAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE;AAC9B,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;AAC3B,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS;AAC9B,QAAA,IAAI,CAAC,yBAAyB,GAAG,EAAE;AACnC,QAAA,IAAI,CAAC,wBAAwB,GAAG,EAAE;AAClC,QAAA,IAAI,CAAC,yBAAyB,GAAG,EAAE;AACnC,QAAA,IAAI,CAAC,wBAAwB,GAAG,EAAE;QAClC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC;QACxD,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC,IAAI,CAAC,0BAA0B,CAAC;QACxE,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC,IAAI,CAAC,qBAAqB,CAAC;QAC9D,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC,IAAI,CAAC,qBAAqB,CAAC;QAC9D,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC,IAAI,CAAC,qBAAqB,CAAC;AAC9D,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,wBAAwB,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC9F,YAAA,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,IAAI;AAC1C,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,mBAAmB,CAAC,yBAAyB,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAChG,YAAA,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,IAAI;AAC3C,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,mBAAmB,EAAE,oBAAoB,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AAC3E,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;YACvB,IAAI,CAAC,gBAAgB,EAAE;AACzB,QAAA,CAAC,CAAC;IACJ;IAGA,kBAAkB,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YACtB;QACF;AACA,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QACxB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ;QACvC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;AACpC,YAAA,IAAI,GAAG,KAAK,IAAI,EAAE;AAChB,gBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,EAAE;AAClD,gBAAA,MAAM,eAAe,GAAG,IAAI,CAAC,qBAAqB,EAAE;AACpD,gBAAA,OAAO,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AAC1D,oBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;oBAC9B,IAAI,CAAC,WAAW,EAAE;oBAClB,IAAI,CAAC,gBAAgB,EAAE;AACzB,gBAAA,CAAC,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC;QACxD,IAAI,CAAC,0BAA0B,GAAG,SAAS,CAAC,IAAI,CAAC,sBAAsB,CAAC;QACxE,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC;QAC9D,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC;QAC9D,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC;AAC9D,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;IAC1B;IAEA,oBAAoB,GAAA;QAClB,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AAC/F,YAAA,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI;AACrC,YAAA,iBAAiB,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;gBACnC,IAAI,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,0BAA0B,CAAC,YAAY,EAAE;AACvE,oBAAA,IAAI,CAAC,sBAAsB,GAAG,MAAM;AACpC,oBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAChE,oBAAA,IAAI,CAAC,aAAa,GAAG,SAAS,EAAE,IAAI;gBACtC;qBAAO,IAAI,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE;AACzE,oBAAA,IAAI,CAAC,iBAAiB,GAAG,MAAM;gBACjC;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEA,qBAAqB,GAAA;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AACxG,YAAA,MAAM,yBAAyB,GAAG,MAAM,CAAC,IAAI;AAC7C,YAAA,yBAAyB,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AAC3C,gBAAA,IAAI,CAAC,iCAAiC,CAAC,MAAM,CAAC;gBAC9C,IAAI,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,MAAM,EAAE;AACxC,oBAAA,IAAI,CAAC,iBAAiB,GAAG,MAAM;oBAC/B,MAAM,cAAc,GAAG,EAAE;oBACzB,MAAM,eAAe,GAAG,EAAE;oBAC1B,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;wBACpC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;4BAC1B,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBACpC;6BAAO,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;4BACjC,MAAM,IAAI,GAAG,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC;4BAClD,IAAI,IAAI,EAAE;AACR,gCAAA,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;4BAC5B;wBACF;AACF,oBAAA,CAAC,CAAC;AACF,oBAAA,IAAI,CAAC,wBAAwB,GAAG,cAAc;AAC9C,oBAAA,IAAI,CAAC,yBAAyB,GAAG,eAAe;gBAClD;qBAAO,IAAI,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,MAAM,EAAE;oBAC/C,MAAM,cAAc,GAAG,EAAE;oBACzB,MAAM,eAAe,GAAG,EAAE;oBAC1B,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;wBACpC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;4BAC1B,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBACpC;6BAAO,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;4BACjC,MAAM,IAAI,GAAG,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC;4BAClD,IAAI,IAAI,EAAE;AACR,gCAAA,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;4BAC5B;wBACF;AACF,oBAAA,CAAC,CAAC;AACF,oBAAA,IAAI,CAAC,wBAAwB,GAAG,cAAc;AAC9C,oBAAA,IAAI,CAAC,yBAAyB,GAAG,eAAe;AAChD,oBAAA,IAAI,CAAC,iBAAiB,GAAG,MAAM;gBACjC;AACF,YAAA,CAAC,CAAC;YACF,IAAI,CAAC,2CAA2C,EAAE;AACpD,QAAA,CAAC,CAAC;IACJ;AAEA;;;AAGG;AACK,IAAA,iCAAiC,CAAC,MAAW,EAAA;AACnD,QAAA,MAAM,QAAQ,GAAG,MAAM,EAAE,oBAAoB;QAC7C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAC5B;QACF;AACA,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAU,KAAI;AAC9B,YAAA,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI;AACxB,YAAA,MAAM,EAAE,GAAG,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS;YACzF,IAAI,CAAC,EAAE,EAAE;gBACP;YACF;AACA,YAAA,IAAI,WAAW,GAAG,KAAK,EAAE,IAAI;YAC7B,IAAI,CAAC,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;gBACnD;YACF;YACA,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AACjC,gBAAA,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YACpC;YACA,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,EAAE;AACjC,gBAAA,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,GAAG,WAAW;YAC5C;YACA,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE;AAC1C,gBAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,GAAG,EAAE;YAC5C;AACF,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,0BAA0B,CAAC,IAAY,EAAA;QAC7C,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACzC,IAAI,IAAI,EAAE;AACR,YAAA,OAAO,IAAI;QACb;AACA,QAAA,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE;AACjC,QAAA,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE;AACjC,QAAA,OAAO,EAAE;IACX;IAEQ,2CAA2C,GAAA;AACjD,QAAA,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,yBAAyB,EAAE,GAAG,IAAI,CAAC,yBAAyB,CAAC,CAAC,MAAM,CAC5F,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAC7B;AACD,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YACzB;QACF;AACA,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,uBAAuB,IAAI,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpG,QAAA,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACtG;AAEA,IAAA,0BAA0B,CAAC,MAAO,EAAA;AAChC,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,QAAQ,EAAE,MAAM;YAChB,MAAM,EAAE,MAAM,IAAI,EAAE;AACpB,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE;SACR;QACD,MAAM,OAAO,GAAG,EAAE;AAClB,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACpB,OAAO,CAAC,IAAI,CAAC;AACX,gBAAA,UAAU,EAAE,MAAM;AAClB,gBAAA,QAAQ,EAAE,MAAM;gBAChB,KAAK,EAAE,MAAM,IAAI,GAAG;AACpB,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,IAAI,EAAE,WAAW;AAClB,aAAA,CAAC;QACJ;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;YAClE,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAI;gBACnD,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,EAAE;gBACrD,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI;gBACrD,OAAO,QAAQ,CAAC,IAAI;AACtB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,uBAAuB,GAAG,eAAe;YAC9C,IAAI,CAAC,2CAA2C,EAAE;AACpD,QAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AAC9B,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;YAChC;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,gBAAgB,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,cAAc,EAAE;AAC3F,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QACxB;IACF;AAEA,IAAA,oBAAoB,CAAC,MAAM,EAAA;AACzB,QAAA,QAAO,MAAM,CAAC,EAAE;AACd,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,IAAI,EAAE;gBACX;AACF,YAAA,KAAK,qBAAqB;gBACxB,IAAI,CAAC,iBAAiB,EAAE;gBACxB;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,YAAY,EAAE;gBACnB;;IAEN;AAEA,IAAA,qBAAqB,CAAC,MAAM,EAAA;AAC1B,QAAA,QAAO,MAAM,CAAC,IAAI;AAChB,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,IAAI,EAAE;gBACX;AACF,YAAA,KAAK,OAAO;AACV,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE;oBACf,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;gBAChD;qBAAO;oBACL,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,mBAAmB,CAAC;gBACtD;gBACA;AACF,YAAA,KAAK,aAAa;AAChB,gBAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI;gBAC3B;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,YAAY,EAAE;gBACnB;;IAEN;IAEA,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,WAAW;IACtC;IAEA,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,WAAW;IACtC;AAEA,IAAA,kBAAkB,CAAC,KAAK,EAAA;AACtB,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,GAAG,CAAA,EAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAA,iBAAA,CAAmB;AACjF,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAA,EAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAA,YAAA,CAAc;AACvE,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAA,EAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAA,YAAA,CAAc;AACvE,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAA,EAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAA,YAAA,CAAc;IACzE;AAEA,IAAA,oBAAoB,CAAC,MAAM,EAAA;AACzB,QAAA,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAInH,OAAK,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;YAC1D,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE;YAChD;QACF;QACA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG;YAC/C,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,GAAG,EAAE,IAAI,CAAC;SACX;IACH;AAEA,IAAA,oBAAoB,CAAC,MAAM,EAAA;AACzB,QAAA,QAAQ,IAAI,CAAC,YAAY;AACvB,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;gBAC7D;AACF,YAAA;AACE,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;gBAClE;;IAEN;IAEA,MAAM,IAAI,CAAC,OAAQ,EAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE;YAChC;QACF;AACA,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE;AAC1D,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YACpB;QACF;QACA,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;QACrD,IAAI,YAAY,EAAE;AAChB,YAAA,MAAM,YAAY,GAAQ,MAAM,IAAI,CAAC,kBAAkB,EAAE;YACzD,IAAI,YAAY,EAAE;gBAChB;YACF;QACF;AAEA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AACtC,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,EAAE;AAEhC,QAAA,IAAI;AAAE,YAAA,MAAM,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC;QAAE;QACnD,OAAO,CAAC,EAAE;YAAE,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,SAAS,EAAE,WAAW,CAAC;QAAE;AAEvE,QAAA,IAAI;AAAE,YAAA,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;QAAE;QAC9C,OAAO,CAAC,EAAE;YAAE,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC;QAAE;AAElE,QAAA,IAAI;AAAE,YAAA,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;QAAE;QAC3C,OAAO,CAAC,EAAE;AAAE,YAAA,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,UAAU,CAAC;QAAE;AAE3D,QAAA,IAAI;YAAE,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC;QAAE;QAClD,OAAO,CAAC,EAAE;YAAE,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,kBAAkB,EAAE,MAAM,CAAC;QAAE;AAE3E,QAAA,IAAI;YAAE,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC;QAAE;QAClD,OAAO,CAAC,EAAE;YAAE,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,kBAAkB,EAAE,MAAM,CAAC;QAAE;AAE3E,QAAA,WAAW,EAAE,OAAO,CAAC,CAAC,UAAU,KAAI;YAClC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,MAAM,KAAI;AACtC,gBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;AAC9B,oBAAA,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB;AAC1C,oBAAA,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,qBAAqB,EAAE;gBAClD;AAAO,qBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,WAAW,EAAE;AACtE,oBAAA,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,yBAAyB;AAClD,oBAAA,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,4BAA4B,EAAE;gBACzD;AAAO,qBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE;AACjE,oBAAA,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,oBAAoB;AAC7C,oBAAA,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,uBAAuB,EAAE;gBACpD;AAAO,qBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,kBAAkB,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE;AAC1E,oBAAA,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,oBAAoB;AAC7C,oBAAA,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE;gBAC9C;AAAO,qBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,kBAAkB,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE;AAC1E,oBAAA,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,oBAAoB;AAC7C,oBAAA,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE;gBAC9C;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,eAAe,CAAC,WAAgB,EAAE,IAAY,EAAE,OAAgB,EAAA;AAC9D,QAAA,WAAW,EAAE,OAAO,CAAC,CAAC,KAAU,KAAI;YAClC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,MAAW,KAAI;gBACtC,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,CAAC,EAAE;AACnG,oBAAA,MAAM,CAAC,MAAM,GAAG,OAAO;gBACzB;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;AACT,QAAA,MAAM,gBAAgB,GAAG;AACvB,YAAA,IAAI,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI;AACtC,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,OAAO,EAAE,WAAW;YACpB,OAAO,EAAE,IAAI,CAAC,sBAAsB;YACpC,UAAU,EAAE,IAAI,CAAC,yBAAyB;AAC1C,YAAA,UAAU,EAAE,EAAE;YACd,MAAM,EAAE,IAAI,CAAC,qBAAqB;AAClC,YAAA,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;SAC3C;AACD,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI;AACjC,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,OAAO,EAAE,MAAM;YACf,OAAO,EAAE,IAAI,CAAC,iBAAiB;YAC/B,UAAU,EAAE,IAAI,CAAC,oBAAoB;AACrC,YAAA,UAAU,EAAE,EAAE;YACd,MAAM,EAAE,IAAI,CAAC,gBAAgB;AAC7B,YAAA,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI;SACrC;AACD,QAAA,MAAM,WAAW,GAAQ;AACvB,YAAA;AACE,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI;AAC9B,wBAAA,IAAI,EAAE,UAAU;wBAChB,OAAO,EAAE,IAAI,CAAC,cAAc;wBAC5B,UAAU,EAAE,IAAI,CAAC,iBAAiB;AAClC,wBAAA,UAAU,EAAE,EAAE;wBACd,MAAM,EAAE,IAAI,CAAC,aAAa;AAC1B,wBAAA,MAAM,EAAE,SAAS;wBACjB,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI;AAClC;AACF;AACF,aAAA;AACD,YAAA;AACE,gBAAA,KAAK,EAAE,kBAAkB;AACzB,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI;AACjC,wBAAA,IAAI,EAAE,kBAAkB;AACxB,wBAAA,OAAO,EAAE,MAAM;wBACf,OAAO,EAAE,IAAI,CAAC,iBAAiB;wBAC/B,UAAU,EAAE,IAAI,CAAC,oBAAoB;AACrC,wBAAA,UAAU,EAAE,EAAE;wBACd,MAAM,EAAE,IAAI,CAAC,gBAAgB;AAC7B,wBAAA,MAAM,EAAE,SAAS;AACjB,wBAAA,KAAK,EAAE,CAAC,WAAW,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA,CAAC;AAChE,qBAAA;AACD,oBAAA;AACE,wBAAA,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI;AACjC,wBAAA,IAAI,EAAE,kBAAkB;AACxB,wBAAA,OAAO,EAAE,MAAM;wBACf,OAAO,EAAE,IAAI,CAAC,iBAAiB;wBAC/B,UAAU,EAAE,IAAI,CAAC,oBAAoB;AACrC,wBAAA,UAAU,EAAE,EAAE;wBACd,MAAM,EAAE,IAAI,CAAC,gBAAgB;AAC7B,wBAAA,MAAM,EAAE,SAAS;AACjB,wBAAA,KAAK,EAAE,CAAC,WAAW,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA,CAAC;AAChE;AACF;AACF;SACF;QACD,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAC1C,YAAA,WAAW,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC,EAAC;AACrB,gBAAA,KAAK,EAAE,gBAAgB;AACvB,gBAAA,QAAQ,EAAE,CAAC,gBAAgB,EAAE,WAAW;AACzC,aAAA,CAAC;QACJ;AAAO,aAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAC5B,YAAA,WAAW,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC,EAAC;AACrB,gBAAA,KAAK,EAAE,gBAAgB;gBACvB,QAAQ,EAAE,CAAC,gBAAgB;AAC5B,aAAA,CAAC;QACJ;AAAO,aAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAC5B,YAAA,WAAW,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC,EAAC;AACrB,gBAAA,KAAK,EAAE,gBAAgB;gBACvB,QAAQ,EAAE,CAAC,WAAW;AACvB,aAAA,CAAC;QACJ;AACA,QAAA,MAAM,IAAI,GAAG;AACX,YAAA,WAAW,EAAE,WAAW;YACxB,MAAM,EAAE,IAAI,CAAC;SACd;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,8BAA8B,EAAE;AACpE,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,SAAS,EAAE,KAAK;AACjB,SAAA,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AAChD,YAAA,IAAI,MAAM,KAAK,KAAK,EAAE;gBACpB,IAAI,CAAC,YAAY,EAAE;YACrB;AAAO,iBAAA,IAAI,MAAM,KAAK,QAAQ,EAAE;;YAEhC;iBAAO;gBACL,IAAI,CAAC,cAAc,EAAE;AACrB,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK;gBACxB,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA,EAAG,IAAI,CAAC,QAAQ,CAAA,CAAE,CAAC;YAChD;AACF,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,WAAW;IACpB;AAEA,IAAA,MAAM,kBAAkB,GAAA;AACtB,QAAA,MAAM,MAAM,GAAc;AACxB,YAAA,UAAU,EAAE,MAAM;AAClB,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI;AAC/B,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,IAAI,EAAE,WAAW;AACjB,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,IAAI,EAAE;SACP;AAED,QAAA,MAAM,OAAO,GAAQ;AACnB,YAAA,eAAe,EAAE,KAAK;AACtB,YAAA,iBAAiB,EAAE,KAAK;AACxB,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,kBAAkB,EAAE,KAAK;AACzB,YAAA,kBAAkB,EAAE,KAAK;AACzB,YAAA,KAAK,EAAE;SACR;QACD,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;AACzD,QAAA,MAAM,CAAC,QAAQ,GAAG,KAAK;QACvB,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;YACrF,IAAI,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE;AAC3B,gBAAA,OAAO,CAAC,eAAe,GAAG,IAAI;gBAC9B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YAC9C;AACF,QAAA,CAAC,CAAC;QACF,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI;QAC/C,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;YACtF,IAAI,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE;AAC3B,gBAAA,OAAO,CAAC,iBAAiB,GAAG,IAAI;gBAChC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;YACtD;AACF,QAAA,CAAC,CAAC;QACF,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;YACjF,IAAI,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE;AAC3B,gBAAA,OAAO,CAAC,YAAY,GAAG,IAAI;gBAC3B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;YACjD;AACF,QAAA,CAAC,CAAC;QACF,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,kBAAkB,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;YAC1F,IAAI,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE;AAC3B,gBAAA,OAAO,CAAC,kBAAkB,GAAG,IAAI;gBACjC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;YACjD;AACF,QAAA,CAAC,CAAC;QACF,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,kBAAkB,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;YAC1F,IAAI,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE;AAC3B,gBAAA,OAAO,CAAC,kBAAkB,GAAG,IAAI;gBACjC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;YACjD;AACF,QAAA,CAAC,CAAC;QAEF,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAK;YACvF,IAAI,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;YAC1C,IAAI,WAAW,EAAE;AACf,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI;AACvB,gBAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;YACnC;AACA,YAAA,OAAO,WAAW;AACpB,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,mBAAmB,CAAC,YAAY,EAAA;AAE9B,QAAA,MAAM,IAAI,GAAG;AACX,YAAA,QAAQ,EAAE,wBAAwB;AAClC,YAAA,KAAK,EAAE,eAAe;AACtB,YAAA,OAAO,EAAE,CAAA,kEAAA,CAAoE;YAC7E,UAAU,EAAE,YAAY,CAAC,KAAK;AAC9B,YAAA,UAAU,EAAE,CAAA,6CAAA,CAA+C;AAC3D,YAAA,YAAY,EAAE,QAAQ;AACtB,YAAA,cAAc,EAAE,KAAK;AACrB,YAAA,QAAQ,EAAE;SACX;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACtD,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,SAAS,EAAE,KAAK;AACjB,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAK;AAC9B,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,KAAK,EAAE;AAC3C,QAAA,CAAC,CAAC;IACJ;IAEA,MAAM,mBAAmB,CAAC,WAAW,EAAA;QACnC,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,CAAC;;AAG5D,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,EAAE;AACpC,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC;QAC3E;AAAO,aAAA,IAAI,IAAI,CAAC,WAAW,IAAI,WAAW,EAAE;YAC1C;QACF;;AAGA,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,UAAU,CACpC,IAAI,CAAC,sBAAsB,EAC3B,oBAAoB,EACpB,mBAAmB,EACnB,2BAA2B,CAC9B;;AAGD,QAAA,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM;IAC5C;IAEA,MAAM,cAAc,CAAC,WAAW,EAAA;QAC9B,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;AAEvD,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,EAAE;AACpC,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACtE;AAAO,aAAA,IAAI,IAAI,CAAC,WAAW,IAAI,WAAW,EAAE;YAC1C;QACF;;QAGA,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,IAAI,CAAC,UAAU,CACnD,IAAI,CAAC,iBAAiB,EACtB,eAAe,EACf,cAAc,EACd,sBAAsB,CACzB;;;AAID,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM;AAC1C,YAAA,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,aAAa;QACpD;aAAO;AACL,YAAA,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM;AAC1C,YAAA,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,aAAa;QACpD;IACF;AAEA,IAAA,MAAM,UAAU,CACZ,aAAkB;AAClB,IAAA,WAAmB;AACnB,IAAA,YAAoB;AACpB,IAAA,cAAsB;;QAGxB,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;QAC9C,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAW,CAAC;AACnD,QAAA,IAAI,MAAc;AAClB,QAAA,IAAI,YAAiB;QAErB,IAAI,WAAW,EAAE;YACf,IAAI,CAAC,WAAW,CAAC,GAAG,cAAc,GAAG,CAAC,CAAC;YAEvC,IAAI,OAAO,GAAG,EAAE;AAChB,YAAA,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;AACzB,gBAAA,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC;YACnC;YAEA,aAAa,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI,GAAG,OAAO;YAEjD,YAAY,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;QAC1F;aAAO;YACL,YAAY,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;QAC5F;AAEA,QAAA,IAAI,YAAY,CAAC,KAAK,EAAE;YACtB,MAAM,GAAG,OAAO;QAClB;aAAO;;AAEL,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,aAAa,CAAC,EAAE,IAAI,YAAY,CAAC,EAAE,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE;;AAGhF,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;;YAGpD,IAAI,CAAC,cAAc,CAAC,GAAG,4BAA4B,aAAa,CAAC,IAAI,CAAA,GAAA,EAAM,aAAa,CAAC,YAAY,CAAA,GAAA,EAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG;YAEhJ,MAAM,GAAG,MAAM;YACf,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB;AAEA,QAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE;IAChD;IAEA,MAAM,WAAW,CAAC,WAAW,EAAA;QAC3B,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;AAErD,QAAA,IAAI,aAAa;QACjB,IAAI,YAAY,EAAE;YAChB,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,OAAO,GAAG,EAAE;AAChB,YAAA,IAAI,IAAI,CAAC,gBAAgB,GAAG,CAAC,EAAE;AAC7B,gBAAA,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,gBAAgB;YACvC;AACA,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,OAAO;YAC7D,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,mBAAmB,EAAE,QAAQ,CAAC;AACvD,YAAA,aAAa,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAI;AACtF,gBAAA,OAAO,MAAM;AACf,YAAA,CAAC,CAAC;QACJ;aAAO;AACL,YAAA,aAAa,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAI;AACxF,gBAAA,OAAO,MAAM;AACf,YAAA,CAAC,CAAC;QACJ;AAEA,QAAA,IAAI,aAAa;AACjB,QAAA,IAAI,aAAa,CAAC,KAAK,EAAE;YACvB,aAAa,GAAG,OAAO;QACzB;aAAO;AACL,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,GAAG,aAAa,CAAC,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YAChI,aAAa,GAAG,MAAM;YACtB,IAAI,YAAY,GAAG,EAAE;YACrB,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;gBAC1C,YAAY,GAAG,CAAA,WAAA,EAAc,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,YAAY,CAAA,CAAA,CAAG;YAC7E;iBAAO,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,EAAE;AAChD,gBAAA,YAAY,GAAG,CAAA,WAAA,EAAc,IAAI,CAAC,iBAAiB,GAAG;YACxD;iBAAO,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAChD,gBAAA,YAAY,GAAG,CAAA,WAAA,EAAc,IAAI,CAAC,YAAY,GAAG;YACnD;AACA,YAAA,IAAI,CAAC,iBAAiB,GAAG,CAAA,0BAAA,EAA6B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAA,EAAA,EAAK,YAAY,CAAA,CAAE;AACjG,YAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC5B;AACA,QAAA,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,GAAG,CAAC;AACnE,QAAA,WAAW,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,aAAa;IAC9D;AAEA,IAAA,MAAM,UAAU,CAAC,WAAW,EAAE,IAAI,GAAG,MAAM,EAAA;QACzC,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;AAEpD,QAAA,IAAI,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe;QAChE,IAAI,QAAQ,GAAG,EAAE;QACjB,IAAI,MAAM,GAAG,EAAE;QACf,IAAI,WAAW,EAAE;AACf,YAAA,IAAI,IAAI,KAAK,MAAM,EAAE;gBACnB,IAAI,CAAC,aAAa,EAAE;gBACpB,IAAI,OAAO,GAAG,EAAE;AAChB,gBAAA,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE;AAC1B,oBAAA,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,aAAa;gBACpC;AACA,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,OAAO;AACnE,gBAAA,aAAa,GAAG,IAAI,CAAC,iBAAiB;AACtC,gBAAA,cAAc,GAAG,IAAI,CAAC,wBAAwB;AAC9C,gBAAA,eAAe,GAAG,IAAI,CAAC,yBAAyB;YAClD;iBAAO;gBACL,IAAI,CAAC,aAAa,EAAE;gBACpB,IAAI,OAAO,GAAG,EAAE;AAChB,gBAAA,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE;AAC1B,oBAAA,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,aAAa;gBACpC;AACA,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,OAAO;AACnE,gBAAA,aAAa,GAAG,IAAI,CAAC,iBAAiB;AACtC,gBAAA,cAAc,GAAG,IAAI,CAAC,wBAAwB;AAC9C,gBAAA,eAAe,GAAG,IAAI,CAAC,yBAAyB;YAClD;YACA,aAAa,CAAC,YAAY,GAAG,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,SAAS,CAAA,CAAE,CAAC;YACnD,aAAa,CAAC,aAAa,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;gBACzD,QAAQ,IAAI,GAAG,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,GAAG;gBACtD,OAAO,GAAG,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;AAC7C,YAAA,CAAC,CAAC;AACF,YAAA,aAAa,CAAC,aAAa,GAAG,CAAC,GAAG,aAAa,CAAC,aAAa,EAAE,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AAC5F,oBAAA,QAAQ,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG;oBAC5B,OAAO,GAAG,GAAG,IAAI;gBACnB,CAAC,CAAC,CAAC;YACH,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAChC,YAAA,YAAY,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAI;AACvF,gBAAA,OAAO,MAAM;AACf,YAAA,CAAC,CAAC;QACJ;aAAO;AACL,YAAA,IAAI,IAAI,KAAK,MAAM,EAAE;AACnB,gBAAA,aAAa,GAAG,IAAI,CAAC,iBAAiB;AACtC,gBAAA,cAAc,GAAG,IAAI,CAAC,wBAAwB;AAC9C,gBAAA,eAAe,GAAG,IAAI,CAAC,yBAAyB;YAClD;iBAAO;AACL,gBAAA,aAAa,GAAG,IAAI,CAAC,iBAAiB;AACtC,gBAAA,cAAc,GAAG,IAAI,CAAC,wBAAwB;AAC9C,gBAAA,eAAe,GAAG,IAAI,CAAC,yBAAyB;YAClD;YACA,aAAa,CAAC,YAAY,GAAG,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,SAAS,CAAA,CAAE,CAAC;YACnD,aAAa,CAAC,aAAa,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;gBACzD,QAAQ,IAAI,GAAG,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,GAAG;gBACtD,OAAO,GAAG,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;AAC7C,YAAA,CAAC,CAAC;AACF,YAAA,aAAa,CAAC,aAAa,GAAG,CAAC,GAAG,aAAa,CAAC,aAAa,EAAE,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AAC5F,oBAAA,QAAQ,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG;oBAC5B,OAAO,GAAG,GAAG,IAAI;gBACnB,CAAC,CAAC,CAAC;YACH,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAChC,YAAA,YAAY,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAI;AACzF,gBAAA,OAAO,MAAM;AACf,YAAA,CAAC,CAAC;QACJ;AAEA,QAAA,IAAI,YAAY,CAAC,KAAK,EAAE;YACtB,MAAM,GAAG,OAAO;QAClB;aAAO;YACL,MAAM,GAAG,MAAM;QACjB;AACA,QAAA,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,GAAG,CAAC;AACnE,QAAA,MAAM,WAAW,GAAG,IAAI,KAAK,MAAM,GAAG,CAAC,GAAG,CAAC;AAC3C,QAAA,WAAW,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,MAAM;AAC/D,QAAA,MAAM,UAAU,GAAG,CAAA,iCAAA,EAAoC,aAAa,CAAC,IAAI,CAAA,EAAA,EAAK,IAAI,CAAA,oCAAA,EAAuC,IAAI,CAAC,SAAS,CAAA,oBAAA,EAAuB,QAAQ,GAAG;AACzK,QAAA,IAAI,IAAI,KAAK,MAAM,EAAE;AACnB,YAAA,IAAI,CAAC,oBAAoB,GAAG,UAAU;AACtC,YAAA,IAAI,MAAM,KAAK,MAAM,EAAE;AACrB,gBAAA,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;YACzB;iBAAO;AACL,gBAAA,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;YACzB;QACF;aAAO;AACL,YAAA,IAAI,CAAC,oBAAoB,GAAG,UAAU;QACxC;IACF;IAEA,UAAU,CAAC,IAAI,EAAE,IAAI,EAAA;AACnB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IAChD;IAEA,YAAY,CAAC,IAAI,EAAE,IAAI,EAAA;AACrB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;IAC1D;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;QAChB,IAAI,CAAC,mBAAmB,EAAE;QAC1B,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,qBAAqB,EAAE;QAC5B,IAAI,CAAC,mBAAmB,EAAE;QAC1B,IAAI,CAAC,gBAAgB,EAAE;QACvB,IAAI,CAAC,sBAAsB,EAAE;QAC7B,IAAI,CAAC,sBAAsB,EAAE;AAC7B,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IAC7B;IAEA,mBAAmB,GAAA;QACjB,IAAI,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;AACrC,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI;QACzB;aAAO;AACL,YAAA,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;QAC5B;IACF;IAEA,wBAAwB,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,kBAAkB,CAAC;AACtC,YAAA,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,wBAAwB,CAAC;YAC5C;QACF;QACA,IAAI,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;AACjH,YAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,GAAG,IAAI;QACrC;AAAO,aAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;AACtG,YAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,GAAG,IAAI;AACnC,YAAA,IAAI,CAAC,MAAM,CAAC,sBAAsB,GAAG,IAAI;QAC3C;aAAO;AACL,YAAA,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,kBAAkB,CAAC;AACtC,YAAA,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,wBAAwB,CAAC;QAC9C;IACF;IAEA,qBAAqB,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC;YACnC;QACF;QACA,IAAI,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACxD,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,IAAI;QAClC;AAAO,aAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACjG,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,IAAI;QAClC;aAAO;AACL,YAAA,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC;QACrC;IACF;IAEA,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACrE,YAAA,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI;QAChC;aAAO;AACL,YAAA,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC;QACnC;IACF;IAEA,gBAAgB,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC;YAC9B;QACF;QACA,IAAI,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAIA,OAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACtF,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI;QAC7B;AAAO,aAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAChF,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI;QAC7B;aAAO;AACL,YAAA,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC;QAChC;IACF;IAEA,sBAAsB,GAAA;AACpB,QAAA,IAAI,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,yBAAyB,EAAE,GAAG,IAAI,CAAC,wBAAwB,CAAC,CAAC,EAAE;AAClF,YAAA,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI;QACnC;aAAO;AACL,YAAA,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC;QACtC;IACF;IAEA,sBAAsB,GAAA;AACpB,QAAA,IAAI,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,yBAAyB,EAAE,GAAG,IAAI,CAAC,wBAAwB,CAAC,CAAC,EAAE;AAClF,YAAA,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI;QACnC;aAAO;AACL,YAAA,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC;QACtC;IACF;IAEA,qBAAqB,GAAA;QACnB,OAAO,CAAA,MAAA,EAAS,IAAI,CAAC,gBAAgB,CAAA;;;AAGjB,sBAAA,EAAA,IAAI,CAAC,aAAa,CAAA;oBACtB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM;IAC3D;IAEA,4BAA4B,GAAA;QAC1B,OAAO,CAAA,MAAA,EAAS,IAAI,CAAC,gBAAgB,CAAA;;;AAGjB,sBAAA,EAAA,IAAI,CAAC,aAAa,CAAA;oBACtB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM;IACnE;IAEA,uBAAuB,GAAA;QACrB,OAAO,CAAA,MAAA,EAAS,IAAI,CAAC,gBAAgB,CAAA;;;AAGjB,sBAAA,EAAA,IAAI,CAAC,aAAa,CAAA;oBACtB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM;IAC9D;IAEA,iBAAiB,GAAA;QACf,OAAO,CAAA,MAAA,EAAS,IAAI,CAAC,gBAAgB,CAAA;;;AAGjB,sBAAA,EAAA,IAAI,CAAC,aAAa,CAAA;oBACtB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM;IAC9D;IAEA,iBAAiB,GAAA;QACf,OAAO,CAAA,MAAA,EAAS,IAAI,CAAC,gBAAgB,CAAA;;;AAGjB,sBAAA,EAAA,IAAI,CAAC,aAAa,CAAA;oBACtB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM;IAC9D;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,kBAAkB;QAC7C,IAAI,CAAC,sBAAsB,CAAC,IAAI,GAAG,IAAI,CAAC,0BAA0B,CAAC,IAAI;QACvE,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI;AAC7D,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,qBAAqB;AACnD,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,qBAAqB;IACrD;IAEA,iBAAiB,GAAA;AACf,QAAA,MAAM,IAAI,GAAG;AACX,YAAA,QAAQ,EAAE,sBAAsB;AAChC,YAAA,KAAK,EAAE,iBAAiB;AACxB,YAAA,OAAO,EAAE,CAAA,gHAAA,CAAkH;AAC3H,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,WAAW,EAAE,6BAA6B;AAC1C,YAAA,QAAQ,EAAE,+BAA+B;AACzC,YAAA,cAAc,EAAE;SACjB;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACtD,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,SAAS,EAAE,KAAK;AACjB,SAAA,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AAChD,YAAA,IAAI,MAAM,EAAE,SAAS,EAAE;gBACrB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,UAAU;gBACrD,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc;qBAC9C,IAAI,CAAC,MAAK;AACT,oBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,iBAAiB,EACjB,CAAA,uBAAA,EAA0B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAA,wBAAA,CAA0B,CAC/E;AACD,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;oBACrC,IAAI,CAAC,WAAW,EAAE;AAClB,oBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,qBAAqB,GAAG,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;AACnF,gBAAA,CAAC;AACA,qBAAA,KAAK,CAAC,CAAC,MAAM,KAAI;AAChB,oBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,0BAA0B,EAC1B,CAAA,kBAAA,EAAqB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAA,wBAAA,CAA0B,CAC1E;AACD,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACvC,gBAAA,CAAC,CAAC;YACN;AACF,QAAA,CAAC,CAAC;IAEJ;IAEmB,wBAAwB,GAAA;QACzC,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,KAAI;AACjD,YAAA,OAAO,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC;AAC9C,QAAA,CAAC,CAAC;IACJ;IAEmB,oBAAoB,GAAA;;AAErC,QAAA,IAAI,IAAI,CAAC,wBAAwB,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,wBAAwB,CAAC,CAAC,KAAK,EAAE;QACxC;QAEA,IAAI,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW,KAAI;AAC9C,YAAA,MAAM,IAAI,GAAG;AACX,gBAAA,QAAQ,EAAE,yBAAyB;AACnC,gBAAA,KAAK,EAAE,mBAAmB;AAC1B,gBAAA,QAAQ,EAAE,sEAAsE;gBAChF,aAAa,EAAE,CAAC,WAAW,CAAC;AAC5B,gBAAA,eAAe,EAAE;aAClB;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,0BAA0B,EAAE;AACjE,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,SAAS,EAAE,KAAK;AACjB,aAAA,CAAC;YAEF,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AAC3C,gBAAA,IAAI,MAAM,EAAE,SAAS,EAAE;AACrB,oBAAA,IAAI,CAAC,SAAS,GAAG,IAAI;oBACrB,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAK;AAClD,wBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAClC,SAAS,EACT,SAAS,EACT,iBAAiB,EACjB,CAAA,8BAAA,EAAiC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAA,2BAAA,CAA6B,CACvF;AACD,wBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;wBACrC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;AAChD,oBAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAI;wBACjB,MAAM,WAAW,GAAG,IAAI,YAAY,CAClC,OAAO,EACP,OAAO,EACP,CAAA,aAAA,CAAe,EACf,CAAA,0BAAA,EAA6B,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,OAAO,IAAI,eAAe,CAAA,CAAE,CACjG;AACD,wBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACvC,oBAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACd,wBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACxB,oBAAA,CAAC,CAAC;gBACJ;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEQ,mBAAmB,GAAA;AACzB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE;AAC1B,YAAA,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI;AAC9B,YAAA,iBAAiB,EAAE,EAAE;AACrB,YAAA,yBAAyB,EAAE;SAC5B;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAChH,YAAA,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI;YAC3B,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;gBAC5C,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACnF,oBAAA,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI;oBACtC,MAAM,QAAQ,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;oBACrF,IAAI,QAAQ,EAAE;AACZ,wBAAA,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAC,CAAC;oBACxE;AACF,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AACpC,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAEjC,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC1H,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI;YAC5B,MAAM,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;AAC1C,gBAAA,MAAM,cAAc,GAAG,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACjH,gBAAA,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;;;AAG/B,oBAAA,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC7G,oBAAA,MAAM,yBAAyB,GAAG,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,cAAc,CAAC,EAAE;oBACrG,IAAI,yBAAyB,EAAE;AAC7B,wBAAA,WAAW,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAC,CAAC;oBAC1E;AACA,oBAAA,OAAO,OAAO,CAAC,OAAO,EAAE;gBAC1B;AACA,gBAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AAC/E,oBAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE;oBAClC,MAAM,QAAQ,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;oBAC3E,IAAI,QAAQ,EAAE;AACZ,wBAAA,WAAW,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAC,CAAC;oBAC1E;AACF,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AACpC,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;AAEjC,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC;IAC/E;AAEQ,IAAA,uBAAuB,CAAC,WAAW,EAAA;QACzC,MAAM,QAAQ,GAAG,EAAE;AACnB,QAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;QAElE,WAAW,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AAC/C,YAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;AAC9D,QAAA,CAAC,CAAC;QAEF,WAAW,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AACvD,YAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;AACvE,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC9B;IAES,eAAe,GAAA;AACtB,QAAA,MAAM,iBAAiB,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,cAAc,CAAC;AAChF,QAAA,MAAM,mBAAmB,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;AAC5G,QAAA,MAAM,cAAc,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AAC7F,QAAA,MAAM,cAAc,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,iBAAiB,CAAC;AACnF,QAAA,MAAM,cAAc,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,iBAAiB,CAAC;AACnF,QAAA,MAAM,UAAU,GAAG,iBAAiB,KAAK,IAAI,CAAC,iBAAiB,IAAI,mBAAmB,KAAK,IAAI,CAAC,mBAAmB,IAAI,cAAc,KAAK,IAAI,CAAC,cAAc;YACzJ,cAAc,KAAK,IAAI,CAAC,cAAc,IAAI,cAAc,KAAK,IAAI,CAAC,cAAc;QACpF,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,iBAAiB,GAAG,iBAAiB;AAC1C,YAAA,IAAI,CAAC,mBAAmB,GAAG,mBAAmB;AAC9C,YAAA,IAAI,CAAC,cAAc,GAAG,cAAc;AACpC,YAAA,IAAI,CAAC,cAAc,GAAG,cAAc;AACpC,YAAA,IAAI,CAAC,cAAc,GAAG,cAAc;AACpC,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;QAClC;AACA,QAAA,IAAI,CAAC,WAAW,GAAG,iBAAiB,IAAI,mBAAmB,IAAI,cAAc,IAAI,cAAc,IAAI,cAAc;IACnH;IAEA,KAAK,GAAA;IACL;AArwCW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAoGrB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAA2G,kBAAA,EAAA,EAAA,EAAA,KAAA,EAEhB,iBAAiB,wCAEjB,yBAAyB,EAAA,EAAA,EAAA,KAAA,EAAA9F,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAuG,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAApF,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAyC,IAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAxG1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,iVC3BnC,wkYA4NA,EAAA,MAAA,EAAA,CAAA,qrJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAArB,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAlB,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAmF,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,aAAA,EAAA,UAAA,EAAA,cAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,aAAA,EAAA,OAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,oBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAxC,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAxC,oBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,cAAA,EAAA,eAAA,EAAA,YAAA,EAAA,WAAA,EAAA,cAAA,EAAA,aAAA,EAAA,+BAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,8BAAA,EAAA,+BAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDjMa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,cAGlB,KAAK,EAAA,QAAA,EAAA,wkYAAA,EAAA,MAAA,EAAA,CAAA,qrJAAA,CAAA,EAAA;;0BAsGd,MAAM;2BAAC,gBAAgB;;0BAEvB,MAAM;2BAAC,iBAAiB;;0BAExB,MAAM;2BAAC,yBAAyB;;sBAvGpC;;sBACA;;sBACA;;sBA6FA;;sBACA;;sBAoBA;;;MEhJU,gBAAgB,CAAA;AAA7B,IAAA,WAAA,GAAA;QACI,IAAA,CAAA,IAAI,GAAG,EAAE;QACT,IAAA,CAAA,eAAe,GAAU,EAAE;QAC3B,IAAA,CAAA,aAAa,GAAU,EAAE;QACzB,IAAA,CAAA,QAAQ,GAAG,OAAO;QAClB,IAAA,CAAA,IAAI,GAAQ,EAAE;IAClB;AAAC;AAAA;;ACND;;;;;;;;;;;;;;AAcE;AA2BI,MAAO,6BAA8B,SAAQ,oBAAoB,CAAA;AA2CnE,IAAA,WAAA,CAC8B,QAA8B,EACxD,aAAqC,EACF,WAA4B,EACtD,kBAAsC,EACvC,cAA8B,EAC9B,UAAqB,EACM,UAA4B,EAC5C,MAAc,EAAA;QAEjC,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,CAAC;QAPnC,IAAA,CAAA,WAAW,GAAX,WAAW;QACrC,IAAA,CAAA,kBAAkB,GAAlB,kBAAkB;QACnB,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,UAAU,GAAV,UAAU;QACiB,IAAA,CAAA,UAAU,GAAV,UAAU;QAC1B,IAAA,CAAA,MAAM,GAAN,MAAM;AAjDrB,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,cAAc;QAC7B,IAAA,CAAA,SAAS,GAAG,oBAAoB;QAEvC,IAAA,CAAA,WAAW,GAAG,EAAE;AAChB,QAAA,IAAA,CAAA,wBAAwB,GAAQ,IAAI,gBAAgB,EAAE;QAEtD,IAAA,CAAA,oBAAoB,GAAG,EAAE;QACzB,IAAA,CAAA,qBAAqB,GAAG,EAAE;QAC1B,IAAA,CAAA,wBAAwB,GAAG,EAAE;QAC7B,IAAA,CAAA,4BAA4B,GAAG,EAAE;QACjC,IAAA,CAAA,6BAA6B,GAAG,EAAE;QAElC,IAAA,CAAA,sBAAsB,GAAG,EAAE;QAC3B,IAAA,CAAA,uBAAuB,GAAG,EAAE;QAC5B,IAAA,CAAA,0BAA0B,GAAG,EAAE;QAC/B,IAAA,CAAA,8BAA8B,GAAG,EAAE;QACnC,IAAA,CAAA,+BAA+B,GAAG,EAAE;QAEpC,IAAA,CAAA,qBAAqB,GAAG,EAAE;QAC1B,IAAA,CAAA,sBAAsB,GAAG,EAAE;QAC3B,IAAA,CAAA,yBAAyB,GAAG,EAAE;QAC9B,IAAA,CAAA,6BAA6B,GAAG,EAAE;QAClC,IAAA,CAAA,8BAA8B,GAAG,EAAE;AAEnC,QAAA,IAAA,CAAA,aAAa,GAAQ;AACjB,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,EAAE,EAAE,EAAE;AACN,YAAA,SAAS,EAAE,EAAE;SAChB;AAEQ,QAAA,IAAA,CAAA,SAAS,GAAG;AACjB,YAAA,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAC;AAChC,YAAA,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAC;SACrC;AAEQ,QAAA,IAAA,CAAA,kBAAkB,GAAG;AAC1B,YAAA,EAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAC;AAC9C,YAAA,EAAC,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,mBAAmB,EAAC;SAC3D;QAED,IAAA,CAAA,YAAY,GAAG,sBAAsB;AAsCrC,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,QAAQ,KAA8B;YAC9C,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAC,CAAC;AAC3C,QAAA,CAAC;QA5BG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,SAAS,CAAC,OAAO,IAAG;AAClD,YAAA,IAAI,YAAY,EAAE,cAAc,EAAE,aAAa;AAC/C,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AACvB,gBAAA,QAAQ,MAAM,CAAC,QAAQ;AACnB,oBAAA,KAAK,iBAAiB;wBAClB,YAAY,GAAG,IAAI;wBACnB;AACJ,oBAAA,KAAK,eAAe;wBAChB,cAAc,GAAG,IAAI;wBACrB;AACJ,oBAAA,KAAK,cAAc;wBACf,aAAa,GAAG,IAAI;wBACpB;;AAEZ,YAAA,CAAC,CAAC;YACF,IAAI,CAAC,YAAY,EAAE;AACf,gBAAA,IAAI,CAAC,4BAA4B,GAAG,EAAE;AACtC,gBAAA,IAAI,CAAC,6BAA6B,GAAG,EAAE;YAC3C;YACA,IAAI,CAAC,cAAc,EAAE;AACjB,gBAAA,IAAI,CAAC,8BAA8B,GAAG,EAAE;AACxC,gBAAA,IAAI,CAAC,+BAA+B,GAAG,EAAE;YAC7C;AACJ,QAAA,CAAC,CAAC;IACN;IAMA,gBAAgB,GAAA;AACZ,QAAA,MAAM,8BAA8B,GAAG;AACnC,YAAA,UAAU,EAAE,UAAU;SACzB;QACD,MAAM,IAAI,GAAG,IAAI;AACjB,QAAA,MAAM,gCAAgC,GAAG;AACrC,YAAA,UAAU,EAAE,WAAW;AACvB,YAAA,aAAa,EAAE,IAAI;YACnB,iBAAiB,EAAE,MAAK;gBACpB,OAAO,IAAI,CAAC,oBAAoB;YACpC,CAAC;YACD,kBAAkB,EAAE,MAAK;gBACrB,OAAO,IAAI,CAAC,qBAAqB;YACrC,CAAC;YACD,yBAAyB,EAAE,MAAK;gBAC5B,OAAO,IAAI,CAAC,4BAA4B;YAC5C,CAAC;YACD,0BAA0B,EAAE,MAAK;gBAC7B,OAAO,IAAI,CAAC,6BAA6B;YAC7C,CAAC;AACD,YAAA,yBAAyB,EAAE,CAAC,UAAU,KAAI;AACtC,gBAAA,IAAI,CAAC,4BAA4B,GAAG,UAAU;YAClD,CAAC;AACD,YAAA,0BAA0B,EAAE,CAAC,UAAU,KAAI;AACvC,gBAAA,IAAI,CAAC,6BAA6B,GAAG,UAAU;YACnD,CAAC;YACD,qBAAqB,EAAE,MAAK;gBACxB,OAAO,IAAI,CAAC,wBAAwB;YACxC;SACH;AACD,QAAA,MAAM,kCAAkC,GAAG;AACvC,YAAA,UAAU,EAAE,WAAW;AACvB,YAAA,aAAa,EAAE,IAAI;YACnB,iBAAiB,EAAE,MAAK;gBACpB,OAAO,IAAI,CAAC,sBAAsB;YACtC,CAAC;YACD,kBAAkB,EAAE,MAAK;gBACrB,OAAO,IAAI,CAAC,uBAAuB;YACvC,CAAC;YACD,yBAAyB,EAAE,MAAK;gBAC5B,OAAO,IAAI,CAAC,8BAA8B;YAC9C,CAAC;YACD,0BAA0B,EAAE,MAAK;gBAC7B,OAAO,IAAI,CAAC,+BAA+B;YAC/C,CAAC;AACD,YAAA,yBAAyB,EAAE,CAAC,UAAU,KAAI;AACtC,gBAAA,IAAI,CAAC,8BAA8B,GAAG,UAAU;YACpD,CAAC;AACD,YAAA,0BAA0B,EAAE,CAAC,UAAU,KAAI;AACvC,gBAAA,IAAI,CAAC,+BAA+B,GAAG,UAAU;YACrD,CAAC;YACD,qBAAqB,EAAE,MAAK;gBACxB,OAAO,IAAI,CAAC,0BAA0B;YAC1C;SACH;AAED,QAAA,MAAM,iCAAiC,GAAG;AACtC,YAAA,UAAU,EAAE,WAAW;AACvB,YAAA,aAAa,EAAE,IAAI;YACnB,iBAAiB,EAAE,MAAK;gBACpB,OAAO,IAAI,CAAC,qBAAqB;YACrC,CAAC;YACD,kBAAkB,EAAE,MAAK;gBACrB,OAAO,IAAI,CAAC,sBAAsB;YACtC,CAAC;YACD,yBAAyB,EAAE,MAAK;gBAC5B,OAAO,IAAI,CAAC,6BAA6B;YAC7C,CAAC;YACD,0BAA0B,EAAE,MAAK;gBAC7B,OAAO,IAAI,CAAC,8BAA8B;YAC9C,CAAC;AACD,YAAA,yBAAyB,EAAE,CAAC,UAAU,KAAI;AACtC,gBAAA,IAAI,CAAC,6BAA6B,GAAG,UAAU;YACnD,CAAC;AACD,YAAA,0BAA0B,EAAE,CAAC,UAAU,KAAI;AACvC,gBAAA,IAAI,CAAC,8BAA8B,GAAG,UAAU;YACpD,CAAC;YACD,qBAAqB,EAAE,MAAK;gBACxB,OAAO,IAAI,CAAC,yBAAyB;YACzC;SACH;AAED,QAAA,MAAM,6BAA6B,GAAG;AAClC,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE;gBACX,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAC;gBACxD,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE;AAC5D,aAAA;YACD,gBAAgB,EAAE,MAAK;gBACnB,OAAO,6BAA6B,CAAC,aAAa;YACtD;SACH;AAED,QAAA,MAAM,yBAAyB,GAAG;AAC9B,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE;gBACX,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;gBAClD,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;AACrD,aAAA;YACD,gBAAgB,EAAE,MAAK;gBACnB,OAAO,yBAAyB,CAAC,aAAa;YAClD;SACH;QAED,OAAO;AACH,YAAA;AACI,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,UAAU,EAAE,MAAM;AAClB,gBAAA,eAAe,EAAE,2BAA2B;gBAC5C,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;AACjD,gBAAA,YAAY,EAAE,sBAAsB;AACpC,gBAAA,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AAC/C,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;AACA,oBAAA,IAAI,CAAC,WAAW,GAAG,UAAU;oBAC7B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,KAAK,EAAE,GAAG;AACb,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,iBAAiB;AACxB,gBAAA,KAAK,EAAE,iBAAiB;AACxB,gBAAA,UAAU,EAAE,mBAAmB;AAC/B,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,gCAAgC;AACvD,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;AACA,oBAAA,IAAI,CAAC,WAAW,GAAG,EAAE;oBACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;gBACf,YAAY,EAAE,IAAI,CAAC,aAAa;AAChC,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,MAAM,EAAE,KAAK;AAChB,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,eAAe;AACtB,gBAAA,KAAK,EAAE,eAAe;AACtB,gBAAA,UAAU,EAAE,qBAAqB;AACjC,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,kCAAkC;AACzD,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;AACA,oBAAA,IAAI,CAAC,WAAW,GAAG,EAAE;oBACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;gBACf,YAAY,EAAE,IAAI,CAAC,aAAa;AAChC,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,MAAM,EAAE,KAAK;AAChB,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,UAAU,EAAE,UAAU;AACtB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,6BAA6B;AACpD,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;AACA,oBAAA,IAAI,CAAC,WAAW,GAAG,EAAE;oBACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,YAAY,EAAE,CAAC,GAAG,KAAI;AAClB,oBAAA,OAAO,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,GAAG,QAAQ,GAAG,QAAQ;gBAC/D,CAAC;AACD,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,KAAK,EAAE,GAAG;AACb,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,UAAU,EAAE,YAAY;AACxB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,8BAA8B;gBACrD,cAAc,EAAE,IAAI,CAAC,kBAAkB;AACvC,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,QAAQ,EAAE,IAAI;gBACd,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;AACA,oBAAA,IAAI,CAAC,WAAW,GAAG,EAAE;oBACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,CAAC;AACD,gBAAA,IAAI,EAAE;AACT,aAAA;AACD,YAAA,IAAI,CAAC;SACR;IACL;AAEA,IAAA,OAAO,CAAC,OAAqB,EAAE,IAAU,EAAE,IAAU,EAAA;;AAEjD,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI;AAC3C,QAAA,OAAO,KAAK,CAAC,YAAY,CAAC,sBAAsB,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI;AACvE,aAAA,IAAI,CAAC,CAAC,OAAY,KAAI;AACnB,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AACpC,QAAA,CAAC,CAAC;IACV;AAEQ,IAAA,WAAW,CAAC,OAAY,EAAA;QAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;;YAEzB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;QACjD;QACA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE;YACrC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,UAAU;QACzD;AACA,QAAA,OAAO,OAAO;IAClB;AAEQ,IAAA,gBAAgB,CAAC,OAAY,EAAA;QACjC,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;YAC5B,GAAG,CAAC,UAAU,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACrC,YAAA,OAAO,GAAG;AACd,QAAA,CAAC,CAAC;IACN;IAEO,2BAA2B,GAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,6BAA6B,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC/E,YAAA,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,IAAI;AACvC,YAAA,OAAO,MAAM;AACjB,QAAA,CAAC,CAAC;IACN;IAEO,0BAA0B,GAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;YAC9D,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAI;gBACjD,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,EAAE;gBAC5D,OAAO,QAAQ,CAAC,IAAI;AACxB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,uBAAuB,GAAG,eAAe;AAC9C,YAAA,OAAO,eAAe;AAC1B,QAAA,CAAC,CAAC;IACN;IAEO,yBAAyB,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;YAChE,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;gBAC/C,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,EAAE;gBACtD,OAAO,MAAM,CAAC,IAAI;AACtB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,qBAAqB,GAAG,eAAe;AAC5C,YAAA,OAAO,eAAe;AAC1B,QAAA,CAAC,CAAC;IACN;IAEO,yBAAyB,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,0BAA0B,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC5E,YAAA,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,IAAI;AACzC,YAAA,OAAO,MAAM;AACjB,QAAA,CAAC,CAAC;IACN;IAEO,yBAAyB,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;YAClE,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,YAAY,KAAI;gBACrD,IAAI,CAAC,yBAAyB,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,EAAE;gBACnE,OAAO,YAAY,CAAC,IAAI;AAC5B,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,sBAAsB,GAAG,eAAe;AAC7C,YAAA,OAAO,eAAe;AAC1B,QAAA,CAAC,CAAC;IACN;AAEO,IAAA,UAAU,CAAC,IAAU,EAAA;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,sBAAsB;QACvC,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI;AACpC,YAAA,IAAI,CAAC,wBAAwB,CAAC,MAAM,GAAG,EAAE;AACzC,YAAA,KAAK,CAAC,IAAI,CAAC,wBAAwB,EAAE,QAAQ,CAAC;QAClD;aAAO;AACH,YAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,gBAAgB,EAAE;QAC1D;AACA,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;IAC7B;AA5XS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6BAA6B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EA4C1B,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAA3B,sBAAA,EAAA,EAAA,EAAA,KAAA,EAEhB,iBAAiB,gGAIjB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAAF,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAlDpB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6BAA6B,cAF1B,MAAM,EAAA,CAAA,CAAA;;4FAET,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAHzC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BA6CQ,MAAM;2BAAC,gBAAgB;;0BAEvB,MAAM;2BAAC,iBAAiB;;0BAIxB,MAAM;2BAAC,iBAAiB;;;AC3FjC;;;;;;;;;;;;;;AAcE;AAiBI,MAAO,+BAAgC,SAAQ,iBAAiB,CAAA;IASpE,WAAA,CACoB,GAAkC,EAClD,aAAqC,EACrC,UAAqB,EACb,QAAwB,EAChC,aAAmC,EACA,UAA4B,EAAA;QAEjE,KAAK,CAAC,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC;QAP9C,IAAA,CAAA,GAAG,GAAH,GAAG;QAGX,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAEmB,IAAA,CAAA,UAAU,GAAV,UAAU;QAbjD,IAAA,CAAA,oBAAoB,GAAU,EAAE;QAChC,IAAA,CAAA,sBAAsB,GAAU,EAAE;QAClC,IAAA,CAAA,eAAe,GAAG,KAAK;QAGvB,IAAA,CAAA,KAAK,GAAG,sBAAsB;AAW5B,QAAA,IAAI,QAAQ,GAAG,SAAS,CAAC,QAAQ,IAAI,OAAO;AAC5C,QAAA,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE;IACnC;IAES,QAAQ,GAAA;QACf,KAAK,CAAC,QAAQ,EAAE;QAChB,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;IAC/C;AAEA,IAAA,mBAAmB,CAAC,MAAc,EAAA;QAChC,QAAO,MAAM;AACX,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,EAAE;AACzB,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACF,YAAA,KAAK,QAAQ;gBACX,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;oBAChD,OAAO,GAAG,CAAC,QAAQ;AACrB,gBAAA,CAAC,CAAC;AACF,gBAAA,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,GAAG,UAAU,GAAG,aAAa;AACnE,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,KAAK,CAAC;gBACzC;YACF;;IAEJ;AAEA,IAAA,WAAW,CAAC,KAAU,EAAA;QACpB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;AAChD,QAAA,QAAO,KAAK,EAAE,MAAM;AAClB,YAAA,KAAK,WAAW;AAChB,YAAA,KAAK,YAAY;AACf,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC5B,oBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,wBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;oBACvB;AACF,gBAAA,CAAC,CAAC;gBACF;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,UAAU;gBACjC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpC;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC3B;AACF,YAAA,KAAK,cAAc;gBACjB,IAAI,CAAC,gBAAgB,EAAE;gBACvB;AACF,YAAA,KAAK,mBAAmB;gBACtB,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC1C;AACF,YAAA;gBACE;;IAEN;IAEA,eAAe,CAAC,MAAc,EAAE,IAAS,EAAA;AACvC,QAAA,IAAI,CAAC,UAAU,EAAE,sBAAsB,EAAE,IAAI,CAAC;YAC5C,MAAM;AACN,YAAA,IAAI,EAAE,oBAAoB;YAC1B,IAAI;AACJ,YAAA,IAAI,EAAC;AACN,SAAA,CAAC;IACJ;IACA,iBAAiB,GAAA;QACf,IAAI,CAAC,GAAG,CAAC,2BAA2B,EAAE,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AAC1D,YAAA,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,IAAI;AACzC,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AACxD,YAAA,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,IAAI;AAC3C,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE;AACpC,QAAA,IAAI,CAAC,GAAG,CAAC,0BAA0B,EAAE;AACrC,QAAA,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE;IACtC;AAEA,IAAA,UAAU,CAAC,IAAS,EAAA;QAClB,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,sBAAsB,CAAC;IACrD;AAEA,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,KAAK;AAC9B,QAAA,IAAG,KAAK,EAAE,OAAO,EAAE;YACjB,IAAI,CAAC,WAAW,EAAE;QACpB;IACF;AAEA,IAAA,WAAW,CAAC,KAAK,EAAA;AACf,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;IAC9B;AAEA,IAAA,mBAAmB,CAAC,KAAK,EAAA;AACvB,QAAA,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,KAAK;IAC9B;AAtHW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,+BAA+B,oLAe9B,iBAAiB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAflB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,+BAA+B,iHC/B5C,+hCA4BA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA8B,uBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,WAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,cAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAqB,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDGa,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAN3C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,+BAA+B,cAG7B,KAAK,EAAA,QAAA,EAAA,+hCAAA,EAAA;;0BAiBd,MAAM;2BAAC,iBAAiB;;;AE9C/B;;;;;;;;;;;;;;AAcE;AA4BI,MAAO,0BAA2B,SAAQ,oBAAoB,CAAA;AA2ChE,IAAA,WAAA,CAC8B,QAA8B,EACxD,aAAqC,EACF,WAA4B,EACtD,kBAAsC,EACvC,cAA8B,EAC9B,UAAqB,EACqB,UAA4B,EAC3D,MAAc,EAAA;QAEjC,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,CAAC;QAPnC,IAAA,CAAA,WAAW,GAAX,WAAW;QACrC,IAAA,CAAA,kBAAkB,GAAlB,kBAAkB;QACnB,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,UAAU,GAAV,UAAU;QACgC,IAAA,CAAA,UAAU,GAAV,UAAU;QACzC,IAAA,CAAA,MAAM,GAAN,MAAM;AAjDrB,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,cAAc;QAC7B,IAAA,CAAA,SAAS,GAAG,gBAAgB;QAEnC,IAAA,CAAA,WAAW,GAAG,EAAE;AAChB,QAAA,IAAA,CAAA,qBAAqB,GAAQ,IAAIxC,SAAO,EAAE;QAE1C,IAAA,CAAA,qBAAqB,GAAG,EAAE;QAC1B,IAAA,CAAA,sBAAsB,GAAG,EAAE;QAC3B,IAAA,CAAA,yBAAyB,GAAG,EAAE;QAC9B,IAAA,CAAA,6BAA6B,GAAG,EAAE;QAClC,IAAA,CAAA,8BAA8B,GAAG,EAAE;QAEnC,IAAA,CAAA,sBAAsB,GAAG,EAAE;QAC3B,IAAA,CAAA,uBAAuB,GAAG,EAAE;QAC5B,IAAA,CAAA,0BAA0B,GAAG,EAAE;QAC/B,IAAA,CAAA,8BAA8B,GAAG,EAAE;QACnC,IAAA,CAAA,+BAA+B,GAAG,EAAE;QAEpC,IAAA,CAAA,qBAAqB,GAAG,EAAE;QAC1B,IAAA,CAAA,sBAAsB,GAAG,EAAE;QAC3B,IAAA,CAAA,yBAAyB,GAAG,EAAE;QAC9B,IAAA,CAAA,6BAA6B,GAAG,EAAE;QAClC,IAAA,CAAA,8BAA8B,GAAG,EAAE;AAEnC,QAAA,IAAA,CAAA,aAAa,GAAQ;AACjB,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,EAAE,EAAE,EAAE;AACN,YAAA,SAAS,EAAE,EAAE;SAChB;AAEQ,QAAA,IAAA,CAAA,SAAS,GAAG;AACjB,YAAA,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAC;AAChC,YAAA,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAC;SACrC;AAEQ,QAAA,IAAA,CAAA,kBAAkB,GAAG;AAC1B,YAAA,EAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAC;AAC9C,YAAA,EAAC,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,mBAAmB,EAAC;SAC3D;QAED,IAAA,CAAA,YAAY,GAAG,kBAAkB;AAsCjC,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,QAAQ,KAA8B;YAC9C,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAC,CAAC;AAC3C,QAAA,CAAC;QA5BG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,SAAS,CAAC,OAAO,IAAG;AAClD,YAAA,IAAI,aAAa,EAAE,cAAc,EAAE,aAAa;AAChD,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AACvB,gBAAA,QAAQ,MAAM,CAAC,QAAQ;AACnB,oBAAA,KAAK,cAAc;wBACf,aAAa,GAAG,IAAI;wBACpB;AACJ,oBAAA,KAAK,eAAe;wBAChB,cAAc,GAAG,IAAI;wBACrB;AACJ,oBAAA,KAAK,cAAc;wBACf,aAAa,GAAG,IAAI;wBACpB;;AAEZ,YAAA,CAAC,CAAC;YACF,IAAI,CAAC,aAAa,EAAE;AAChB,gBAAA,IAAI,CAAC,6BAA6B,GAAG,EAAE;AACvC,gBAAA,IAAI,CAAC,8BAA8B,GAAG,EAAE;YAC5C;YACA,IAAI,CAAC,cAAc,EAAE;AACjB,gBAAA,IAAI,CAAC,8BAA8B,GAAG,EAAE;AACxC,gBAAA,IAAI,CAAC,+BAA+B,GAAG,EAAE;YAC7C;AACJ,QAAA,CAAC,CAAC;IACN;IAMA,gBAAgB,GAAA;QACZ,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,MAAM,8BAA8B,GAAG;AACnC,YAAA,UAAU,EAAE,UAAU;SACzB;QACD,MAAM,IAAI,GAAG,IAAI;AACjB,QAAA,MAAM,iCAAiC,GAAG;AACtC,YAAA,UAAU,EAAE,WAAW;AACvB,YAAA,aAAa,EAAE,IAAI;YACnB,iBAAiB,EAAE,MAAK;gBACpB,OAAO,IAAI,CAAC,qBAAqB;YACrC,CAAC;YACD,kBAAkB,EAAE,MAAK;gBACrB,OAAO,IAAI,CAAC,sBAAsB;YACtC,CAAC;YACD,yBAAyB,EAAE,MAAK;gBAC5B,OAAO,IAAI,CAAC,6BAA6B;YAC7C,CAAC;YACD,0BAA0B,EAAE,MAAK;gBAC7B,OAAO,IAAI,CAAC,8BAA8B;YAC9C,CAAC;AACD,YAAA,yBAAyB,EAAE,CAAC,UAAU,KAAI;AACtC,gBAAA,IAAI,CAAC,6BAA6B,GAAG,UAAU;YACnD,CAAC;AACD,YAAA,0BAA0B,EAAE,CAAC,UAAU,KAAI;AACvC,gBAAA,IAAI,CAAC,8BAA8B,GAAG,UAAU;YACpD,CAAC;YACD,qBAAqB,EAAE,MAAK;gBACxB,OAAO,IAAI,CAAC,yBAAyB;YACzC;SACH;AACD,QAAA,MAAM,kCAAkC,GAAG;AACvC,YAAA,UAAU,EAAE,WAAW;AACvB,YAAA,aAAa,EAAE,IAAI;YACnB,iBAAiB,EAAE,MAAK;gBACpB,OAAO,IAAI,CAAC,sBAAsB;YACtC,CAAC;YACD,kBAAkB,EAAE,MAAK;gBACrB,OAAO,IAAI,CAAC,uBAAuB;YACvC,CAAC;YACD,yBAAyB,EAAE,MAAK;gBAC5B,OAAO,IAAI,CAAC,8BAA8B;YAC9C,CAAC;YACD,0BAA0B,EAAE,MAAK;gBAC7B,OAAO,IAAI,CAAC,+BAA+B;YAC/C,CAAC;AACD,YAAA,yBAAyB,EAAE,CAAC,UAAU,KAAI;AACtC,gBAAA,IAAI,CAAC,8BAA8B,GAAG,UAAU;YACpD,CAAC;AACD,YAAA,0BAA0B,EAAE,CAAC,UAAU,KAAI;AACvC,gBAAA,IAAI,CAAC,+BAA+B,GAAG,UAAU;YACrD,CAAC;YACD,qBAAqB,EAAE,MAAK;gBACxB,OAAO,IAAI,CAAC,0BAA0B;YAC1C;SACH;AAED,QAAA,MAAM,iCAAiC,GAAG;AACtC,YAAA,UAAU,EAAE,WAAW;AACvB,YAAA,aAAa,EAAE,IAAI;YACnB,iBAAiB,EAAE,MAAK;gBACpB,OAAO,IAAI,CAAC,qBAAqB;YACrC,CAAC;YACD,kBAAkB,EAAE,MAAK;gBACrB,OAAO,IAAI,CAAC,sBAAsB;YACtC,CAAC;YACD,yBAAyB,EAAE,MAAK;gBAC5B,OAAO,IAAI,CAAC,6BAA6B;YAC7C,CAAC;YACD,0BAA0B,EAAE,MAAK;gBAC7B,OAAO,IAAI,CAAC,8BAA8B;YAC9C,CAAC;AACD,YAAA,yBAAyB,EAAE,CAAC,UAAU,KAAI;AACtC,gBAAA,IAAI,CAAC,6BAA6B,GAAG,UAAU;YACnD,CAAC;AACD,YAAA,0BAA0B,EAAE,CAAC,UAAU,KAAI;AACvC,gBAAA,IAAI,CAAC,8BAA8B,GAAG,UAAU;YACpD,CAAC;YACD,qBAAqB,EAAE,MAAK;gBACxB,OAAO,IAAI,CAAC,yBAAyB;YACzC;SACH;AAED,QAAA,MAAM,6BAA6B,GAAG;AAClC,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE;gBACX,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAC;gBACxD,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE;AAC5D,aAAA;YACD,gBAAgB,EAAE,MAAK;gBACnB,OAAO,6BAA6B,CAAC,aAAa;YACtD;SACH;AAED,QAAA,MAAM,yBAAyB,GAAG;AAC9B,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE;gBACX,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;gBAClD,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;AACrD,aAAA;YACD,gBAAgB,EAAE,MAAK;gBACnB,OAAO,yBAAyB,CAAC,aAAa;YAClD;SACH;AAED,QAAA,IAAI,YAAY,GAAG;AACf,YAAA;AACI,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,UAAU,EAAE,MAAM;AAClB,gBAAA,eAAe,EAAE,2BAA2B;gBAC5C,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;AACjD,gBAAA,YAAY,EAAE,sBAAsB;AACpC,gBAAA,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AAC/C,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;AACA,oBAAA,IAAI,CAAC,WAAW,GAAG,UAAU;oBAC7B,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;gBACpC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,KAAK,EAAE,GAAG;AACb,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,cAAc;AACrB,gBAAA,KAAK,EAAE,cAAc;AACrB,gBAAA,UAAU,EAAE,oBAAoB;AAChC,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,iCAAiC;AACxD,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;AACA,oBAAA,IAAI,CAAC,WAAW,GAAG,EAAE;oBACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;gBACf,YAAY,EAAE,IAAI,CAAC,aAAa;AAChC,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,MAAM,EAAE,KAAK;AAChB,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,eAAe;AACtB,gBAAA,KAAK,EAAE,eAAe;AACtB,gBAAA,UAAU,EAAE,qBAAqB;AACjC,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,kCAAkC;AACzD,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;AACA,oBAAA,IAAI,CAAC,WAAW,GAAG,EAAE;oBACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;gBACf,YAAY,EAAE,IAAI,CAAC,aAAa;AAChC,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,MAAM,EAAE,KAAK;AAChB,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,mBAAmB;AAC1B,gBAAA,KAAK,EAAE,mBAAmB;AAC1B,gBAAA,UAAU,EAAE,0BAA0B;AACtC,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,iCAAiC;AACxD,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;AACA,oBAAA,IAAI,CAAC,WAAW,GAAG,EAAE;oBACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;gBACf,YAAY,EAAE,IAAI,CAAC,aAAa;AAChC,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,MAAM,EAAE,KAAK;AAChB,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,UAAU,EAAE,UAAU;AACtB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,6BAA6B;AACpD,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;AACA,oBAAA,IAAI,CAAC,WAAW,GAAG,EAAE;oBACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,YAAY,EAAE,CAAC,GAAG,KAAI;AAClB,oBAAA,OAAO,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,GAAG,QAAQ,GAAG,QAAQ;gBAC/D,CAAC;AACD,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,KAAK,EAAE,GAAG;AACb,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,UAAU,EAAE,MAAM;AAClB,gBAAA,eAAe,EAAE,2BAA2B;;AAE5C,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;AACA,oBAAA,IAAI,CAAC,WAAW,GAAG,EAAE;oBACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,YAAY,EAAE,CAAC,GAAG,KAAI;AAClB,oBAAA,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI;gBACzB,CAAC;AACD,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,KAAK,EAAE,GAAG;AACb,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,UAAU,EAAE,YAAY;AACxB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,8BAA8B;gBACrD,cAAc,EAAE,IAAI,CAAC,kBAAkB;AACvC,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,QAAQ,EAAE,IAAI;gBACd,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;AACA,oBAAA,IAAI,CAAC,WAAW,GAAG,EAAE;oBACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,CAAC;AACD,gBAAA,IAAI,EAAE;AACT,aAAA;AACD,YAAA,IAAI,CAAC;SACR;AACD,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,mBAAmB,EAAE;YACtC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,YAAY,CAAC;QACpE;AACA,QAAA,OAAO,YAAY;IACvB;AAEA,IAAA,OAAO,CAAC,OAAqB,EAAE,IAAU,EAAE,IAAU,EAAA;;AAEjD,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI;AAC3C,QAAA,OAAO,KAAK,CAAC,YAAY,CAAC,kBAAkB,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI;AACnE,aAAA,IAAI,CAAC,CAAC,OAAY,KAAI;AACnB,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AACpC,QAAA,CAAC,CAAC;IACV;IAEQ,MAAM,WAAW,CAAC,OAAY,EAAA;QAClC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;;YAEzB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;QACjD;AACA,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE;AAC5B,YAAA,IAAI;gBACA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;AAChD,oBAAA,IAAI,EAAE,kBAAkB;oBACxB,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE;AACrD,iBAAA,CAAC;AACF,gBAAA,IAAI,WAAW,KAAK,SAAS,EAAE;oBAC3B,OAAO,GAAG,WAAW;gBACzB;YACJ;YAAE,OAAO,EAAE,EAAE;;YAEb;QACJ;QACA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE;YACrC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,UAAU;QACzD;AACA,QAAA,OAAO,OAAO;IAClB;AAEQ,IAAA,gBAAgB,CAAC,OAAY,EAAA;QACjC,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;YAC5B,GAAG,CAAC,UAAU,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACrC,YAAA,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC;AACrC,YAAA,OAAO,GAAG;AACd,QAAA,CAAC,CAAC;IACN;IAEO,wBAAwB,GAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,yBAAyB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC3E,YAAA,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,IAAI;AACxC,YAAA,OAAO,MAAM;AACjB,QAAA,CAAC,CAAC;IACN;IAEO,0BAA0B,GAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,EAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;YACzI,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAI;gBACjD,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,EAAE;gBAC5D,OAAO,QAAQ,CAAC,IAAI;AACxB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,uBAAuB,GAAG,eAAe;AAC9C,YAAA,OAAO,eAAe;AAC1B,QAAA,CAAC,CAAC;IACN;IAEO,yBAAyB,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,EAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;YACvI,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,KAAI;gBAChD,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE;gBACzD,OAAO,OAAO,CAAC,IAAI;AACvB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,sBAAsB,GAAG,eAAe;AAC7C,YAAA,OAAO,eAAe;AAC1B,QAAA,CAAC,CAAC;IACN;IAEO,yBAAyB,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,0BAA0B,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC5E,YAAA,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,IAAI;AACzC,YAAA,OAAO,MAAM;AACjB,QAAA,CAAC,CAAC;IACN;IAEO,yBAAyB,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;YAClE,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,YAAY,KAAI;gBACrD,IAAI,CAAC,yBAAyB,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,EAAE;gBACnE,OAAO,YAAY,CAAC,IAAI;AAC5B,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,sBAAsB,GAAG,eAAe;AAC7C,YAAA,OAAO,eAAe;AAC1B,QAAA,CAAC,CAAC;IACN;AAEO,IAAA,UAAU,CAAC,IAAU,EAAA;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,kBAAkB;QACnC,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;AACjC,YAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,GAAG,EAAE;AACtC,YAAA,KAAK,CAAC,IAAI,CAAC,qBAAqB,EAAE,QAAQ,CAAC;QAC/C;aAAO;AACH,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAIA,SAAO,EAAE;QAC9C;AACA,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;IAC7B;AAtbS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EA4CvB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAAV,sBAAA,EAAA,EAAA,EAAA,KAAA,EAEhB,iBAAiB,gGAIjB,gCAAgC,EAAA,EAAA,EAAA,KAAA,EAAAF,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAlDnC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,cAFvB,MAAM,EAAA,CAAA,CAAA;;4FAET,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAHtC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BA6CQ,MAAM;2BAAC,gBAAgB;;0BAEvB,MAAM;2BAAC,iBAAiB;;0BAIxB,MAAM;2BAAC,gCAAgC;;;AC5FhD;;;;;;;;;;;;;;AAcE;AAkBI,MAAO,4BAA6B,SAAQ,iBAAiB,CAAA;IAUjE,WAAA,CACoB,GAA+B,EAC/C,aAAqC,EACrC,UAAqB,EACb,QAAwB,EAChC,aAAmC,EACe,UAA4B,EAAA;QAEhF,KAAK,CAAC,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC;QAP9C,IAAA,CAAA,GAAG,GAAH,GAAG;QAGX,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAEkC,IAAA,CAAA,UAAU,GAAV,UAAU;QAdhE,IAAA,CAAA,WAAW,GAAG,EAAE;QAChB,IAAA,CAAA,qBAAqB,GAAU,EAAE;QACjC,IAAA,CAAA,sBAAsB,GAAU,EAAE;QAClC,IAAA,CAAA,eAAe,GAAG,KAAK;QAGvB,IAAA,CAAA,KAAK,GAAG,kBAAkB;AAWxB,QAAA,IAAI,QAAQ,GAAG,SAAS,CAAC,QAAQ,IAAI,OAAO;AAC5C,QAAA,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE;IACnC;IAES,QAAQ,GAAA;QACf,KAAK,CAAC,QAAQ,EAAE;QAChB,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;IAC/C;AAEA,IAAA,mBAAmB,CAAC,MAAc,EAAA;QAChC,QAAO,MAAM;AACX,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,EAAE;AACzB,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACF,YAAA,KAAK,QAAQ;gBACX,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;oBAChD,OAAO,GAAG,CAAC,QAAQ;AACrB,gBAAA,CAAC,CAAC;AACF,gBAAA,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,GAAG,UAAU,GAAG,SAAS;AAC/D,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,KAAK,CAAC;gBACzC;YACF;;IAEJ;AAEA,IAAA,WAAW,CAAC,KAAU,EAAA;QACpB,MAAM,oBAAoB,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;QAC/D,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;QAChD,IAAI,oBAAoB,EAAE;YACxB;QACF;AACA,QAAA,QAAO,KAAK,EAAE,MAAM;AAClB,YAAA,KAAK,WAAW;AAChB,YAAA,KAAK,YAAY;AACf,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC5B;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,UAAU;gBACjC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpC;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC3B;AACF,YAAA,KAAK,cAAc;gBACjB,IAAI,CAAC,gBAAgB,EAAE;gBACvB;AACF,YAAA,KAAK,mBAAmB;gBACtB,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC1C;AACF,YAAA;gBACE;;IAEN;IAEA,eAAe,CAAC,MAAc,EAAE,IAAS,EAAA;AACvC,QAAA,IAAI,CAAC,UAAU,EAAE,sBAAsB,EAAE,IAAI,CAAC;YAC5C,MAAM;AACN,YAAA,IAAI,EAAE,gBAAgB;YACtB,IAAI;AACJ,YAAA,IAAI,EAAC;AACN,SAAA,CAAC;IACJ;IACA,iBAAiB,GAAA;QACf,IAAI,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AACvD,YAAA,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,IAAI;AAC1C,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AACxD,YAAA,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,IAAI;AAC3C,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE;AACpC,QAAA,IAAI,CAAC,GAAG,CAAC,0BAA0B,EAAE;AACrC,QAAA,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE;IACtC;AAEA,IAAA,UAAU,CAAC,IAAS,EAAA;QAClB,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC;IACjD;AAEA,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,KAAK;AAC9B,QAAA,IAAG,KAAK,EAAE,OAAO,EAAE;YACjB,IAAI,CAAC,WAAW,EAAE;QACpB;IACF;AAEA,IAAA,WAAW,CAAC,KAAK,EAAA;AACf,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;IAC9B;AAEA,IAAA,mBAAmB,CAAC,KAAK,EAAA;AACvB,QAAA,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,KAAK;IAC9B;AAtHW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4BAA4B,iLAgB3B,gCAAgC,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAhBjC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,4BAA4B,6GChCzC,ohCA4BA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA8B,uBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,WAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,cAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAqB,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDIa,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBANxC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,2BAA2B,cAGzB,KAAK,EAAA,QAAA,EAAA,ohCAAA,EAAA;;0BAkBd,MAAM;2BAAC,gCAAgC;;;AETxC,MAAO,0BAA2B,SAAQ,eAAe,CAAA;AAqB7D,IAAA,WAAA,CACiD,eAAgC,EACtE,GAA6B,EACA,WAA4B,EAChE,cAA8B,EACY,UAA4B,EACnD,MAAc,EACd,KAAqB,EACxC,QAAkB,EAClB,UAAqB,EAAA;AAEvB,QAAA,KAAK,CAAC,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,CAAC;QAVrD,IAAA,CAAA,eAAe,GAAf,eAAe;QACrD,IAAA,CAAA,GAAG,GAAH,GAAG;QAC0B,IAAA,CAAA,WAAW,GAAX,WAAW;QAG5B,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,KAAK,GAAL,KAAK;AA3BlB,QAAA,IAAA,CAAA,KAAK,GAAsB,IAAI,YAAY,EAAO;QAE5D,IAAA,CAAA,6BAA6B,GAAG,EAAE;QAClC,IAAA,CAAA,8BAA8B,GAAG,EAAE;QACnC,IAAA,CAAA,8BAA8B,GAAG,EAAE;QACnC,IAAA,CAAA,+BAA+B,GAAG,EAAE;QACpC,IAAA,CAAA,6BAA6B,GAAG,EAAE;QAClC,IAAA,CAAA,8BAA8B,GAAG,EAAE;QAEnC,IAAA,CAAA,QAAQ,GAAG,QAAQ;QACnB,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,iBAAiB,GAAG,KAAK;QACzB,IAAA,CAAA,oBAAoB,GAAG,KAAK;QAE5B,IAAA,CAAA,QAAQ,GAAQ,EAAE;QAET,IAAA,CAAA,UAAU,GAAG,kBAAkB;QAC/B,IAAA,CAAA,WAAW,GAAGE,eAAa;AAyBpC,QAAA,IAAA,CAAA,kCAAkC,GAAG,QAAQ,CAAC,CAAC,MAAc,KAAK,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,0BAA0B,EAAE,CAAC,EAAE,GAAG,CAAC;AAChK,QAAA,IAAA,CAAA,mCAAmC,GAAG,QAAQ,CAAC,CAAC,MAAc,KAAK,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,0BAA0B,EAAE,CAAC,EAAE,GAAG,CAAC;AAClK,QAAA,IAAA,CAAA,kCAAkC,GAAG,QAAQ,CAAC,CAAC,MAAc,KAAK,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,0BAA0B,EAAE,CAAC,EAAE,GAAG,CAAC;QA6ShK,IAAA,CAAA,QAAQ,GAAG,EAAE;IA1Tb;IAES,QAAQ,GAAA;QACf,KAAK,CAAC,QAAQ,EAAE;AAChB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACjB,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,OAAW,KAAI;AAC5D,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;QACzB,CAAC,CAAC,CACL;IACH;IAMS,aAAa,GAAA;QACpB,KAAK,CAAC,aAAa,EAAE;QACrB,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,IAAI,CAAC,QAAQ,CAAC;QACjD,MAAM,QAAQ,GAAG,EAAE;QACnB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC;QAClD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE,CAAC;QACnD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE,CAAC;QACnD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,0BAA0B,EAAE,CAAC;QACpD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAK;YAC9B,IAAI,CAAC,sBAAsB,EAAE;AAC/B,QAAA,CAAC,CAAC;QACF,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAIA,eAAa,EAAE;QACrC;QACA,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;QACxC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7C,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACjB,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AACjD,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB;YACF;AACA,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACtB,CAAC,CAAC,CACL;QACD,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC1C;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;IACjC;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC7C;AAEA;;;AAGG;IACH,0BAA0B,GAAA;AACxB,QAAA,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,sBAAsB,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;AAC3I,QAAA,IAAI,CAAC,GAAG,CAAC,sBAAsB,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7G,QAAA,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,uBAAuB,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;AAC9I,QAAA,IAAI,CAAC,GAAG,CAAC,uBAAuB,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/G,QAAA,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,sBAAsB,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;AAC3I,QAAA,IAAI,CAAC,GAAG,CAAC,sBAAsB,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/G;IAEA,sBAAsB,GAAA;QACpB,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,GAAG,CAAC,kBAAkB,GAAG,EAAE;AAChC,YAAA,IAAI,CAAC,GAAG,CAAC,sBAAsB,GAAG,EAAE;AACpC,YAAA,IAAI,CAAC,GAAG,CAAC,oBAAoB,GAAG,EAAE;AAClC,YAAA,IAAI,CAAC,GAAG,CAAC,uBAAuB,GAAG,EAAE;AACrC,YAAA,IAAI,CAAC,GAAG,CAAC,uBAAuB,GAAG,EAAE;AACrC,YAAA,IAAI,CAAC,GAAG,CAAC,2BAA2B,GAAG,EAAE;YACzC;QACF;QACA,MAAM,sBAAsB,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC;QACzE,MAAM,uBAAuB,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC;QAC3E,MAAM,sBAAsB,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC;AACzE,QAAA,IAAI,CAAC,6BAA6B,GAAG,EAAE;AACvC,QAAA,IAAI,CAAC,8BAA8B,GAAG,EAAE;AACxC,QAAA,IAAI,CAAC,8BAA8B,GAAG,EAAE;AACxC,QAAA,IAAI,CAAC,+BAA+B,GAAG,EAAE;AACzC,QAAA,IAAI,CAAC,6BAA6B,GAAG,EAAE;AACvC,QAAA,IAAI,CAAC,8BAA8B,GAAG,EAAE;QACxC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,IAAG;YACzC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC3B,gBAAA,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YACrF;iBAAO;AACL,gBAAA,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC5D;AACF,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,IAAG;YAC1C,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC3B,gBAAA,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YACvF;iBAAO;AACL,gBAAA,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC7D;AACF,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC,IAAI,IAAG;YAC9C,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC3B,gBAAA,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YACrF;iBAAO;AACL,gBAAA,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC5D;AACF,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,0BAA0B,EAAE;QACjC,IAAI,CAAC,kBAAkB,EAAE;IAC3B;IAEA,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,GAAG,CAAC,gCAAgC,CAAC,IAAI,CAAC,6BAA6B,EAAE,IAAI,CAAC,8BAA8B,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC1I,QAAA,IAAI,CAAC,GAAG,CAAC,kCAAkC,CAAC,IAAI,CAAC,8BAA8B,EAAE,IAAI,CAAC,+BAA+B,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC9I,QAAA,IAAI,CAAC,GAAG,CAAC,qCAAqC,CAAC,IAAI,CAAC,6BAA6B,EAAE,IAAI,CAAC,8BAA8B,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACjJ;IAEA,0BAA0B,GAAA;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,gCAAgC,CAAC,IAAI,CAAC,6BAA6B,EAAE,IAAI,CAAC,8BAA8B,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC1I,QAAA,IAAI,CAAC,eAAe,CAAC,4BAA4B,CAAC;IACpD;IAEA,2BAA2B,GAAA;AACzB,QAAA,IAAI,CAAC,GAAG,CAAC,kCAAkC,CAAC,IAAI,CAAC,8BAA8B,EAAE,IAAI,CAAC,+BAA+B,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC9I,QAAA,IAAI,CAAC,eAAe,CAAC,6BAA6B,CAAC;IACrD;IAEA,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC;IAC7C;IAEA,uBAAuB,GAAA;QACrB,IAAI,CAAC,kBAAkB,EAAE;AACzB,QAAA,IAAI,CAAC,eAAe,CAAC,yBAAyB,CAAC;IACjD;AAEA,IAAA,eAAe,CAAC,IAAY,EAAA;AAC1B,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG;YAC1B,IAAI;AACJ,YAAA,IAAI,EAAE;AACJ,gBAAA,UAAU,EAAE,gBAAgB;AAC5B,gBAAA,eAAe,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE;gBAClC,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,CACtC,IAAI,CAAC,8BAA8B,EACnC,IAAI,CAAC,+BAA+B,EACpC,IAAI,CAAC,GAAG,CAAC,0BAA0B,CACpC;gBACD,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,CACrC,IAAI,CAAC,6BAA6B,EAClC,IAAI,CAAC,8BAA8B,EACnC,IAAI,CAAC,GAAG,CAAC,yBAAyB,CACnC;AACD,gBAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,IAAI,OAAO;AAC5C,gBAAA,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,MAAM;AAC1C,aAAA;AACF,SAAA,CAAC;IACJ;AAEA,IAAA,oBAAoB,CAAC,MAAM,EAAA;AACzB,QAAA,QAAO,MAAM,CAAC,EAAE;AACd,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,IAAI,EAAE;gBACX;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,YAAY,EAAE;gBACnB;;IAEN;AAEA,IAAA,qBAAqB,CAAC,MAAM,EAAA;AAC1B,QAAA,QAAO,MAAM,CAAC,IAAI;AAChB,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,IAAI,EAAE;gBACX;AACF,YAAA,KAAK,OAAO;gBACV,IAAI,CAAC,gBAAgB,EAAE;gBACvB;AACF,YAAA,KAAK,aAAa;AAChB,gBAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI;gBAC3B;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,YAAY,EAAE;gBACnB;;IAEN;IAEA,MAAM,IAAI,CAAC,KAAM,EAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE;YAChC;QACF;AACA,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE;AAC9C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC/B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;AACvD,QAAA,IAAG,CAAC,OAAO,IAAI,CAAC,UAAU,EAAE;AAC1B,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,YAAA,CAAc,EACd,CAAA,mFAAA,CAAqF,CACxF;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;YACrC;QACF;AAEA,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,IAAI,CAAC,uBAAuB,EAAE;AAC9B,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC3C,YAAA,IAAI,MAAM,EAAE,KAAK,EAAE;AACjB,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;YAC7B;AACA,YAAA,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM;AACpD,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;YACxB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,IAAI,CAAC,QAAQ;AACrC,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;YAC/B;iBAAO;AACL,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;YAC/B;YACA,IAAI,CAAC,gBAAgB,EAAE;AACzB,QAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACxB,QAAA,CAAC,CAAC;IACJ;IAEA,uBAAuB,GAAA;QACrB,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,6BAA6B,EAAE,IAAI,CAAC,8BAA8B,EAAE,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC;QACnK,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,8BAA8B,EAAE,IAAI,CAAC,+BAA+B,EAAE,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC;QACvK,IAAI,CAAC,QAAQ,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,6BAA6B,EAAE,IAAI,CAAC,8BAA8B,EAAE,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC;IAC1K;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;QAChB,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC/B,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI;QAC5B;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IAC7B;AAEA,IAAA,kBAAkB,CAAC,MAAM,EAAA;AACvB,QAAA,QAAQ,MAAM,CAAC,EAAE;AACf,YAAA,KAAK,KAAK;gBACR,IAAI,CAAC,cAAc,EAAE;gBACrB;AACF,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,eAAe,EAAE;gBACtB;;IAEN;IAEA,cAAc,GAAA;QACZ,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,6BAA6B,EAAE,IAAI,CAAC,8BAA8B,EAAE,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC;QAC3J,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC;QAE9D,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,8BAA8B,EAAE,IAAI,CAAC,+BAA+B,EAAE,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC;QAC/J,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC;QAEhE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,6BAA6B,EAAE,IAAI,CAAC,8BAA8B,EAAE,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC;QACtJ,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;QAEpD,MAAM,OAAO,GAAG,CAAA,UAAA,EAAa,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,QAAQ,GAAG,QAAQ,CAAA,gBAAA,EAAmB,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA,CAAA,CAAG,GAAG,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,QAAQ,GAAG,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAA,EAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,GAAG,CAAA,aAAA,EAAgB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAA,CAAA,CAAG,CAAA,kBAAA,EAAqB,eAAe,uBAAuB,gBAAgB,CAAA,yBAAA,EAA4B,UAAU,CAAA,CAAA,CAAG;AAEva,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC;AACtC,QAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,WAAA,CAAa,EACb,CAAA,+BAAA,CAAiC,CACpC;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACvC;IAEA,eAAe,GAAA;QACb,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,6BAA6B,EAAE,IAAI,CAAC,8BAA8B,EAAE,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC;QAC3J,MAAM,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC;QAE/D,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,8BAA8B,EAAE,IAAI,CAAC,+BAA+B,EAAE,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC;QAC/J,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC;QAEjE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,6BAA6B,EAAE,IAAI,CAAC,8BAA8B,EAAE,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC;QACtJ,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;AAErD,QAAA,MAAM,OAAO,GAAG,CAAA,MAAA,EAAS,IAAI,CAAC,UAAU,CAAA;MACtC,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,oBAAoB,GAAG,IAAI;;;AAG9B,oBAAA,EAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAA;2BACnB,IAAI,CAAC,QAAQ,CAAC,IAAI,oBAAoB,eAAe,CAAA,iBAAA,EAAoB,gBAAgB,CAAA,qBAAA,EAAwB,UAAU,CAAA,aAAA,EAAgB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAA,UAAA,EAAa,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAA,GAAA,CAAK;AAE5N,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC;AACtC,QAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,WAAA,CAAa,EACb,CAAA,gCAAA,CAAkC,CACrC;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACvC;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,sBAAsB,GAAG,sCAAsC,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA,CAAE,GAAG,EAAE,CAAC;IACzI;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,MAAM,IAAI,GAAQ;AAChB,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE;AAC/B,YAAA,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,EAAE;YACrC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,6BAA6B,EAAE,IAAI,CAAC,8BAA8B,EAAE,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC;YACpJ,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,8BAA8B,EAAE,IAAI,CAAC,+BAA+B,EAAE,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC;YACxJ,iBAAiB,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,6BAA6B,EAAE,IAAI,CAAC,8BAA8B,EAAE,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC;AACzJ,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ;AACjC,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI;AACzB,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE;SACtB;AACD,QAAA,OAAO,IAAI;IACb;IAGA,IAAI,OAAO,CAAC,IAAI,EAAA;AACd,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACtB;IAEA,KAAK,GAAA;IACL;AAjWW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAsBzB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAAwD,wBAAA,EAAA,EAAA,EAAA,KAAA,EAEhB,iBAAiB,wCAEjB,gCAAgC,EAAA,EAAA,EAAA,KAAA,EAAA3G,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAJ,IAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA1BjC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EARxB;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,YAAY;AACrB,gBAAA,QAAQ,EAAE;AACb;AACJ,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpCL,mmTAuMA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAwB,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAc,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,aAAA,EAAA,UAAA,EAAA,cAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,aAAA,EAAA,OAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,oBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA4D,oBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,OAAA,EAAA,aAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,aAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAtD,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAuD,wBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAvE,oBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,cAAA,EAAA,eAAA,EAAA,YAAA,EAAA,WAAA,EAAA,cAAA,EAAA,aAAA,EAAA,+BAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,8BAAA,EAAA,+BAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAwE,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDhKa,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAZtC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,EAAA,SAAA,EAGxB;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,YAAY;AACrB,4BAAA,QAAQ,EAAE;AACb;AACJ,qBAAA,EAAA,UAAA,EACW,KAAK,EAAA,QAAA,EAAA,mmTAAA,EAAA;;0BAwBd,MAAM;2BAAC,gBAAgB;;0BAEvB,MAAM;2BAAC,iBAAiB;;0BAExB,MAAM;2BAAC,gCAAgC;;sBAzB3C;;;ME5BU,oCAAoC,GAAG,IAAI,cAAc,CAAM,sCAAsC;MAKrG,2BAA2B,CAAA;AAgBpC,IAAA,WAAA,CACqC,eAAgC,EAC9B,WAA4B,EACvD,cAA8B,EACe,UAA4B,EAAA;QAHhD,IAAA,CAAA,eAAe,GAAf,eAAe;QACb,IAAA,CAAA,WAAW,GAAX,WAAW;QACtC,IAAA,CAAA,cAAc,GAAd,cAAc;QAC+B,IAAA,CAAA,UAAU,GAAV,UAAU;QAlBnE,IAAA,CAAA,oBAAoB,GAAQ,EAAE;QAC9B,IAAA,CAAA,uBAAuB,GAAQ,EAAE;QACjC,IAAA,CAAA,qBAAqB,GAAQ,EAAE;QAC/B,IAAA,CAAA,yBAAyB,GAAQ,EAAE;QAEnC,IAAA,CAAA,4BAA4B,GAAQ,EAAE;QACtC,IAAA,CAAA,0BAA0B,GAAQ,EAAE;QAEpC,IAAA,CAAA,uBAAuB,GAAQ,EAAE;QACjC,IAAA,CAAA,yBAAyB,GAAQ,EAAE;QAEnC,IAAA,CAAA,wBAAwB,GAAQ,EAAE;QAClC,IAAA,CAAA,sBAAsB,GAAQ,EAAE;QAkHxB,IAAA,CAAA,gCAAgC,GAAG,CAAC;QAuBpC,IAAA,CAAA,kCAAkC,GAAG,CAAC;IAlI3C;AAEH,IAAA,IAAI,CAAC,QAAQ,EAAA;QACT,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,GAAQ,IAAI,CAAC,4BAA4B,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACvE,QAAA,MAAM,GAAG,GAAG,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AACnH,QAAA,OAAO,GAAG,CAAC,sBAAsB,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,MAAW,KAAI;YAC7E,MAAM,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,QAAQ,CAAC,EAAE;YAC1C,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,sBAAsB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,KAAI;gBAC/F,OAAO,UAAU,CAAC,IAAI;AAC1B,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,eAAoB,KAAI;AACvE,gBAAA,MAAM,SAAS,GAAG;AACd,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;iBAC1B;AACD,gBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,mBAAA,EAAsB,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA,CAAE,EACxD,CAAA,aAAA,EAAgB,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA,qBAAA,EAAwB,QAAQ,CAAC,IAAI,CAAA,CAAE,CAC1F;AACD,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,gBAAA,OAAO,SAAS;AACpB,YAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAI;AAChB,gBAAA,OAAO,KAAK;AAChB,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAI;YACd,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC;YAC3D,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,MAAA,EAAS,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAA,mBAAA,CAAqB,EAChE,YAAY,CACf;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,YAAA,MAAM,IAAI;AACd,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,2BAA2B,CAAC,EAAE,EAAA;QAC1B,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,sBAAsB,EAAE,EAAE,EAAE,cAAc,EAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AACzH,YAAA,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,IAAI;AACxC,YAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;gBACpE,OAAO,GAAG,CAAC,IAAI;AACnB,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,2BAA2B,CAAC,EAAE,EAAA;QAC1B,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,sBAAsB,EAAE,EAAE,EAAE,YAAY,EAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AACvH,YAAA,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,IAAI;AACvC,YAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,KAAK,KAAI;gBACnE,OAAO,KAAK,CAAC,IAAI;AACrB,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,mCAAmC,CAAC,cAAc,EAAE,eAAe,EAAE,QAAQ,GAAG,OAAO,EAAA;AACnF,QAAA,IAAI,CAAC,yBAAyB,GAAG,EAAE;AACnC,QAAA,IAAI,OAAO,CAAC,cAAc,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,yBAAyB,GAAG,CAAC,GAAG,eAAe,CAAC;YACrD;QACJ;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,cAAc,EAAE,QAAQ,CAAC;AACxE,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc;AAC9C,QAAA,MAAM,CAAC,QAAQ,GAAG,KAAK;AACvB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AACvE,YAAA,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,IAAI;AACxC,YAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;gBACpE,OAAO,GAAG,CAAC,IAAI;AACnB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,yBAAyB,GAAG,CAAC,GAAG,IAAI,CAAC,yBAAyB,EAAE,GAAG,eAAe,CAAC;YACxF,IAAI,CAAC,yBAAyB,GAAG,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC;YACvE,IAAI,CAAC,yBAAyB,GAAG,UAAU,CAAC,IAAI,CAAC,yBAAyB,CAAC;AAC3E,YAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,KAAK,SAAS,CAAC;AACtG,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,kCAAkC,CAAC,cAAc,EAAE,eAAe,EAAE,QAAQ,GAAG,OAAO,EAAA;AAClF,QAAA,IAAI,CAAC,uBAAuB,GAAG,EAAE;AACjC,QAAA,IAAI,OAAO,CAAC,cAAc,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,uBAAuB,GAAG,CAAC,GAAG,eAAe,CAAC;YACnD;QACJ;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,cAAc,EAAE,QAAQ,CAAC;AACxE,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc;AAC9C,QAAA,MAAM,CAAC,QAAQ,GAAG,KAAK;AACvB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AACrE,YAAA,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,IAAI;AACvC,YAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;gBACjE,OAAO,GAAG,CAAC,IAAI;AACnB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,uBAAuB,GAAG,CAAC,GAAG,IAAI,CAAC,uBAAuB,EAAE,GAAG,eAAe,CAAC;YACpF,IAAI,CAAC,uBAAuB,GAAG,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC;YACnE,IAAI,CAAC,uBAAuB,GAAG,UAAU,CAAC,IAAI,CAAC,uBAAuB,CAAC;AACvE,YAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,KAAK,SAAS,CAAC;AAClG,QAAA,CAAC,CAAC;IACN;IAEO,2BAA2B,GAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,6BAA6B,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC/E,YAAA,IAAI,CAAC,wBAAwB,GAAG,MAAM,CAAC,IAAI;AAC3C,YAAA,OAAO,MAAM;AACjB,QAAA,CAAC,CAAC;IACN;AAIO,IAAA,0BAA0B,CAAC,MAAe,EAAA;AAC7C,QAAA,MAAM,SAAS,GAAG,EAAE,IAAI,CAAC,gCAAgC;AACzD,QAAA,MAAM,MAAM,GAAG,EAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAC;QACxG,MAAM,OAAO,GAAG,EAAE;AAClB,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAClB,OAAO,CAAC,IAAI,CAAC,EAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAC,CAAC;QAC5G;AACA,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;;AAEvE,YAAA,IAAI,SAAS,KAAK,IAAI,CAAC,gCAAgC,EAAE;gBACrD,OAAO,IAAI,CAAC,uBAAuB;YACvC;YACA,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAI;gBACjD,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,EAAE;gBAC5D,OAAO,QAAQ,CAAC,IAAI;AACxB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,uBAAuB,GAAG,eAAe;AAC9C,YAAA,OAAO,eAAe;AAC1B,QAAA,CAAC,CAAC;IACN;AAIO,IAAA,4BAA4B,CAAC,MAAe,EAAA;AAC/C,QAAA,MAAM,SAAS,GAAG,EAAE,IAAI,CAAC,kCAAkC;AAC3D,QAAA,MAAM,MAAM,GAAG,EAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAC;QACxG,MAAM,OAAO,GAAG,EAAE;AAClB,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAClB,OAAO,CAAC,IAAI,CAAC,EAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAC,CAAC;QAC5G;AACA,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACzE,YAAA,IAAI,SAAS,KAAK,IAAI,CAAC,kCAAkC,EAAE;gBACvD,OAAO,IAAI,CAAC,yBAAyB;YACzC;YACA,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;gBAC/C,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,EAAE;gBAC1D,OAAO,MAAM,CAAC,IAAI;AACtB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,yBAAyB,GAAG,eAAe;AAChD,YAAA,OAAO,eAAe;AAC1B,QAAA,CAAC,CAAC;IACN;IAEO,yBAAyB,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,0BAA0B,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC5E,YAAA,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,IAAI;AACzC,YAAA,OAAO,MAAM;AACjB,QAAA,CAAC,CAAC;IACN;AAEA;;;;AAIG;AACI,IAAA,yBAAyB,CAAC,QAAa,EAAA;QAC1C,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,sBAAsB,EAAE,IAAI,CAAC,4BAA4B,CAAC;QAC7F,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,IAAI,CAAC,0BAA0B,CAAC;IAC7F;IAEQ,mBAAmB,CAAC,QAAa,EAAE,kBAAuB,EAAA;QAC9D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAC1B;QACJ;AACA,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAU,KAAI;AAC5B,YAAA,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI;AACxB,YAAA,MAAM,EAAE,GAAG,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS;YACzF,IAAI,CAAC,EAAE,EAAE;gBACL;YACJ;AACA,YAAA,IAAI,WAAW,GAAG,KAAK,EAAE,IAAI;YAC7B,IAAI,CAAC,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;gBACjD;YACJ;YACA,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AAC/B,gBAAA,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YACtC;AACA,YAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAE;AAClC,gBAAA,kBAAkB,CAAC,WAAW,CAAC,GAAG,EAAE;YACxC;AACJ,QAAA,CAAC,CAAC;IACN;IAEA,4BAA4B,CAAC,QAAQ,EAAE,QAAQ,EAAA;AAC3C,QAAA,MAAM,SAAS,GAAG,IAAI,gBAAgB,EAAE;AACxC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC;AACvC,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAC7B,QAAO,IAAI;AACP,gBAAA;oBACI,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;;AAE5C,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,SAAS;IACpB;AAEA,IAAA,eAAe,CAAC,GAAG,EAAA;AACf,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC;AAClC,QAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,WAAA,CAAa,EACb,CAAA,gCAAA,CAAkC,CACrC;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACzC;AAEA,IAAA,gBAAgB,CAAC,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAA;QAC/D,MAAM,uBAAuB,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;YACxD,OAAO,GAAG,GAAG,IAAI;AACrB,QAAA,CAAC,CAAC;QACF,MAAM,wBAAwB,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AAC1D,YAAA,OAAO,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC;AACxC,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,CAAC,GAAG,uBAAuB,EAAE,GAAG,wBAAwB,CAAC;IACpE;AApPS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAiBxB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAChB,iBAAiB,wCAEjB,oCAAoC,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AApBvC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,cAFxB,MAAM,EAAA,CAAA,CAAA;;4FAET,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAHvC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAkBQ,MAAM;2BAAC,gBAAgB;;0BACvB,MAAM;2BAAC,iBAAiB;;0BAExB,MAAM;2BAAC,oCAAoC;;;ACE9C,MAAO,6BAA8B,SAAQ,eAAe,CAAA;AAoBhE,IAAA,WAAA,CACiD,eAAgC,EACtE,GAAgC,EACH,WAA4B,EAChE,cAA8B,EACgB,UAA4B,EACvD,MAAc,EACd,KAAqB,EACxC,QAAkB,EAClB,UAAqB,EAAA;AAEvB,QAAA,KAAK,CAAC,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,CAAC;QAVrD,IAAA,CAAA,eAAe,GAAf,eAAe;QACrD,IAAA,CAAA,GAAG,GAAH,GAAG;QAC0B,IAAA,CAAA,WAAW,GAAX,WAAW;QAG5B,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,KAAK,GAAL,KAAK;AAzBlB,QAAA,IAAA,CAAA,KAAK,GAAsB,IAAI,YAAY,EAAO;QAE5D,IAAA,CAAA,gCAAgC,GAAG,EAAE;QACrC,IAAA,CAAA,iCAAiC,GAAG,EAAE;QACtC,IAAA,CAAA,8BAA8B,GAAG,EAAE;QACnC,IAAA,CAAA,+BAA+B,GAAG,EAAE;QAEpC,IAAA,CAAA,QAAQ,GAAG,QAAQ;QACnB,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,kBAAkB,GAAG,KAAK;QAC1B,IAAA,CAAA,iBAAiB,GAAG,KAAK;QACzB,IAAA,CAAA,oBAAoB,GAAG,KAAK;QAE5B,IAAA,CAAA,QAAQ,GAAQ,EAAE;QAET,IAAA,CAAA,UAAU,GAAG,sBAAsB;QACnC,IAAA,CAAA,WAAW,GAAG,gBAAgB;AAyEvC,QAAA,IAAA,CAAA,qCAAqC,GAAG,QAAQ,CAAC,CAAC,MAAc,KAAK,IAAI,CAAC,GAAG,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,0BAA0B,EAAE,CAAC,EAAE,GAAG,CAAC;AACtK,QAAA,IAAA,CAAA,mCAAmC,GAAG,QAAQ,CAAC,CAAC,MAAc,KAAK,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,0BAA0B,EAAE,CAAC,EAAE,GAAG,CAAC;QAqNlK,IAAA,CAAA,QAAQ,GAAG,EAAE;IAjRb;IAES,QAAQ,GAAA;QACf,KAAK,CAAC,QAAQ,EAAE;AAChB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACjB,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,OAAW,KAAI;AAC5D,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;QACzB,CAAC,CAAC,CACL;QACD,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,gBAAgB,EAAE;QACxC;QACA,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;QACxC,IAAI,CAAC,sBAAsB,EAAE;QAC7B,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7C,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACjB,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AACjD,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB;YACF;AACA,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACtB,CAAC,CAAC,CACL;QACD,IAAI,CAAC,GAAG,CAAC,4BAA4B,GAAG,IAAI,CAAC,GAAG,CAAC,4BAA4B;QAC7E,IAAI,CAAC,GAAG,CAAC,0BAA0B,GAAG,IAAI,CAAC,GAAG,CAAC,0BAA0B;QACzE,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC1C;IAES,aAAa,GAAA;QACpB,KAAK,CAAC,aAAa,EAAE;QACrB,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,gBAAgB,EAAE;QACxC;QACA,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;QACxC,IAAI,CAAC,sBAAsB,EAAE;QAC7B,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7C,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACjB,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AACjD,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB;YACF;AACA,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACtB,CAAC,CAAC,CACL;QACD,IAAI,CAAC,GAAG,CAAC,4BAA4B,GAAG,IAAI,CAAC,GAAG,CAAC,4BAA4B;QAC7E,IAAI,CAAC,GAAG,CAAC,0BAA0B,GAAG,IAAI,CAAC,GAAG,CAAC,0BAA0B;QACzE,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC1C;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;IACjC;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC7C;IAKA,cAAc,GAAA;QACZ,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,IAAI,CAAC,QAAQ,CAAC;QACjD,MAAM,QAAQ,GAAG,EAAE;QACnB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,2BAA2B,EAAE,CAAC;QACrD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE,CAAC;QACnD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,4BAA4B,EAAE,CAAC;QACtD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,0BAA0B,EAAE,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAK;YAC9B,IAAI,CAAC,sBAAsB,EAAE;AAC/B,QAAA,CAAC,CAAC;IACJ;AAEA;;;AAGG;IACH,0BAA0B,GAAA;AACxB,QAAA,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,yBAAyB,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,iCAAiC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;AACpJ,QAAA,IAAI,CAAC,GAAG,CAAC,yBAAyB,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACnH,QAAA,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,uBAAuB,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;AAC9I,QAAA,IAAI,CAAC,GAAG,CAAC,uBAAuB,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACjH;IAEA,sBAAsB,GAAA;QACpB,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,GAAG,CAAC,qBAAqB,GAAG,EAAE;AACnC,YAAA,IAAI,CAAC,GAAG,CAAC,yBAAyB,GAAG,EAAE;AACvC,YAAA,IAAI,CAAC,GAAG,CAAC,oBAAoB,GAAG,EAAE;AAClC,YAAA,IAAI,CAAC,GAAG,CAAC,uBAAuB,GAAG,EAAE;YACrC;QACF;QACA,MAAM,yBAAyB,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,4BAA4B,CAAC;QAC/E,MAAM,uBAAuB,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC;AAC3E,QAAA,IAAI,CAAC,gCAAgC,GAAG,EAAE;AAC1C,QAAA,IAAI,CAAC,iCAAiC,GAAG,EAAE;AAC3C,QAAA,IAAI,CAAC,8BAA8B,GAAG,EAAE;AACxC,QAAA,IAAI,CAAC,+BAA+B,GAAG,EAAE;QACzC,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,IAAI,IAAG;YAC5C,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC3B,gBAAA,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3F;iBAAO;AACL,gBAAA,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC/D;AACF,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,IAAG;YAC1C,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC3B,gBAAA,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YACvF;iBAAO;AACL,gBAAA,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC7D;AACF,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,0BAA0B,EAAE;QAEjC,IAAI,CAAC,kBAAkB,EAAE;IAC3B;IAEA,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,GAAG,CAAC,mCAAmC,CAAC,IAAI,CAAC,gCAAgC,EAAE,IAAI,CAAC,iCAAiC,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACpJ,QAAA,IAAI,CAAC,GAAG,CAAC,kCAAkC,CAAC,IAAI,CAAC,8BAA8B,EAAE,IAAI,CAAC,+BAA+B,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACjJ;AAEA,IAAA,qBAAqB,CAAC,MAAM,EAAA;AAC1B,QAAA,QAAO,MAAM,CAAC,IAAI;AAChB,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,IAAI,EAAE;gBACX;AACF,YAAA,KAAK,OAAO;gBACV,IAAI,CAAC,gBAAgB,EAAE;gBACvB;AACF,YAAA,KAAK,aAAa;AAChB,gBAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI;gBAC3B;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,YAAY,EAAE;gBACnB;;IAEN;AAEA,IAAA,oBAAoB,CAAC,MAAM,EAAA;AACzB,QAAA,QAAQ,MAAM,CAAC,EAAE;AACf,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,IAAI,EAAE;gBACX;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,YAAY,EAAE;gBACnB;;IAEN;IAEA,MAAM,IAAI,CAAC,KAAM,EAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE;YAChC;QACF;AACA,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE;AAC9C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC/B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;AACvD,QAAA,IAAG,CAAC,OAAO,IAAI,CAAC,UAAU,EAAE;AAC1B,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,YAAA,CAAc,EACd,CAAA,uFAAA,CAAyF,CAC5F;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;YACrC;QACF;AAEA,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,IAAI,CAAC,uBAAuB,EAAE;AAC9B,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC3C,YAAA,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM;AACpD,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;YACxB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,IAAI,CAAC,QAAQ;AACrC,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;YAC/B;iBAAO;AACL,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;YAC/B;AACA,YAAA,IAAI,MAAM,EAAE,KAAK,EAAE;AACjB,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;gBAC3B,IAAI,CAAC,gBAAgB,EAAE;YACzB;AACF,QAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACxB,QAAA,CAAC,CAAC;IACJ;IAEA,uBAAuB,GAAA;QACrB,IAAI,CAAC,QAAQ,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,gCAAgC,EAAE,IAAI,CAAC,iCAAiC,EAAE,IAAI,CAAC,GAAG,CAAC,4BAA4B,CAAC;QAC/K,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,8BAA8B,EAAE,IAAI,CAAC,+BAA+B,EAAE,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC;IACzK;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;QAChB,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC/B,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI;QAC5B;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IAC7B;AAEA,IAAA,kBAAkB,CAAC,MAAM,EAAA;AACvB,QAAA,QAAQ,MAAM,CAAC,EAAE;AACf,YAAA,KAAK,KAAK;gBACR,IAAI,CAAC,cAAc,EAAE;gBACrB;AACF,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,eAAe,EAAE;gBACtB;;IAEN;IAEA,cAAc,GAAA;QACZ,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,gCAAgC,EAAE,IAAI,CAAC,iCAAiC,EAAE,IAAI,CAAC,GAAG,CAAC,4BAA4B,CAAC;QAC/J,IAAI,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;QAElD,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,8BAA8B,EAAE,IAAI,CAAC,+BAA+B,EAAE,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC;QAC/J,IAAI,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC;AAE9D,QAAA,MAAM,OAAO,GAAG,CAAA,UAAA,EAAa,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,QAAQ,GAAG,QAAQ,uBAAuB,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,QAAQ,GAAG,EAAE,CAAA,EAAA,EAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,GAAG,gBAAgB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAA,CAAE,CAAA,sBAAA,EAAyB,UAAU,CAAA,oBAAA,EAAuB,gBAAgB,GAAG;AAErV,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC;AACtC,QAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,WAAA,CAAa,EACb,CAAA,+BAAA,CAAiC,CACpC;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACvC;IAEA,eAAe,GAAA;QACb,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,gCAAgC,EAAE,IAAI,CAAC,iCAAiC,EAAE,IAAI,CAAC,GAAG,CAAC,4BAA4B,CAAC;QAC/J,IAAI,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;QAEnD,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,8BAA8B,EAAE,IAAI,CAAC,+BAA+B,EAAE,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC;QAC/J,IAAI,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC;AAE/D,QAAA,MAAM,OAAO,GAAG,CAAA,MAAA,EAAS,IAAI,CAAC,UAAU,CAAA;EAC1C,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,oBAAoB,GAAG,EAAE;;;AAG1B,kBAAA,EAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAA;AACnB,uBAAA,EAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,uBAAuB,UAAU,CAAA,iBAAA,EAAoB,gBAAgB,CAAA,aAAA,EAAgB,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK;AAEvJ,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC;AACtC,QAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,WAAA,CAAa,EACb,CAAA,gCAAA,CAAkC,CACrC;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACvC;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,sBAAsB,GAAG,0CAA0C,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA,CAAE,GAAG,EAAE,CAAC;IAC7I;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,MAAM,IAAI,GAAQ;AAChB,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE;AAC/B,YAAA,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,EAAE;YACrC,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,gCAAgC,EAAE,IAAI,CAAC,iCAAiC,EAAE,IAAI,CAAC,GAAG,CAAC,4BAA4B,CAAC;YAChK,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,8BAA8B,EAAE,IAAI,CAAC,+BAA+B,EAAE,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC;AACxJ,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ;AAChC,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;AACxB,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC;SACrB;AACD,QAAA,OAAO,IAAI;IACb;IAGA,IAAI,OAAO,CAAC,IAAI,EAAA;AACd,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACtB;IAEA,KAAK,GAAA;IACL;AAvTW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6BAA6B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAqB5B,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAAU,2BAAA,EAAA,EAAA,EAAA,KAAA,EAEhB,iBAAiB,wCAEjB,oCAAoC,EAAA,EAAA,EAAA,KAAA,EAAA5G,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAJ,IAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAzBrC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,6BAA6B,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAR3B;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,YAAY;AACrB,gBAAA,QAAQ,EAAE;AACb;AACJ,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpCL,qmPA2JA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAwB,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAc,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,aAAA,EAAA,UAAA,EAAA,cAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,aAAA,EAAA,OAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,oBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA4D,oBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,OAAA,EAAA,aAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,aAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAtD,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAuD,wBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAvE,oBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,cAAA,EAAA,eAAA,EAAA,YAAA,EAAA,WAAA,EAAA,cAAA,EAAA,aAAA,EAAA,+BAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,8BAAA,EAAA,+BAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAwE,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDpHa,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAZzC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,6BAA6B,EAAA,SAAA,EAG5B;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,YAAY;AACrB,4BAAA,QAAQ,EAAE;AACb;AACJ,qBAAA,EAAA,UAAA,EACW,KAAK,EAAA,QAAA,EAAA,qmPAAA,EAAA;;0BAuBd,MAAM;2BAAC,gBAAgB;;0BAEvB,MAAM;2BAAC,iBAAiB;;0BAExB,MAAM;2BAAC,oCAAoC;;sBAvB/C;;;AEzCH;;;;;;;;;;;;;;AAcE;AA2BI,MAAO,oCAAqC,SAAQ,oBAAoB,CAAA;AAqC1E,IAAA,WAAA,CAC8B,QAA8B,EACxD,aAAqC,EACF,WAA4B,EACtD,kBAAsC,EACvC,cAA8B,EAC9B,UAAqB,EACM,UAA4B,EAC5C,MAAc,EAAA;QAEjC,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,CAAC;QAPnC,IAAA,CAAA,WAAW,GAAX,WAAW;QACrC,IAAA,CAAA,kBAAkB,GAAlB,kBAAkB;QACnB,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,UAAU,GAAV,UAAU;QACiB,IAAA,CAAA,UAAU,GAAV,UAAU;QAC1B,IAAA,CAAA,MAAM,GAAN,MAAM;AA3CrB,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,cAAc;QAC7B,IAAA,CAAA,SAAS,GAAG,4BAA4B;QAE/C,IAAA,CAAA,WAAW,GAAG,EAAE;AAChB,QAAA,IAAA,CAAA,wBAAwB,GAAQ,IAAI,gBAAgB,EAAE;QAEtD,IAAA,CAAA,oBAAoB,GAAG,EAAE;QACzB,IAAA,CAAA,qBAAqB,GAAG,EAAE;QAC1B,IAAA,CAAA,wBAAwB,GAAG,EAAE;QAC7B,IAAA,CAAA,4BAA4B,GAAG,EAAE;QACjC,IAAA,CAAA,6BAA6B,GAAG,EAAE;QAElC,IAAA,CAAA,qBAAqB,GAAG,EAAE;QAC1B,IAAA,CAAA,sBAAsB,GAAG,EAAE;QAC3B,IAAA,CAAA,yBAAyB,GAAG,EAAE;QAC9B,IAAA,CAAA,6BAA6B,GAAG,EAAE;QAClC,IAAA,CAAA,8BAA8B,GAAG,EAAE;AAEnC,QAAA,IAAA,CAAA,aAAa,GAAQ;AACjB,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,EAAE,EAAE,EAAE;AACN,YAAA,SAAS,EAAE,EAAE;SAChB;AAEQ,QAAA,IAAA,CAAA,SAAS,GAAG;AACjB,YAAA,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAC;AAChC,YAAA,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAC;SACrC;AAEQ,QAAA,IAAA,CAAA,kBAAkB,GAAG;AAC1B,YAAA,EAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAC;AAC9C,YAAA,EAAC,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,mBAAmB,EAAC;SAC3D;QAED,IAAA,CAAA,YAAY,GAAG,8BAA8B;AAsC7C,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,QAAQ,KAA8B;YAC9C,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAC,CAAC;AAC3C,QAAA,CAAC;QA5BG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,SAAS,CAAC,OAAO,IAAG;AAClD,YAAA,IAAI,YAAY,EAAE,aAAa,EAAE,aAAa;AAC9C,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AACvB,gBAAA,QAAQ,MAAM,CAAC,QAAQ;AACnB,oBAAA,KAAK,iBAAiB;wBAClB,YAAY,GAAG,IAAI;wBACnB;AACJ,oBAAA,KAAK,cAAc;wBACf,aAAa,GAAG,IAAI;wBACpB;AACJ,oBAAA,KAAK,cAAc;wBACf,aAAa,GAAG,IAAI;wBACpB;;AAEZ,YAAA,CAAC,CAAC;YACF,IAAI,CAAC,YAAY,EAAE;AACf,gBAAA,IAAI,CAAC,4BAA4B,GAAG,EAAE;AACtC,gBAAA,IAAI,CAAC,6BAA6B,GAAG,EAAE;YAC3C;YACA,IAAI,CAAC,aAAa,EAAE;AAChB,gBAAA,IAAI,CAAC,6BAA6B,GAAG,EAAE;AACvC,gBAAA,IAAI,CAAC,8BAA8B,GAAG,EAAE;YAC5C;AACJ,QAAA,CAAC,CAAC;IACN;IAMA,gBAAgB,GAAA;AACZ,QAAA,MAAM,8BAA8B,GAAG;AACnC,YAAA,UAAU,EAAE,UAAU;SACzB;QACD,MAAM,IAAI,GAAG,IAAI;AACjB,QAAA,MAAM,gCAAgC,GAAG;AACrC,YAAA,UAAU,EAAE,WAAW;AACvB,YAAA,aAAa,EAAE,IAAI;YACnB,iBAAiB,EAAE,MAAK;gBACpB,OAAO,IAAI,CAAC,oBAAoB;YACpC,CAAC;YACD,kBAAkB,EAAE,MAAK;gBACrB,OAAO,IAAI,CAAC,qBAAqB;YACrC,CAAC;YACD,yBAAyB,EAAE,MAAK;gBAC5B,OAAO,IAAI,CAAC,4BAA4B;YAC5C,CAAC;YACD,0BAA0B,EAAE,MAAK;gBAC7B,OAAO,IAAI,CAAC,6BAA6B;YAC7C,CAAC;AACD,YAAA,yBAAyB,EAAE,CAAC,UAAU,KAAI;AACtC,gBAAA,IAAI,CAAC,4BAA4B,GAAG,UAAU;YAClD,CAAC;AACD,YAAA,0BAA0B,EAAE,CAAC,UAAU,KAAI;AACvC,gBAAA,IAAI,CAAC,6BAA6B,GAAG,UAAU;YACnD,CAAC;YACD,qBAAqB,EAAE,MAAK;gBACxB,OAAO,IAAI,CAAC,wBAAwB;YACxC;SACH;AACD,QAAA,MAAM,iCAAiC,GAAG;AACtC,YAAA,UAAU,EAAE,WAAW;AACvB,YAAA,aAAa,EAAE,IAAI;YACnB,iBAAiB,EAAE,MAAK;gBACpB,OAAO,IAAI,CAAC,qBAAqB;YACrC,CAAC;YACD,kBAAkB,EAAE,MAAK;gBACrB,OAAO,IAAI,CAAC,sBAAsB;YACtC,CAAC;YACD,yBAAyB,EAAE,MAAK;gBAC5B,OAAO,IAAI,CAAC,6BAA6B;YAC7C,CAAC;YACD,0BAA0B,EAAE,MAAK;gBAC7B,OAAO,IAAI,CAAC,8BAA8B;YAC9C,CAAC;AACD,YAAA,yBAAyB,EAAE,CAAC,UAAU,KAAI;AACtC,gBAAA,IAAI,CAAC,6BAA6B,GAAG,UAAU;YACnD,CAAC;AACD,YAAA,0BAA0B,EAAE,CAAC,UAAU,KAAI;AACvC,gBAAA,IAAI,CAAC,8BAA8B,GAAG,UAAU;YACpD,CAAC;YACD,qBAAqB,EAAE,MAAK;gBACxB,OAAO,IAAI,CAAC,yBAAyB;YACzC;SACH;AAED,QAAA,MAAM,6BAA6B,GAAG;AAClC,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE;gBACX,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAC;gBACxD,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE;AAC5D,aAAA;YACD,gBAAgB,EAAE,MAAK;gBACnB,OAAO,6BAA6B,CAAC,aAAa;YACtD;SACH;AAED,QAAA,MAAM,yBAAyB,GAAG;AAC9B,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE;gBACX,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;gBAClD,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;AACrD,aAAA;YACD,gBAAgB,EAAE,MAAK;gBACnB,OAAO,yBAAyB,CAAC,aAAa;YAClD;SACH;QAED,OAAO;AACH,YAAA;AACI,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,UAAU,EAAE,MAAM;AAClB,gBAAA,eAAe,EAAE,2BAA2B;gBAC5C,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;AACjD,gBAAA,YAAY,EAAE,sBAAsB;AACpC,gBAAA,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AAC/C,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;AACA,oBAAA,IAAI,CAAC,WAAW,GAAG,UAAU;oBAC7B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,KAAK,EAAE,GAAG;AACb,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,cAAc;AACrB,gBAAA,KAAK,EAAE,cAAc;AACrB,gBAAA,UAAU,EAAE,oBAAoB;AAChC,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,iCAAiC;AACxD,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;AACA,oBAAA,IAAI,CAAC,WAAW,GAAG,EAAE;oBACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;gBACf,YAAY,EAAE,IAAI,CAAC,aAAa;AAChC,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,MAAM,EAAE,KAAK;AAChB,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,iBAAiB;AACxB,gBAAA,KAAK,EAAE,iBAAiB;AACxB,gBAAA,UAAU,EAAE,mBAAmB;AAC/B,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,gCAAgC;AACvD,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;AACA,oBAAA,IAAI,CAAC,WAAW,GAAG,EAAE;oBACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;gBACf,YAAY,EAAE,IAAI,CAAC,aAAa;AAChC,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,MAAM,EAAE,KAAK;AAChB,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,UAAU,EAAE,UAAU;AACtB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,6BAA6B;AACpD,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;AACA,oBAAA,IAAI,CAAC,WAAW,GAAG,EAAE;oBACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,YAAY,EAAE,CAAC,GAAG,KAAI;AAClB,oBAAA,OAAO,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,GAAG,QAAQ,GAAG,QAAQ;gBAC/D,CAAC;AACD,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,KAAK,EAAE,GAAG;AACb,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,UAAU,EAAE,YAAY;AACxB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,8BAA8B;gBACrD,cAAc,EAAE,IAAI,CAAC,kBAAkB;AACvC,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,QAAQ,EAAE,IAAI;gBACd,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;AACA,oBAAA,IAAI,CAAC,WAAW,GAAG,EAAE;oBACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,CAAC;AACD,gBAAA,IAAI,EAAE;AACT,aAAA;AACD,YAAA,IAAI,CAAC;SACR;IACL;AAEA,IAAA,OAAO,CAAC,OAAqB,EAAE,IAAU,EAAE,IAAU,EAAA;;AAEjD,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI;AAC3C,QAAA,OAAO,KAAK,CAAC,YAAY,CAAC,8BAA8B,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI;AAC/E,aAAA,IAAI,CAAC,CAAC,OAAY,KAAI;AACnB,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AACpC,QAAA,CAAC,CAAC;IACV;AAEQ,IAAA,WAAW,CAAC,OAAY,EAAA;QAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;;YAEzB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;QACjD;QACA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE;YACrC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,UAAU;QACzD;AACA,QAAA,OAAO,OAAO;IAClB;AAEQ,IAAA,gBAAgB,CAAC,OAAY,EAAA;QACjC,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;YAC5B,GAAG,CAAC,UAAU,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACrC,YAAA,OAAO,GAAG;AACd,QAAA,CAAC,CAAC;IACN;IAEO,2BAA2B,GAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,6BAA6B,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC/E,YAAA,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,IAAI;AACvC,YAAA,OAAO,MAAM;AACjB,QAAA,CAAC,CAAC;IACN;IAEO,yBAAyB,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;YAC5D,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,KAAI;gBAChD,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE;gBACzD,OAAO,OAAO,CAAC,IAAI;AACvB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,sBAAsB,GAAG,eAAe;AAC7C,YAAA,OAAO,eAAe;AAC1B,QAAA,CAAC,CAAC;IACN;IAEO,wBAAwB,GAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;YAChE,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;gBAC/C,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,EAAE;gBACvD,OAAO,MAAM,CAAC,IAAI;AACtB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,qBAAqB,GAAG,eAAe;AAC5C,YAAA,OAAO,eAAe;AAC1B,QAAA,CAAC,CAAC;IACN;IAEO,wBAAwB,GAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,yBAAyB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC3E,YAAA,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,IAAI;AACxC,YAAA,OAAO,MAAM;AACjB,QAAA,CAAC,CAAC;IACN;AAGO,IAAA,UAAU,CAAC,IAAU,EAAA;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,8BAA8B;QAC/C,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI;AACpC,YAAA,IAAI,CAAC,wBAAwB,CAAC,MAAM,GAAG,EAAE;AACzC,YAAA,KAAK,CAAC,IAAI,CAAC,wBAAwB,EAAE,QAAQ,CAAC;QAClD;aAAO;AACH,YAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,gBAAgB,EAAE;QAC1D;AACA,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;IAC7B;AAlVS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oCAAoC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAsCjC,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAAnG,sBAAA,EAAA,EAAA,EAAA,KAAA,EAEhB,iBAAiB,gGAIjB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAAF,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AA5CpB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oCAAoC,cAFjC,MAAM,EAAA,CAAA,CAAA;;4FAET,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBAHhD,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAuCQ,MAAM;2BAAC,gBAAgB;;0BAEvB,MAAM;2BAAC,iBAAiB;;0BAIxB,MAAM;2BAAC,iBAAiB;;;ACrFjC;;;;;;;;;;;;;;AAcE;AAiBI,MAAO,sCAAuC,SAAQ,iBAAiB,CAAA;IAS3E,WAAA,CACoB,GAAyC,EACzD,aAAqC,EACrC,UAAqB,EACb,QAAwB,EAChC,aAAmC,EACA,UAA4B,EAAA;QAEjE,KAAK,CAAC,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC;QAP9C,IAAA,CAAA,GAAG,GAAH,GAAG;QAGX,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAEmB,IAAA,CAAA,UAAU,GAAV,UAAU;QAbjD,IAAA,CAAA,oBAAoB,GAAU,EAAE;QAChC,IAAA,CAAA,qBAAqB,GAAU,EAAE;QACjC,IAAA,CAAA,eAAe,GAAG,KAAK;QAGvB,IAAA,CAAA,KAAK,GAAG,8BAA8B;AAWpC,QAAA,IAAI,QAAQ,GAAG,SAAS,CAAC,QAAQ,IAAI,OAAO;AAC5C,QAAA,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE;IACnC;IAES,QAAQ,GAAA;QACf,KAAK,CAAC,QAAQ,EAAE;QAChB,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;IAC/C;AAEA,IAAA,mBAAmB,CAAC,MAAc,EAAA;QAChC,QAAO,MAAM;AACX,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,EAAE;AACzB,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACF,YAAA,KAAK,QAAQ;gBACX,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;oBAChD,OAAO,GAAG,CAAC,QAAQ;AACrB,gBAAA,CAAC,CAAC;AACF,gBAAA,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,GAAG,8BAA8B,GAAG,4BAA4B;AACtG,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,KAAK,CAAC;gBACzC;YACF;;IAEJ;AAEA,IAAA,WAAW,CAAC,KAAU,EAAA;QACpB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;AAChD,QAAA,QAAO,KAAK,EAAE,MAAM;AAClB,YAAA,KAAK,WAAW;AAChB,YAAA,KAAK,YAAY;AACf,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC5B;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,UAAU;gBACjC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpC;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC3B;AACF,YAAA,KAAK,cAAc;gBACjB,IAAI,CAAC,gBAAgB,EAAE;gBACvB;AACF,YAAA,KAAK,mBAAmB;gBACtB,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC1C;AACF,YAAA;gBACE;;IAEN;IAEA,eAAe,CAAC,MAAc,EAAE,IAAS,EAAA;AACvC,QAAA,IAAI,CAAC,UAAU,EAAE,sBAAsB,EAAE,IAAI,CAAC;YAC5C,MAAM;AACN,YAAA,IAAI,EAAE,4BAA4B;YAClC,IAAI;AACJ,YAAA,IAAI,EAAC;AACN,SAAA,CAAC;IACJ;IACA,iBAAiB,GAAA;QACf,IAAI,CAAC,GAAG,CAAC,2BAA2B,EAAE,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AAC1D,YAAA,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,IAAI;AACzC,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AACvD,YAAA,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,IAAI;AAC1C,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE;AACpC,QAAA,IAAI,CAAC,GAAG,CAAC,wBAAwB,EAAE;IACrC;AAEA,IAAA,UAAU,CAAC,IAAS,EAAA;QAClB,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,8BAA8B,CAAC;IAC7D;AAEA,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,KAAK;AAC9B,QAAA,IAAG,KAAK,EAAE,OAAO,EAAE;YACjB,IAAI,CAAC,WAAW,EAAE;QACpB;IACF;AAEA,IAAA,WAAW,CAAC,KAAK,EAAA;AACf,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;IAC9B;AAEA,IAAA,mBAAmB,CAAC,KAAK,EAAA;AACvB,QAAA,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,KAAK;IAC9B;AAhHW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sCAAsC,2LAerC,iBAAiB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAflB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sCAAsC,yHC/BnD,+jCA4BA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA8B,uBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,WAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,cAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAqB,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDGa,sCAAsC,EAAA,UAAA,EAAA,CAAA;kBANlD,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uCAAuC,cAGrC,KAAK,EAAA,QAAA,EAAA,+jCAAA,EAAA;;0BAiBd,MAAM;2BAAC,iBAAiB;;;ME9ClB,uBAAuB,CAAA;AAApC,IAAA,WAAA,GAAA;QACI,IAAA,CAAA,IAAI,GAAG,EAAE;QACT,IAAA,CAAA,eAAe,GAAU,EAAE;QAC3B,IAAA,CAAA,YAAY,GAAU,EAAE;QACxB,IAAA,CAAA,QAAQ,GAAG,OAAO;QAClB,IAAA,CAAA,IAAI,GAAQ,EAAE;IAClB;AAAC;AAAA;;MCMY,4CAA4C,GAAG,IAAI,cAAc,CAAM,8CAA8C;MAKrH,kCAAkC,CAAA;AAgB3C,IAAA,WAAA,CACqC,eAAgC,EAC9B,WAA4B,EACvD,cAA8B,EACuB,UAA4B,EAAA;QAHxD,IAAA,CAAA,eAAe,GAAf,eAAe;QACb,IAAA,CAAA,WAAW,GAAX,WAAW;QACtC,IAAA,CAAA,cAAc,GAAd,cAAc;QACuC,IAAA,CAAA,UAAU,GAAV,UAAU;QAlB3E,IAAA,CAAA,kBAAkB,GAAQ,EAAE;QAC5B,IAAA,CAAA,sBAAsB,GAAQ,EAAE;QAChC,IAAA,CAAA,qBAAqB,GAAQ,EAAE;QAC/B,IAAA,CAAA,yBAAyB,GAAQ,EAAE;QAEnC,IAAA,CAAA,4BAA4B,GAAQ,EAAE;QACtC,IAAA,CAAA,yBAAyB,GAAQ,EAAE;QAEnC,IAAA,CAAA,sBAAsB,GAAQ,EAAE;QAChC,IAAA,CAAA,yBAAyB,GAAQ,EAAE;QAEnC,IAAA,CAAA,wBAAwB,GAAQ,EAAE;QAClC,IAAA,CAAA,qBAAqB,GAAQ,EAAE;QAgGvB,IAAA,CAAA,+BAA+B,GAAG,CAAC;QAsBnC,IAAA,CAAA,kCAAkC,GAAG,CAAC;IA/G3C;AAEH,IAAA,IAAI,CAAC,QAAQ,EAAA;QACT,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,GAAQ,IAAI,CAAC,4BAA4B,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACvE,QAAA,MAAM,GAAG,GAAG,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AACnH,QAAA,OAAO,GAAG,CAAC,8BAA8B,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,MAAW,KAAI;YACrF,MAAM,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,QAAQ,CAAC,EAAE;YAC1C,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,8BAA8B,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,KAAI;gBACvG,OAAO,UAAU,CAAC,IAAI;AAC1B,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,eAAoB,KAAI;AACvE,gBAAA,MAAM,SAAS,GAAG;AACd,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;iBAC1B;AACD,gBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,mBAAA,EAAsB,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA,CAAE,EACxD,CAAA,aAAA,EAAgB,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA,qBAAA,EAAwB,QAAQ,CAAC,IAAI,CAAA,CAAE,CAC1F;AACD,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,gBAAA,OAAO,SAAS;AACpB,YAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAI;AAChB,gBAAA,OAAO,KAAK;AAChB,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAI;YACd,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC;YAC3D,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,MAAA,EAAS,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAA,2BAAA,CAA6B,EACxE,YAAY,CACf;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,YAAA,MAAM,IAAI;AACd,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,mCAAmC,CAAC,cAAc,EAAE,eAAe,EAAE,QAAQ,GAAG,OAAO,EAAA;AACnF,QAAA,IAAI,CAAC,yBAAyB,GAAG,EAAE;AACnC,QAAA,IAAI,OAAO,CAAC,cAAc,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,yBAAyB,GAAG,CAAC,GAAG,eAAe,CAAC;YACrD;QACJ;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,cAAc,EAAE,QAAQ,CAAC;AACxE,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc;AAC9C,QAAA,MAAM,CAAC,QAAQ,GAAG,KAAK;AACvB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AACvE,YAAA,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,IAAI;AACxC,YAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;gBACpE,OAAO,GAAG,CAAC,IAAI;AACnB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,yBAAyB,GAAG,CAAC,GAAG,IAAI,CAAC,yBAAyB,EAAE,GAAG,eAAe,CAAC;YACxF,IAAI,CAAC,yBAAyB,GAAG,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC;YACvE,IAAI,CAAC,yBAAyB,GAAG,UAAU,CAAC,IAAI,CAAC,yBAAyB,CAAC;AAC3E,YAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,KAAK,SAAS,CAAC;AACtG,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,gCAAgC,CAAC,cAAc,EAAE,eAAe,EAAE,QAAQ,GAAG,OAAO,EAAA;AAChF,QAAA,IAAI,CAAC,sBAAsB,GAAG,EAAE;AAChC,QAAA,IAAI,OAAO,CAAC,cAAc,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,sBAAsB,GAAG,CAAC,GAAG,eAAe,CAAC;YAClD;QACJ;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,cAAc,EAAE,QAAQ,CAAC;AACxE,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc;AAC9C,QAAA,MAAM,CAAC,QAAQ,GAAG,KAAK;AACvB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AACnE,YAAA,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,IAAI;AACrC,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;gBAC9D,OAAO,GAAG,CAAC,IAAI;AACnB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,sBAAsB,GAAG,CAAC,GAAG,IAAI,CAAC,sBAAsB,EAAE,GAAG,eAAe,CAAC;YAClF,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC;YACjE,IAAI,CAAC,sBAAsB,GAAG,UAAU,CAAC,IAAI,CAAC,sBAAsB,CAAC;AACrE,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,KAAK,SAAS,CAAC;AAChG,QAAA,CAAC,CAAC;IACN;IAEO,2BAA2B,GAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,6BAA6B,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC/E,YAAA,IAAI,CAAC,wBAAwB,GAAG,MAAM,CAAC,IAAI;AAC3C,YAAA,OAAO,MAAM;AACjB,QAAA,CAAC,CAAC;IACN;AAIO,IAAA,yBAAyB,CAAC,MAAe,EAAA;AAC5C,QAAA,MAAM,SAAS,GAAG,EAAE,IAAI,CAAC,+BAA+B;AACxD,QAAA,MAAM,MAAM,GAAG,EAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAC;QACxG,MAAM,OAAO,GAAG,EAAE;AAClB,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAClB,OAAO,CAAC,IAAI,CAAC,EAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAC,CAAC;QAC5G;AACA,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACrE,YAAA,IAAI,SAAS,KAAK,IAAI,CAAC,+BAA+B,EAAE;gBACpD,OAAO,IAAI,CAAC,sBAAsB;YACtC;YACA,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,KAAI;gBAChD,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE;gBACzD,OAAO,OAAO,CAAC,IAAI;AACvB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,sBAAsB,GAAG,eAAe;AAC7C,YAAA,OAAO,eAAe;AAC1B,QAAA,CAAC,CAAC;IACN;AAIO,IAAA,4BAA4B,CAAC,MAAe,EAAA;AAC/C,QAAA,MAAM,SAAS,GAAG,EAAE,IAAI,CAAC,kCAAkC;AAC3D,QAAA,MAAM,MAAM,GAAG,EAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAC;QACxG,MAAM,OAAO,GAAG,EAAE;AAClB,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAClB,OAAO,CAAC,IAAI,CAAC,EAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAC,CAAC;QAC5G;AACA,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACzE,YAAA,IAAI,SAAS,KAAK,IAAI,CAAC,kCAAkC,EAAE;gBACvD,OAAO,IAAI,CAAC,yBAAyB;YACzC;YACA,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;gBAC/C,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,EAAE;gBAC1D,OAAO,MAAM,CAAC,IAAI;AACtB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,yBAAyB,GAAG,eAAe;AAChD,YAAA,OAAO,eAAe;AAC1B,QAAA,CAAC,CAAC;IACN;IAEO,wBAAwB,GAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,yBAAyB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC3E,YAAA,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,IAAI;AACxC,YAAA,OAAO,MAAM;AACjB,QAAA,CAAC,CAAC;IACN;AAEA;;;;AAIG;AACI,IAAA,yBAAyB,CAAC,QAAa,EAAA;QAC1C,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,sBAAsB,EAAE,IAAI,CAAC,4BAA4B,CAAC;QAC7F,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,mBAAmB,EAAE,IAAI,CAAC,yBAAyB,CAAC;IAC3F;IAEQ,mBAAmB,CAAC,QAAa,EAAE,kBAAuB,EAAA;QAC9D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAC1B;QACJ;AACA,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAU,KAAI;AAC5B,YAAA,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI;AACxB,YAAA,MAAM,EAAE,GAAG,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS;YACzF,IAAI,CAAC,EAAE,EAAE;gBACL;YACJ;AACA,YAAA,IAAI,WAAW,GAAG,KAAK,EAAE,IAAI;YAC7B,IAAI,CAAC,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;gBACjD;YACJ;YACA,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AAC/B,gBAAA,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YACtC;AACA,YAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAE;AAClC,gBAAA,kBAAkB,CAAC,WAAW,CAAC,GAAG,EAAE;YACxC;AACJ,QAAA,CAAC,CAAC;IACN;IAEA,4BAA4B,CAAC,QAAQ,EAAE,QAAQ,EAAA;AAC3C,QAAA,MAAM,SAAS,GAAG,IAAI,uBAAuB,EAAE;AAC/C,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC;AACvC,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAC7B,QAAO,IAAI;AACP,gBAAA;oBACI,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;;AAE5C,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,SAAS;IACpB;AAEA,IAAA,eAAe,CAAC,GAAG,EAAA;AACf,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC;AAClC,QAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,WAAA,CAAa,EACb,CAAA,gCAAA,CAAkC,CACrC;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACzC;AAEA,IAAA,gBAAgB,CAAC,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAA;QAC/D,MAAM,uBAAuB,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;YACxD,OAAO,GAAG,GAAG,IAAI;AACrB,QAAA,CAAC,CAAC;QACF,MAAM,wBAAwB,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AAC1D,YAAA,OAAO,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC;AACxC,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,CAAC,GAAG,uBAAuB,EAAE,GAAG,wBAAwB,CAAC;IACpE;AAjOS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kCAAkC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAiB/B,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAChB,iBAAiB,wCAEjB,4CAA4C,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AApB/C,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kCAAkC,cAF/B,MAAM,EAAA,CAAA,CAAA;;4FAET,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAH9C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAkBQ,MAAM;2BAAC,gBAAgB;;0BACvB,MAAM;2BAAC,iBAAiB;;0BAExB,MAAM;2BAAC,4CAA4C;;;ACEtD,MAAO,oCAAqC,SAAQ,eAAe,CAAA;AAmBvE,IAAA,WAAA,CACiD,eAAgC,EACtE,GAAuC,EACV,WAA4B,EAChE,cAA8B,EACwB,UAA4B,EAC/D,MAAc,EACd,KAAqB,EACxC,QAAkB,EAClB,UAAqB,EAAA;AAEvB,QAAA,KAAK,CAAC,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,CAAC;QAVrD,IAAA,CAAA,eAAe,GAAf,eAAe;QACrD,IAAA,CAAA,GAAG,GAAH,GAAG;QAC0B,IAAA,CAAA,WAAW,GAAX,WAAW;QAG5B,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,KAAK,GAAL,KAAK;AAxBlB,QAAA,IAAA,CAAA,KAAK,GAAsB,IAAI,YAAY,EAAO;QAE5D,IAAA,CAAA,gCAAgC,GAAG,EAAE;QACrC,IAAA,CAAA,iCAAiC,GAAG,EAAE;QACtC,IAAA,CAAA,6BAA6B,GAAG,EAAE;QAClC,IAAA,CAAA,8BAA8B,GAAG,EAAE;QAEnC,IAAA,CAAA,QAAQ,GAAG,QAAQ;QACnB,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,kBAAkB,GAAG,KAAK;QAC1B,IAAA,CAAA,eAAe,GAAG,KAAK;QAEvB,IAAA,CAAA,QAAQ,GAAQ,EAAE;QAET,IAAA,CAAA,UAAU,GAAG,8BAA8B;QAC3C,IAAA,CAAA,WAAW,GAAG,uBAAuB;AAyE9C,QAAA,IAAA,CAAA,qCAAqC,GAAG,QAAQ,CAAC,CAAC,MAAc,KAAK,IAAI,CAAC,GAAG,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,0BAA0B,EAAE,CAAC,EAAE,GAAG,CAAC;AACtK,QAAA,IAAA,CAAA,kCAAkC,GAAG,QAAQ,CAAC,CAAC,MAAc,KAAK,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,0BAA0B,EAAE,CAAC,EAAE,GAAG,CAAC;QAmNhK,IAAA,CAAA,QAAQ,GAAG,EAAE;IA/Qb;IAES,QAAQ,GAAA;QACf,KAAK,CAAC,QAAQ,EAAE;AAChB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACjB,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,OAAW,KAAI;AAC5D,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;QACzB,CAAC,CAAC,CACL;QACD,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,uBAAuB,EAAE;QAC/C;QACA,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;QACxC,IAAI,CAAC,sBAAsB,EAAE;QAC7B,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7C,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACjB,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AACjD,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB;YACF;AACA,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACtB,CAAC,CAAC,CACL;QACD,IAAI,CAAC,GAAG,CAAC,4BAA4B,GAAG,IAAI,CAAC,GAAG,CAAC,4BAA4B;QAC7E,IAAI,CAAC,GAAG,CAAC,yBAAyB,GAAG,IAAI,CAAC,GAAG,CAAC,yBAAyB;QACvE,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC1C;IAES,aAAa,GAAA;QACpB,KAAK,CAAC,aAAa,EAAE;QACrB,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,uBAAuB,EAAE;QAC/C;QACA,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;QACxC,IAAI,CAAC,sBAAsB,EAAE;QAC7B,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7C,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACjB,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AACjD,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB;YACF;AACA,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACtB,CAAC,CAAC,CACL;QACD,IAAI,CAAC,GAAG,CAAC,4BAA4B,GAAG,IAAI,CAAC,GAAG,CAAC,4BAA4B;QAC7E,IAAI,CAAC,GAAG,CAAC,yBAAyB,GAAG,IAAI,CAAC,GAAG,CAAC,yBAAyB;QACvE,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC1C;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;IACjC;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC7C;IAKA,cAAc,GAAA;QACZ,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,IAAI,CAAC,QAAQ,CAAC;QACjD,MAAM,QAAQ,GAAG,EAAE;QACnB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,2BAA2B,EAAE,CAAC;QACrD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC;QAClD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,4BAA4B,EAAE,CAAC;QACtD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAK;YAC9B,IAAI,CAAC,sBAAsB,EAAE;AAC/B,QAAA,CAAC,CAAC;IACJ;AAEA;;;AAGG;IACH,0BAA0B,GAAA;AACxB,QAAA,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,yBAAyB,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,iCAAiC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;AACpJ,QAAA,IAAI,CAAC,GAAG,CAAC,yBAAyB,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACnH,QAAA,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,sBAAsB,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;AAC3I,QAAA,IAAI,CAAC,GAAG,CAAC,sBAAsB,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/G;IAEA,sBAAsB,GAAA;QACpB,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,GAAG,CAAC,qBAAqB,GAAG,EAAE;AACnC,YAAA,IAAI,CAAC,GAAG,CAAC,yBAAyB,GAAG,EAAE;AACvC,YAAA,IAAI,CAAC,GAAG,CAAC,kBAAkB,GAAG,EAAE;AAChC,YAAA,IAAI,CAAC,GAAG,CAAC,sBAAsB,GAAG,EAAE;YACpC;QACF;QACA,MAAM,yBAAyB,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,4BAA4B,CAAC;QAC/E,MAAM,sBAAsB,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC;AACzE,QAAA,IAAI,CAAC,gCAAgC,GAAG,EAAE;AAC1C,QAAA,IAAI,CAAC,iCAAiC,GAAG,EAAE;AAC3C,QAAA,IAAI,CAAC,6BAA6B,GAAG,EAAE;AACvC,QAAA,IAAI,CAAC,8BAA8B,GAAG,EAAE;QACxC,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,IAAI,IAAG;YAC5C,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC3B,gBAAA,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3F;iBAAO;AACL,gBAAA,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC/D;AACF,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,IAAG;YACzC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC3B,gBAAA,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YACrF;iBAAO;AACL,gBAAA,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC5D;AACF,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,0BAA0B,EAAE;QACjC,IAAI,CAAC,kBAAkB,EAAE;IAC3B;AAEA,IAAA,qBAAqB,CAAC,MAAM,EAAA;AAC1B,QAAA,QAAO,MAAM,CAAC,IAAI;AAChB,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,IAAI,EAAE;gBACX;AACF,YAAA,KAAK,OAAO;gBACV,IAAI,CAAC,gBAAgB,EAAE;gBACvB;AACF,YAAA,KAAK,aAAa;AAChB,gBAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI;gBAC3B;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,YAAY,EAAE;gBACnB;;IAEN;AAEA,IAAA,oBAAoB,CAAC,MAAM,EAAA;AACzB,QAAA,QAAQ,MAAM,CAAC,EAAE;AACf,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,IAAI,EAAE;gBACX;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,YAAY,EAAE;gBACnB;;IAEN;IAEA,MAAM,IAAI,CAAC,KAAM,EAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE;YAChC;QACF;AACA,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE;AAC9C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC/B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;AACvD,QAAA,IAAG,CAAC,OAAO,IAAI,CAAC,UAAU,EAAE;AAC1B,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,YAAA,CAAc,EACd,CAAA,+FAAA,CAAiG,CACpG;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;YACrC;QACF;AAEA,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,IAAI,CAAC,uBAAuB,EAAE;AAC9B,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC3C,YAAA,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM;AACpD,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;YACxB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,IAAI,CAAC,QAAQ;AACrC,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;YAC/B;iBAAO;AACL,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;YAC/B;AACA,YAAA,IAAI,MAAM,EAAE,KAAK,EAAE;AACjB,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;gBAC3B,IAAI,CAAC,gBAAgB,EAAE;YACzB;AACF,QAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACxB,QAAA,CAAC,CAAC;IACJ;IAEA,uBAAuB,GAAA;QACrB,IAAI,CAAC,QAAQ,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,gCAAgC,EAAE,IAAI,CAAC,iCAAiC,EAAE,IAAI,CAAC,GAAG,CAAC,4BAA4B,CAAC;QAC/K,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,6BAA6B,EAAE,IAAI,CAAC,8BAA8B,EAAE,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC;IACrK;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;QAChB,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC/B,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI;QAC5B;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IAC7B;AAEA,IAAA,kBAAkB,CAAC,MAAM,EAAA;AACvB,QAAA,QAAQ,MAAM,CAAC,EAAE;AACf,YAAA,KAAK,KAAK;gBACR,IAAI,CAAC,cAAc,EAAE;gBACrB;AACF,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,eAAe,EAAE;gBACtB;;IAEN;IAEA,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,GAAG,CAAC,mCAAmC,CAAC,IAAI,CAAC,gCAAgC,EAAE,IAAI,CAAC,iCAAiC,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACpJ,QAAA,IAAI,CAAC,GAAG,CAAC,gCAAgC,CAAC,IAAI,CAAC,6BAA6B,EAAE,IAAI,CAAC,8BAA8B,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7I;IAEA,cAAc,GAAA;QACZ,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,gCAAgC,EAAE,IAAI,CAAC,iCAAiC,EAAE,IAAI,CAAC,GAAG,CAAC,4BAA4B,CAAC;QAC/J,IAAI,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;QAElD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,6BAA6B,EAAE,IAAI,CAAC,8BAA8B,EAAE,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC;QAC3J,IAAI,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC;AAE5D,QAAA,MAAM,OAAO,GAAG,CAAA,UAAA,EAAa,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,QAAQ,GAAG,QAAQ,+BAA+B,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,QAAQ,GAAG,EAAE,CAAA,EAAA,EAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,GAAG,gBAAgB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAA,CAAE,CAAA,sBAAA,EAAyB,UAAU,CAAA,mBAAA,EAAsB,eAAe,GAAG;AAE3V,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC;AACtC,QAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,WAAA,CAAa,EACb,CAAA,+BAAA,CAAiC,CACpC;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACvC;IAEA,eAAe,GAAA;QACb,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,gCAAgC,EAAE,IAAI,CAAC,iCAAiC,EAAE,IAAI,CAAC,GAAG,CAAC,4BAA4B,CAAC;QAC/J,IAAI,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;QAEnD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,6BAA6B,EAAE,IAAI,CAAC,8BAA8B,EAAE,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC;QAC3J,IAAI,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC;AAE7D,QAAA,MAAM,OAAO,GAAG,CAAA,MAAA,EAAS,IAAI,CAAC,UAAU,CAAA;EAC1C,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,oBAAoB,GAAG,EAAE;;;AAG1B,kBAAA,EAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAA;AACnB,uBAAA,EAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,uBAAuB,UAAU,CAAA,gBAAA,EAAmB,eAAe,CAAA,aAAA,EAAgB,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK;AAErJ,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC;AACtC,QAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,WAAA,CAAa,EACb,CAAA,gCAAA,CAAkC,CACrC;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACvC;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,sBAAsB,GAAG,kDAAkD,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA,CAAE,GAAG,EAAE,CAAC;IACrJ;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,MAAM,IAAI,GAAQ;AAChB,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE;AAC/B,YAAA,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,EAAE;YACrC,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,gCAAgC,EAAE,IAAI,CAAC,iCAAiC,EAAE,IAAI,CAAC,GAAG,CAAC,4BAA4B,CAAC;YAChK,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,6BAA6B,EAAE,IAAI,CAAC,8BAA8B,EAAE,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC;AACpJ,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ;AACjC,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE;SACtB;AACD,QAAA,OAAO,IAAI;IACb;IAGA,IAAI,OAAO,CAAC,IAAI,EAAA;AACd,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACtB;IAEA,KAAK,GAAA;IACL;AApTW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oCAAoC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAoBnC,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAA4D,kCAAA,EAAA,EAAA,EAAA,KAAA,EAEhB,iBAAiB,wCAEjB,4CAA4C,EAAA,EAAA,EAAA,KAAA,EAAA7G,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAJ,IAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAxB7C,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oCAAoC,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EARlC;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,YAAY;AACrB,gBAAA,QAAQ,EAAE;AACb;AACJ,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpCL,ooPA2JA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAwB,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAc,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,aAAA,EAAA,UAAA,EAAA,cAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,aAAA,EAAA,OAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,oBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA4D,oBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,OAAA,EAAA,aAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,aAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAtD,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAuD,wBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAvE,oBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,cAAA,EAAA,eAAA,EAAA,YAAA,EAAA,WAAA,EAAA,cAAA,EAAA,aAAA,EAAA,+BAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,8BAAA,EAAA,+BAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAwE,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDpHa,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBAZhD,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qCAAqC,EAAA,SAAA,EAGpC;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,YAAY;AACrB,4BAAA,QAAQ,EAAE;AACb;AACJ,qBAAA,EAAA,UAAA,EACW,KAAK,EAAA,QAAA,EAAA,ooPAAA,EAAA;;0BAsBd,MAAM;2BAAC,gBAAgB;;0BAEvB,MAAM;2BAAC,iBAAiB;;0BAExB,MAAM;2BAAC,4CAA4C;;sBAtBvD;;;AEzCH;;;;;;;;;;;;;;AAcE;AAsBI,MAAO,sBAAuB,SAAQ,oBAAoB,CAAA;IAuB5D,WAAA,CACY,SAAwB,EACN,QAAyB,EACnD,aAAqC,EACrC,kBAAsC,EACX,UAA4B,EACpC,MAAc,EAAA;QAEjC,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,CAAC;QAP9D,IAAA,CAAA,SAAS,GAAT,SAAS;QAKE,IAAA,CAAA,MAAM,GAAN,MAAM;AA3BpB,QAAA,IAAA,CAAA,cAAc,GAAQ;AAC3B,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,QAAQ,EAAE,SAAS;AACnB,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,KAAK,EAAE;SACV;AAEO,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,cAAc;QAEpC,IAAA,CAAA,YAAY,GAAG,aAAa;QAC5B,IAAA,CAAA,cAAc,GAAQ,EAAE;QACxB,IAAA,CAAA,SAAS,GAAG,EAAE;AAEL,QAAA,IAAA,CAAA,SAAS,GAAG;AACjB,YAAA,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAC;AAChC,YAAA,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAC;SACrC;AA4JD,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,QAAQ,KAA8B;YAC9C,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAC,CAAC;AAC3C,QAAA,CAAC;IAnJD;IAEA,gBAAgB,GAAA;AAEZ,QAAA,MAAM,YAAY,GAAG,CAAC,GAAG,KAAI;AACzB,YAAA,OAAO,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI;AACtC,QAAA,CAAC;AAED,QAAA,MAAM,8BAA8B,GAAG;AACnC,YAAA,UAAU,EAAE,UAAU;SACzB;QACD,OAAO;AACH,YAAA;AACI,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,UAAU,EAAE,SAAS;AACrB,gBAAA,eAAe,EAAE,2BAA2B;gBAC5C,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;AACjD,gBAAA,YAAY,EAAE,sBAAsB;AACpC,gBAAA,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AAC/C,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;oBACA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;gBACrC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAClC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,aAAa;AACpB,gBAAA,KAAK,EAAE,aAAa;AACpB,gBAAA,UAAU,EAAE,aAAa;AACzB,gBAAA,eAAe,EAAE,2BAA2B;gBAC5C,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;AACjD,gBAAA,YAAY,EAAE,sBAAsB;AACpC,gBAAA,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AAC/C,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;oBACA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;gBACrC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAClC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,UAAU,EAAE,WAAW;AACvB,gBAAA,eAAe,EAAE,2BAA2B;gBAC5C,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;AACjD,gBAAA,YAAY,EAAE,sBAAsB;AACpC,gBAAA,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AAC/C,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;oBACA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;gBACrC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAClC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,cAAc;AACrB,gBAAA,KAAK,EAAE,cAAc;AACrB,gBAAA,UAAU,EAAE,cAAc;AAC1B,gBAAA,eAAe,EAAE,2BAA2B;gBAC5C,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;AACjD,gBAAA,YAAY,EAAE,sBAAsB;AACpC,gBAAA,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AAC/C,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;oBACA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;gBACrC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAClC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,KAAK,EAAE,YAAY;AACnB,gBAAA,UAAU,EAAE,YAAY;AACxB,gBAAA,eAAe,EAAE,2BAA2B;gBAC5C,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;AACjD,gBAAA,YAAY,EAAE,sBAAsB;AACpC,gBAAA,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AAC/C,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;oBACA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;gBACrC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAClC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,UAAU,EAAE,YAAY;AACxB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,8BAA8B;gBACrD,cAAc,EAAE,IAAI,CAAC,kBAAkB;AACvC,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,QAAQ,EAAE,IAAI;gBACd,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;oBACA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,CAAC;AACD,gBAAA,IAAI,EAAE;AACT,aAAA;AACD,YAAA,IAAI,CAAC;SACR;IACL;IAEA,OAAO,CAAC,OAAqB,EAAE,IAAU,EAAA;AACrC,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,MAAM,GAAG,SAAS;QAC3B;AACA,QAAA,OAAO,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI;AAC9D,aAAA,IAAI,CAAC,CAAC,OAAY,KAAI;AACnB,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AACpC,QAAA,CAAC,CAAC;IACV;AAMQ,IAAA,WAAW,CAAC,OAAY,EAAA;QAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;;YAEzB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;QACjD;AACA,QAAA,OAAO,OAAO;IAClB;AAEQ,IAAA,gBAAgB,CAAC,OAAY,EAAA;QACjC,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;YAC5B,GAAG,CAAC,UAAU,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACrC,YAAA,OAAO,GAAG;AACd,QAAA,CAAC,CAAC;IACN;AAEO,IAAA,UAAU,CAAC,IAAU,EAAA;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,aAAa;QAC9B,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,EAAE;AAC/B,YAAA,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC;QACxC;aAAO;AACH,YAAA,IAAI,CAAC,cAAc,GAAG,IAAIzF,SAAO,EAAE;QACvC;AACA,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;IAC7B;+GA9MS,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,EAAA,EAAA,KAAA,EAyBnB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAAC,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,kBAAA,EAAA,EAAA,EAAA,KAAA,EAGhB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AA5BpB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cAFnB,MAAM,EAAA,CAAA,CAAA;;4FAET,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BA0BQ,MAAM;2BAAC,gBAAgB;;0BAGvB,MAAM;2BAAC,iBAAiB;;;AChEjC;;;;;;;;;;;;;;AAcE;AAkBI,MAAO,wBAAyB,SAAQ,iBAAiB,CAAA;IAM3D,WAAA,CACa,GAA2B,EACpC,aAAqC,EAC7B,QAAwB,EAChC,aAAmC,EACnC,UAAqB,EACc,UAA4B,EAAA;QAE/D,KAAK,CAAC,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC;QAPvD,IAAA,CAAA,GAAG,GAAH,GAAG;QAEJ,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAGmB,IAAA,CAAA,UAAU,GAAV,UAAU;QAXjD,IAAA,CAAA,KAAK,GAAG,aAAa;QAGrB,IAAA,CAAA,eAAe,GAAG,KAAK;IAWvB;IAES,QAAQ,GAAA;QACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;QAC7C,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;QACvC,KAAK,CAAC,QAAQ,EAAE;IACpB;AAEA,IAAA,mBAAmB,CAAC,MAAc,EAAA;QAC9B,QAAQ,MAAM;AACV,YAAA,KAAK,KAAK;AACN,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACJ,YAAA,KAAK,MAAM;AACP,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACJ,YAAA,KAAK,QAAQ;gBACT,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;oBAC9C,OAAO,GAAG,CAAC,QAAQ;AACvB,gBAAA,CAAC,CAAC;AACF,gBAAA,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,GAAG,aAAa,GAAG,YAAY;AACrE,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,KAAK,CAAC;gBACzC;YACJ;;IAER;AAEA,IAAA,WAAW,CAAC,KAAU,EAAA;QAClB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;AAChD,QAAA,QAAO,KAAK,EAAE,MAAM;AAChB,YAAA,KAAK,WAAW;AAChB,YAAA,KAAK,YAAY;AACb,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC5B;AACJ,YAAA,KAAK,QAAQ;gBACT,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;gBACrC;AACJ,YAAA,KAAK,QAAQ;AACT,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACJ,YAAA,KAAK,QAAQ;AACT,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC3B;AACJ,YAAA;gBACI;;IAEZ;IAEA,eAAe,CAAC,MAAc,EAAE,IAAS,EAAA;AACrC,QAAA,IAAI,CAAC,UAAU,EAAE,sBAAsB,EAAE,IAAI,CAAC;YAC1C,MAAM;AACN,YAAA,IAAI,EAAE,YAAY;YAClB,IAAI;AACJ,YAAA,IAAI,EAAC;AACR,SAAA,CAAC;IACN;AACA,IAAA,UAAU,CAAC,IAAS,EAAA;QAChB,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC;IAC7C;AAEA,IAAA,UAAU,CAAC,KAAU,EAAA;AACjB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,KAAK;AAC9B,QAAA,IAAG,KAAK,EAAE,OAAO,EAAE;YACf,IAAI,CAAC,WAAW,EAAE;QACtB;IACJ;AAEA,IAAA,WAAW,CAAC,KAAK,EAAA;AACb,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;IAChC;AApFS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,6KAYrB,iBAAiB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAZpB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,sGChCrC,6mCA8BA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAe,uBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,WAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,cAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAqB,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDEa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,cAGlB,KAAK,EAAA,QAAA,EAAA,6mCAAA,EAAA;;0BAcZ,MAAM;2BAAC,iBAAiB;;;ME5CpB,MAAM,CAAA;AAAnB,IAAA,WAAA,GAAA;QACI,IAAA,CAAA,IAAI,GAAG,EAAE;QACT,IAAA,CAAA,IAAI,GAAG,EAAE;QACT,IAAA,CAAA,YAAY,GAAG,EAAE;QACjB,IAAA,CAAA,IAAI,GAAQ,EAAE;IAClB;AAAC;AAAA;;MCUY,oBAAoB,CAAA;IAS7B,WAAA,CACuC,WAA4B,EAC7B,UAA4B,EACtD,SAAwB,EACxB,cAA8B,EAC9B,iBAAoC,EAAA;QAJT,IAAA,CAAA,WAAW,GAAX,WAAW;QACZ,IAAA,CAAA,UAAU,GAAV,UAAU;QACpC,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QAbrB,IAAA,CAAA,WAAW,GAAU,EAAE;QAE/B,IAAA,CAAA,KAAK,GAAU,EAAE;QACjB,IAAA,CAAA,MAAM,GAAU,EAAE;QAClB,IAAA,CAAA,YAAY,GAAG,KAAK;QACpB,IAAA,CAAA,cAAc,GAAG,KAAK;QACtB,IAAA,CAAA,eAAe,GAAG,oBAAoB;IAStC;IAEA,MAAM,SAAS,CAAC,UAAkB,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,OAAO,CAAC,OAAO,EAAE;AACzC,QAAA,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YACpD,IAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,UAAU;gBACtC,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM;QAC3C;IACJ;IAEA,cAAc,GAAA;AACV,QAAA,MAAM,MAAM,GAAG;AACX,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE;SACV;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE;AACrD,aAAA,IAAI,CAAC,OAAO,IAAS,KAAI;YACtB,IAAI,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,CAAC,KAAK;AAChC,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE;YACrB,MAAM,QAAQ,GAAmB,EAAE;AACnC,YAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE;YAC/B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAE,CAAC,GAAQ,KAAI;AACxB,gBAAA,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM;AACzB,gBAAA,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAG;AAChD,oBAAA,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM;AACrB,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC9B,CAAC,CAAC,CAAC;AACP,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC;AAC7D,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,qBAAqB,CAAC,QAAQ,EAAA;QAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AACrH,YAAA,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI;YACtC,MAAM,sBAAsB,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;gBAC1D,OAAO,GAAG,CAAC,IAAI;AACnB,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,EAAC,kBAAkB,EAAE,sBAAsB,EAAC;AACvD,QAAA,CAAC,CAAC;IACN;IAEA,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,cAAc;AAC1C,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,GAAG,oBAAoB,GAAG,oBAAoB;AACxF,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;;QAEzB;IACJ;AAEA,IAAA,IAAI,CAAC,QAAQ,EAAA;QACT,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,GAAQ,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC7D,QAAA,IAAI,IAAI;QACR,IAAI,QAAQ,EAAE;AACV,YAAA,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;QACrE;aAAO;AACH,YAAA,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC;QACvD;QAEA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,MAAW,KAAI;YACnC,MAAM,EAAE,GAAG,QAAQ,GAAG,QAAQ,CAAC,EAAE,IAAI,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,MAAM,EAAE,EAAE,CAAC;YACpE,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAI;gBAC/E,OAAO,OAAO,CAAC,IAAI;AACvB,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,eAAoB,KAAI;gBACvE,IAAI,CAAC,eAAe,EAAE;AAClB,oBAAA,OAAO,MAAM;gBACjB;AACA,gBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,OAAA,EAAU,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA,CAAE,EAC5C,CAAA,aAAA,EAAgB,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA,SAAA,EAAY,QAAQ,CAAC,IAAI,CAAA,CAAE,CAC9E;AACD,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,gBAAA,OAAO,MAAM;AACjB,YAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAI;AAChB,gBAAA,OAAO,KAAK;AAChB,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAI;YACd,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC;YAC3D,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,MAAA,EAAS,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAA,OAAA,CAAS,EACpD,YAAY,CACf;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,YAAA,MAAM,IAAI;AACd,QAAA,CAAC,CAAC;IACN;IAEA,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAA;AACjC,QAAA,MAAM,SAAS,GAAG,IAAI,MAAM,EAAE;AAC9B,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC;AACvC,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAC7B,QAAO,IAAI;AACP,gBAAA;oBACI,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;;AAE5C,QAAA,CAAC,CAAC;AACF,QAAA,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC;AACtE,QAAA,OAAO,SAAS;IACpB;+GA7HS,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAUjB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EACjB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAAvC,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAhB,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAwD,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAXpB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAFjB,MAAM,EAAA,CAAA,CAAA;;4FAET,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAWQ,MAAM;2BAAC,iBAAiB;;0BACxB,MAAM;2BAAC,iBAAiB;;;AC1BjC;;;;;;;;;;;;;;AAcE;AAkCI,MAAO,0BAA2B,SAAQ,eAAe,CAAA;AAsB3D,IAAA,WAAA,CACW,GAAyB,EACxB,SAAwB,EAChC,cAA8B,EACH,UAA4B,EACV,eAAgC,EACzC,WAA4B,EAC7C,MAAc,EACd,KAAqB,EACxC,QAAkB,EAClB,UAAqB,EAAA;AAErB,QAAA,KAAK,CAAC,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,CAAC;QAX7F,IAAA,CAAA,GAAG,GAAH,GAAG;QACF,IAAA,CAAA,SAAS,GAAT,SAAS;QAG4B,IAAA,CAAA,eAAe,GAAf,eAAe;QACxB,IAAA,CAAA,WAAW,GAAX,WAAW;QAC5B,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,KAAK,GAAL,KAAK;QA5BV,IAAA,CAAA,MAAM,GAAQ,EAAE;AACxB,QAAA,IAAA,CAAA,KAAK,GAAuB,IAAI,YAAY,EAAQ;QAE9D,IAAA,CAAA,OAAO,GAAU,EAAE;QACnB,IAAA,CAAA,SAAS,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,IAAA,CAAA,QAAQ,GAAG,QAAQ;QACnB,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,KAAK,GAAQ,EAAE;QACf,IAAA,CAAA,cAAc,GAAQ,EAAE;QACxB,IAAA,CAAA,kBAAkB,GAAG,EAAE;QACvB,IAAA,CAAA,sBAAsB,GAAG,EAAE;QAC3B,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,QAAQ,GAAQ,EAAE;QAClB,IAAA,CAAA,oBAAoB,GAAG,EAAE;QAEhB,IAAA,CAAA,UAAU,GAAG,SAAS;QACtB,IAAA,CAAA,WAAW,GAAG,MAAM;QAuP7B,IAAA,CAAA,QAAQ,GAAQ,EAAE;IAvOlB;IAES,QAAQ,GAAA;AACb,QAAA,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,KAAK;QAC/B,KAAK,CAAC,QAAQ,EAAE;QAChB,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,OAAW,KAAI;AAC1D,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;AAC3B,QAAA,CAAC,CAAC;IACN;IAES,aAAa,GAAA;QACtB,KAAK,CAAC,aAAa,EAAE;QACjB,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE;AAC9B,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,EAAE;QAC3B;QACA,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE;AACtC,YAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,EAAE;QACnC;QACA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY;QACtD,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AACxC,QAAA,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,KAAK;;AAE/B,QAAA,IAAI,CAAC,GAAG,CAAC,cAAc;aAClB,IAAI,CAAC,WAAW,IAAG;AAChB,YAAA,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE;YACjC,IAAI,CAAC,SAAS,EAAE;AACpB,QAAA,CAAC,CAAC;AACN,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC3C,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,EAAE;QACnC;IACJ;IAEA,qBAAqB,GAAA;AACjB,QAAA,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC7D,YAAA,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,kBAAkB;AACnD,YAAA,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,sBAAsB;AAC/D,QAAA,CAAC,CAAC;IACN;IAEA,WAAW,GAAA;QACP,IAAI,CAAC,SAAS,EAAE;IACpB;AAEA,IAAA,IAAI,eAAe,GAAA;QACf,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;IAC9C;AAEA,IAAA,qBAAqB,CAAC,KAAK,EAAA;AACvB,QAAA,QAAO,KAAK,CAAC,IAAI;AACb,YAAA,KAAK,MAAM;AACP,gBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;gBAChB;AACJ,YAAA,KAAK,OAAO;gBACR,IAAI,CAAC,gBAAgB,EAAE;gBACvB;AACJ,YAAA,KAAK,aAAa;AACd,gBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI;gBAC1B;AACJ,YAAA,KAAK,QAAQ;gBACT,IAAI,CAAC,YAAY,EAAE;gBACnB;;IAEZ;AAEA,IAAA,oBAAoB,CAAC,MAAM,EAAA;AACvB,QAAA,QAAQ,MAAM,CAAC,EAAE;AACb,YAAA,KAAK,MAAM;gBACP,IAAI,CAAC,IAAI,EAAE;gBACX;AACJ,YAAA,KAAK,QAAQ;gBACT,IAAI,CAAC,YAAY,EAAE;gBACnB;;IAEZ;AAEA,IAAA,kBAAkB,CAAC,MAAM,EAAA;AACrB,QAAA,QAAQ,MAAM,CAAC,EAAE;AACb,YAAA,KAAK,KAAK;gBACN,IAAI,CAAC,cAAc,EAAE;gBACrB;AACJ,YAAA,KAAK,MAAM;gBACP,IAAI,CAAC,eAAe,EAAE;gBACtB;;IAEZ;IAEA,cAAc,GAAA;AACV,QAAA,MAAM,OAAO,GAAG,CAAA,UAAA,EAAa,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,QAAQ,GAAG,QAAQ,CAAA,QAAA,EAAW,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA,CAAA,CAAG,GAAG,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,QAAQ,GAAG,EAAE,CAAA,EAAA,EAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAA,UAAA,EAAa,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG;AAE9R,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC;AACtC,QAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,WAAA,CAAa,EACb,CAAA,+BAAA,CAAiC,CACpC;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACzC;IAEA,eAAe,GAAA;AACX,QAAA,MAAM,OAAO,GAAG,CAAA,MAAA,EAAS,IAAI,CAAC,UAAU,CAAA;MAC1C,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,oBAAoB,GAAG,IAAI;;;AAG9B,oBAAA,EAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAA;kBAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG;AAEzC,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC;AACtC,QAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,WAAA,CAAa,EACb,CAAA,gCAAA,CAAkC,CACrC;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACzC;IAES,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,EAAE;QAC/B,IAAI,CAAC,SAAS,EAAE;IACpB;IAEA,SAAS,GAAA;QACL,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAS,KAAI;YAC7B,IAAI,IAAI,EAAE,SAAS;AAAE,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AACjD,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;QAClB,IAAI,IAAI,CAAC,YAAY;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;IAC1D;IAEA,MAAM,IAAI,CAAC,KAAW,EAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE;YAC9B;QACJ;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI;AACA,YAAA,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE;QAC7C;QAAE,OAAO,GAAG,EAAC;AACT,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,yBAAA,CAA2B,EAC3B,6CAA6C,CAChD;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,YAAA,MAAM,GAAG;QACb;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YACtB;QACJ;AACA,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;YAChE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AACtB,gBAAA,IAAI,CAAC,QAAQ,GAAG,MAAM;AACtB,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;YACjC;YACA,OAAO,MAAM,EAAE,EAAE;AACrB,QAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AAC1B,QAAA,CAAC,CAAC;QACF,IAAI,QAAQ,EAAE;AACV,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC7B,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;YAC/B;iBAAO;gBACH,IAAI,CAAC,gBAAgB,EAAE;YAC3B;QACJ;QAAC;IACL;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAEhB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,EAAE;AAC9D,YAAA,OAAO,KAAK;QAChB;QACA,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI;QAC9B;QACA,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;AACrC,YAAA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,IAAI;QACtC;QACA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACvB,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,uBAAA,CAAyB,EACzB,2FAA2F,CAC9F;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;QACzC;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IAC/B;AACA,IAAA,IAAI,iBAAiB,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,OAAO,sDAAsD;QACjE;aAAO;AACH,YAAA,OAAO,gEAAgE;QAC3E;IACJ;IAEA,SAAS,GAAA;QACL,IAAI,IAAI,CAAC,oBAAoB,KAAK,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;YAC1D,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY;AACtD,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,EAAE;QAC3B;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC3D,YAAA,IAAI,CAAC,cAAc,GAAG,MAAM;AAChC,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,sBAAsB,GAAG,6BAA6B,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA,CAAE,GAAG,EAAE,CAAC;IAClI;AAEA,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,MAAM,IAAI,GAAQ;AACd,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE;AAC/B,YAAA,YAAY,EAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,IAAI,EAAE;AAC/C,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE;AAC/B,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE;SACxB;AACD,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACpB,OAAO,IAAI,CAAC,QAAQ;IACxB;IAGA,IAAI,OAAO,CAAC,IAAI,EAAA;AACZ,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACxB;AAEA,IAAA,WAAW,CAAC,KAAK,EAAA;QACb,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;IAC3C;IAES,YAAY,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB;QACJ;;AAGA,QAAA,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC7D,YAAA,MAAM,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,IAAI,EAAE;AAC1D,YAAA,MAAM,sBAAsB,GAAG,MAAM,CAAC,sBAAsB,IAAI,EAAE;AAElE,YAAA,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;;AAE/B,gBAAA,MAAM,IAAI,GAAG;AACT,oBAAA,QAAQ,EAAE,+BAA+B;AACzC,oBAAA,KAAK,EAAE,gBAAgB;AACvB,oBAAA,OAAO,EAAE,CAAA,oDAAA,CAAsD;AAC/D,oBAAA,UAAU,EAAE,kGAAkG;AAC9G,oBAAA,UAAU,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AAChC,oBAAA,YAAY,EAAE,KAAK;AACnB,oBAAA,WAAW,EAAE,6BAA6B;AAC1C,oBAAA,QAAQ,EAAE,+BAA+B;AACzC,oBAAA,cAAc,EAAE;iBACnB;gBAED,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACrD,oBAAA,IAAI,EAAE,IAAI;AACV,oBAAA,SAAS,EAAE,KAAK;AACnB,iBAAA,CAAC;gBAEF,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AACzC,oBAAA,IAAI,MAAM,EAAE,SAAS,EAAE;wBACnB,IAAI,CAAC,aAAa,EAAE;oBACxB;AACJ,gBAAA,CAAC,CAAC;YACN;iBAAO;;gBAEH,KAAK,CAAC,YAAY,EAAE;YACxB;AACJ,QAAA,CAAC,CAAC;IACN;IAEQ,aAAa,GAAA;AACjB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAK;AACjE,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,GAAG,IAAI,CAAC,UAAU,CAAA,QAAA,CAAU,EAC5B,CAAA,qBAAA,EAAwB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA,EAAA,EAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAE,CAChF;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;YACrC,IAAI,CAAC,gBAAgB,EAAE;AAC3B,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAI;YACd,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC;YAC3D,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,aAAA,CAAe,EACf,CAAA,iBAAA,EAAoB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA,EAAA,EAAK,YAAY,CAAA,CAAE,CACtE;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,QAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AAC1B,QAAA,CAAC,CAAC;IACN;AAnVS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA4D,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAA9E,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,EAAA,EAAA,KAAA,EA0BvB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EACjB,gBAAgB,aAChB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAApC,IAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAuB,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGA5BpB,0BAA0B,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAqBD,qBAAqB,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrE3D,80LA2IA,EAAA,MAAA,EAAA,CAAA,gZAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAvB,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAgE,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAiB,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,aAAA,EAAA,UAAA,EAAA,cAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,aAAA,EAAA,OAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,oBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAtC,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAuD,wBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAc,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FD3Fa,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBANtC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,cAGjB,KAAK,EAAA,QAAA,EAAA,80LAAA,EAAA,MAAA,EAAA,CAAA,gZAAA,CAAA,EAAA;;0BA4BZ,MAAM;2BAAC,iBAAiB;;0BACxB,MAAM;2BAAC,gBAAgB;;0BACvB,MAAM;2BAAC,iBAAiB;;sBA1B5B;;sBACA;;sBAkBA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,cAAc,EAAE,EAAC,IAAI,EAAE,qBAAqB,EAAC;;;AErE5D;;;;;;;;;;;;;;AAcE;AAsBI,MAAO,qBAAsB,SAAQ,oBAAoB,CAAA;IAa3D,WAAA,CACY,SAAwB,EACN,QAAyB,EACnD,aAAqC,EACrC,kBAAsC,EACX,UAA4B,EACpC,MAAc,EAAA;QAEjC,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,CAAC;QAP9D,IAAA,CAAA,SAAS,GAAT,SAAS;QAKE,IAAA,CAAA,MAAM,GAAN,MAAM;AAjBrB,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,cAAc;QAEpC,IAAA,CAAA,YAAY,GAAG,sBAAsB;QACrC,IAAA,CAAA,cAAc,GAAQ,EAAE;QACxB,IAAA,CAAA,SAAS,GAAG,EAAE;AAEL,QAAA,IAAA,CAAA,SAAS,GAAG;AACjB,YAAA,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAC;AAChC,YAAA,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAC;SACrC;AA0GD,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,QAAQ,KAA8B;YAC9C,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAC,CAAC;AAC3C,QAAA,CAAC;IAjGD;IAEA,gBAAgB,GAAA;AAEZ,QAAA,MAAM,4BAA4B,GAAG;AACjC,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE;AACX,gBAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;AAC3B,gBAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE;AACjC,gBAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE;AACtC;SACJ;AACD,QAAA,MAAM,8BAA8B,GAAG;AACnC,YAAA,UAAU,EAAE,UAAU;SACzB;QACD,OAAO;AACH,YAAA;AACI,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,UAAU,EAAE,MAAM;AAClB,gBAAA,eAAe,EAAE,2BAA2B;gBAC5C,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;AACjD,gBAAA,YAAY,EAAE,sBAAsB;AACpC,gBAAA,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AAC/C,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;oBACA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;gBACrC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAClC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,UAAU,EAAE,QAAQ;AACpB,gBAAA,eAAe,EAAE,2BAA2B;gBAC5C,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;AACjD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,UAAU,EAAE,UAAU;AACtB,gBAAA,eAAe,EAAE,2BAA2B;gBAC5C,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;AACjD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,UAAU,EAAE,SAAS;AACrB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,4BAA4B;AACnD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,UAAU,EAAE,YAAY;AACxB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,8BAA8B;gBACrD,cAAc,EAAE,IAAI,CAAC,kBAAkB;AACvC,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACvC,aAAA;AACD,YAAA,IAAI,CAAC;SACR;IACL;IAEA,OAAO,CAAC,OAAqB,EAAE,IAAU,EAAA;;AAErC,QAAA,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI;AAClE,aAAA,IAAI,CAAC,CAAC,OAAY,KAAI;AACnB,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AACpC,QAAA,CAAC,CAAC;IACV;AAMQ,IAAA,WAAW,CAAC,OAAY,EAAA;QAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;;YAEzB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;QACjD;AACA,QAAA,OAAO,OAAO;IAClB;AAEQ,IAAA,gBAAgB,CAAC,OAAY,EAAA;QACjC,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;YAC5B,GAAG,CAAC,UAAU,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACrC,YAAA,OAAO,GAAG;AACd,QAAA,CAAC,CAAC;IACN;AAEO,IAAA,UAAU,CAAC,IAAU,EAAA;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,YAAY;QAC7B,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,EAAE;AAC/B,YAAA,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC;QACxC;aAAO;AACH,YAAA,IAAI,CAAC,cAAc,GAAG,IAAIvG,SAAO,EAAE;QACvC;AACA,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;IAC7B;+GAlJS,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,EAAA,EAAA,KAAA,EAelB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAAC,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,kBAAA,EAAA,EAAA,EAAA,KAAA,EAGhB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAlBpB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFlB,MAAM,EAAA,CAAA,CAAA;;4FAET,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAgBQ,MAAM;2BAAC,gBAAgB;;0BAGvB,MAAM;2BAAC,iBAAiB;;;ACtDjC;;;;;;;;;;;;;;AAcE;AAoBI,MAAO,uBAAwB,SAAQ,iBAAiB,CAAA;IAO1D,WAAA,CACa,GAA0B,EACnC,aAAqC,EAC7B,QAAwB,EAChC,aAAmC,EACnC,UAAqB,EACc,UAA4B,EAAA;QAE/D,KAAK,CAAC,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC;QAPvD,IAAA,CAAA,GAAG,GAAH,GAAG;QAEJ,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAGmB,IAAA,CAAA,UAAU,GAAV,UAAU;QAZjD,IAAA,CAAA,KAAK,GAAG,aAAa;QAGrB,IAAA,CAAA,eAAe,GAAG,KAAK;IAYvB;IAES,QAAQ,GAAA;QACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC;QACnD,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;QACvC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACrC,YAAA,IAAI,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;gBACvB;YACJ;YACA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK;AAC3C,QAAA,CAAC,CAAC;QACF,KAAK,CAAC,QAAQ,EAAE;IACpB;AAEA,IAAA,mBAAmB,CAAC,MAAc,EAAA;QAC9B,QAAQ,MAAM;AACV,YAAA,KAAK,KAAK;AACN,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACJ,YAAA,KAAK,MAAM;AACP,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACJ,YAAA,KAAK,QAAQ;gBACT,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;oBAC9C,OAAO,GAAG,CAAC,QAAQ;AACvB,gBAAA,CAAC,CAAC;AACF,gBAAA,IAAI,CAAC,0BAA0B,CAAC,aAAa,CAAC;gBAC9C;YACJ;;IAER;AAEA,IAAA,uBAAuB,CAAC,0BAA0B,EAAA;AAC9C,QAAA,MAAM,KAAK,GAAG,0BAA0B,CAAC,MAAM,GAAG,CAAC,GAAG,oBAAoB,GAAG,mBAAmB;AAChG,QAAA,MAAM,MAAM,GAAG,0BAA0B,CAAC,MAAM,GAAG,CAAC,GAAG,+FAA+F,GAAG,6FAA6F;AACtP,QAAA,MAAM,MAAM,GAAG,0BAA0B,CAAC,MAAM,GAAG,CAAC,GAAG,4FAA4F,GAAG,wFAAwF;QAC9O,MAAM,KAAK,GAAG,0BAA0B,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;YAClD,OAAO,IAAI,CAAC,IAAI;AACpB,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,IAAI,GAAG;AACT,YAAA,QAAQ,EAAE,qCAAqC;AAC/C,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,UAAU,EAAE,MAAM;AAClB,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,QAAQ,EAAE,6BAA6B;AACvC,YAAA,cAAc,EAAE;SACnB;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACpD,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,SAAS,EAAE,KAAK;AACnB,SAAA,CAAC;IACN;AAEA,IAAA,WAAW,CAAC,KAAU,EAAA;QAClB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;AAChD,QAAA,QAAO,KAAK,EAAE,MAAM;AAChB,YAAA,KAAK,WAAW;AAChB,YAAA,KAAK,YAAY;AACb,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC5B;AACJ,YAAA,KAAK,QAAQ;gBACT,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;gBACrC;AACJ,YAAA,KAAK,QAAQ;AACT,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACJ,YAAA,KAAK,QAAQ;AACT,gBAAA,MAAM,aAAa,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;AAClC,gBAAA,IAAI,CAAC,0BAA0B,CAAC,aAAa,CAAC;gBAC9C;AACJ,YAAA;gBACI;;IAEZ;IAEA,eAAe,CAAC,MAAc,EAAE,IAAS,EAAA;AACrC,QAAA,IAAI,CAAC,UAAU,EAAE,sBAAsB,EAAE,IAAI,CAAC;YAC1C,MAAM;AACN,YAAA,IAAI,EAAE,YAAY;YAClB,IAAI;AACJ,YAAA,IAAI,EAAC;AACR,SAAA,CAAC;IACN;AACA,IAAA,0BAA0B,CAAC,aAAa,EAAA;AACpC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAI;YAC9E,MAAM,uBAAuB,GAAG,EAAE;YAClC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;gBAClC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AAC7B,oBAAA,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;AAC5D,wBAAA,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC;oBACxC;yBAAO,IAAI,MAAM,CAAC,SAAS,CAAC,mBAAmB,KAAK,MAAM,CAAC,EAAE,EAAE;AAC3D,wBAAA,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC;oBACxC;AACJ,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,uBAAuB,CAAC,MAAM,GAAG,CAAC,EAAE;AACpC,gBAAA,IAAI,CAAC,uBAAuB,CAAC,uBAAuB,CAAC;YACzD;iBAAO;AACH,gBAAA,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,GAAG,qBAAqB,GAAG,sBAAsB;AACvF,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,KAAK,CAAC;YAC7C;AACJ,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,UAAU,CAAC,IAAS,EAAA;QAChB,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC;IAC7C;AAEA,IAAA,UAAU,CAAC,KAAU,EAAA;AACjB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,KAAK;AAC9B,QAAA,IAAG,KAAK,EAAE,OAAO,EAAE;YACf,IAAI,CAAC,WAAW,EAAE;QACtB;IACJ;AAEA,IAAA,WAAW,CAAC,KAAK,EAAA;AACb,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;IAChC;AAEA,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;IAC/C;AAEA,IAAA,IAAI,kBAAkB,GAAA;QAClB,IAAI,QAAQ,GAAG,aAAa;QAC5B,IAAI,IAAI,CAAC,GAAG,EAAE,eAAe,EAAE,sBAAsB,EAAE;AACnD,YAAA,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,EAAE,sBAAsB,CAAC;AAC5E,YAAA,QAAQ,GAAG,SAAS,CAAC,QAAQ;QACjC;AACA,QAAA,OAAO,QAAQ;IACnB;AApJS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,4KAapB,iBAAiB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAbpB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,mGClCpC,8vCAqCA,EAAA,MAAA,EAAA,CAAA,2cAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAe,uBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,WAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,cAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAqB,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDHa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,cAGf,KAAK,EAAA,QAAA,EAAA,8vCAAA,EAAA,MAAA,EAAA,CAAA,2cAAA,CAAA,EAAA;;0BAeZ,MAAM;2BAAC,iBAAiB;;;ME/CpB,SAAS,CAAA;AAAtB,IAAA,WAAA,GAAA;QACI,IAAA,CAAA,IAAI,GAAW,EAAE;QACjB,IAAA,CAAA,QAAQ,GAAW,EAAE;QACrB,IAAA,CAAA,MAAM,GAAW,EAAE;QACnB,IAAA,CAAA,QAAQ,GAAW,EAAE;QACrB,IAAA,CAAA,cAAc,GAAW,EAAE;QAC3B,IAAA,CAAA,OAAO,GAAY,IAAI;QACvB,IAAA,CAAA,aAAa,GAAY,KAAK;QAC9B,IAAA,CAAA,eAAe,GAAW,EAAE;QAC5B,IAAA,CAAA,GAAG,GAAW,EAAE;QAChB,IAAA,CAAA,MAAM,GAAa,EAAE;QACrB,IAAA,CAAA,YAAY,GAAW,SAAS;QAChC,IAAA,CAAA,OAAO,GAAW,SAAS;QAC3B,IAAA,CAAA,IAAI,GAAQ,EAAE;QACd,IAAA,CAAA,WAAW,GAAW,QAAQ;QAC9B,IAAA,CAAA,mBAAmB,GAAY,KAAK;QACpC,IAAA,CAAA,oBAAoB,GAAY,KAAK;IACzC;AAAC;AAAA;;MCLY,oBAAoB,CAAA;AAM7B,IAAA,WAAA,CACuC,WAA4B,EAC7B,UAA4B,EACtD,cAA8B,EAC9B,iBAAoC,EAAA;QAHT,IAAA,CAAA,WAAW,GAAX,WAAW;QACZ,IAAA,CAAA,UAAU,GAAV,UAAU;QACpC,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QAR7B,IAAA,CAAA,KAAK,GAAU,EAAE;QACjB,IAAA,CAAA,MAAM,GAAU,EAAE;QAClB,IAAA,CAAA,YAAY,GAAG,KAAK;IAQpB;AAEA,IAAA,IAAI,CAAC,QAAQ,EAAA;QACT,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,GAAQ,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAChE,QAAA,IAAI,IAAI;QACR,IAAI,QAAQ,EAAE;AACV,YAAA,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,sBAAsB,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;QAChF;aAAO;AACH,YAAA,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,EAAE,IAAI,CAAC;QACpE;QAEA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,MAAW,KAAI;YACnC,MAAM,EAAE,GAAG,QAAQ,GAAG,QAAQ,CAAC,EAAE,IAAI,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,MAAM,EAAE,EAAE,CAAC;YACpE,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,sBAAsB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAI;gBAC5F,OAAO,OAAO,CAAC,IAAI;AACvB,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,eAAoB,KAAI;gBACvE,IAAI,CAAC,eAAe,EAAE;AAClB,oBAAA,OAAO,MAAM;gBACjB;AACA,gBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,WAAA,EAAc,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA,CAAE,EAChD,CAAA,aAAA,EAAgB,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA,aAAA,EAAgB,QAAQ,CAAC,IAAI,CAAA,CAAE,CAClF;AACD,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,gBAAA,OAAO,MAAM;AACjB,YAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAI;AAChB,gBAAA,OAAO,KAAK;AAChB,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAI;YACd,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC;YAC3D,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,MAAA,EAAS,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAA,WAAA,CAAa,EACxD,YAAY,CACf;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,YAAA,MAAM,IAAI;AACd,QAAA,CAAC,CAAC;IACN;IAEA,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,EAAA;AACpC,QAAA,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE;AACjC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC;AACvC,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAC7B,QAAO,IAAI;AACP,gBAAA;oBACI,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;;AAE5C,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,SAAS;IACpB;+GAnES,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAOjB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EACjB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAAzC,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAL,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AARpB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAFjB,MAAM,EAAA,CAAA,CAAA;;4FAET,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAQQ,MAAM;2BAAC,iBAAiB;;0BACxB,MAAM;2BAAC,iBAAiB;;;MCPpB,WAAW,CAAA;IAEpB,WAAA,CACY,YAA0B,EAAU,IAAgB,EACpD,cAA8B,EAC9B,MAAc,EACY,eAAqC,EAAA;QAH/D,IAAA,CAAA,YAAY,GAAZ,YAAY;QAAwB,IAAA,CAAA,IAAI,GAAJ,IAAI;QACxC,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,MAAM,GAAN,MAAM;QACoB,IAAA,CAAA,eAAe,GAAf,eAAe;QALrD,IAAA,CAAA,QAAQ,GAAG,GAAG;QAOV,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAU,KAAI;AACnC,YAAA,IAAI,KAAK,YAAY,aAAa,EAAE;gBAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI;AACtD,gBAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,UAAU,EAAE,WAAW;AACpD,gBAAA,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE;oBACtB;gBACF;gBACA,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAChD,gBAAA,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC;YACjC;AACN,QAAA,CAAC,CAAC;IACN;AAEO,IAAA,iBAAiB,CAAC,SAAS,GAAG,uBAAuB,EAAE,YAAY,GAAG,6BAA6B,EAAA;AACtG,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;QAEzD,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,cAAc,CAAC;AAChD,QAAA,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC;AAClC,QAAA,YAAY,CAAC,UAAU,CAAC,YAAY,CAAC;AACrC,QAAA,YAAY,CAAC,UAAU,CAAC,2BAA2B,CAAC;AACpD,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;AAC1B,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;IACnC;IAEO,cAAc,CAAC,YAAY,EAAE,WAAW,GAAG,WAAW,EAAE,SAAU,EAAE,YAAa,EAAA;AACpF,QAAA,IAAI,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,GAAG;QAC1E,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,QAAQ;AACpE,QAAA,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,IAAI,EAAE;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AAC9B,QAAA,MAAM,YAAY,GAAG,QAAQ,GAAG,WAAW;AAC3C,QAAA,MAAM,WAAW,GAAG;YAChB,MAAM,EAAE,YAAY,CAAC,eAAe;AACpC,YAAA,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,YAAY;YAClD,QAAQ,EAAE,YAAY,CAAC,QAAQ;AAC/B,YAAA,YAAY,EAAE,MAAM;AACpB,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,oBAAoB,EAAE,IAAI;AAC1B,YAAA,iBAAiB,EAAE;gBACf,QAAQ,EAAE,YAAY,CAAC;AAC1B,aAAA;AACD,YAAA,iCAAiC,EAAE,KAAK;AACxC,YAAA,OAAO,EAAE,IAAI;SAChB;AAED,QAAA,YAAY,CAAC,OAAO,CAAC,SAAS,IAAI,uBAAuB,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AACvF,QAAA,IAAI,YAAY,CAAC,WAAW,EAAE;YAC1B,YAAY,CAAC,OAAO,CAAC,YAAY,IAAI,6BAA6B,EAAE,YAAY,CAAC,WAAW,CAAC;QACjG;;;AAGA,QAAA,YAAY,CAAC,OAAO,CAAC,2BAA2B,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,sBAAsB,IAAI,EAAE,CAAC;AAC9G,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,WAAW,CAAC;AACxC,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,gCAAgC,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW,KAAI;YAC7E,IAAI,WAAW,EAAE;gBACb,IAAI,CAAC,KAAK,EAAE;YAChB;iBAAO;AACH,gBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,WAAA,CAAa,EACb,kCAAkC,CACrC;AACD,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;YACzC;YACA,OAAO,EAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAC;AAC9C,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAI;AACf,YAAA,MAAM,YAAY,GAAG,oCAAoC,IAAI,KAAK,EAAE,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;AACpG,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,WAAA,CAAa,EACb,YAAY,CACf;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;YACrC,IAAI,CAAC,iBAAiB,EAAE;YACxB,OAAO,EAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAC;AAClD,QAAA,CAAC,CAAC;IACN;IAEA,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;IACrC;IAEA,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;IAC9B;AAEA,IAAA,IAAI,WAAW,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE;IAC7C;AAjGS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,6HAMR,gBAAgB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AANnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFR,MAAM,EAAA,CAAA,CAAA;;4FAET,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAOQ,MAAM;2BAAC,gBAAgB;;;ACnBhC;;;;;;;;;;;;;;AAcE;AAqCI,MAAO,sBAAuB,SAAQ,eAAe,CAAA;AAkCvD,IAAA,WAAA,CACW,GAAyB,EACxB,SAAwB,EAChC,cAA8B,EACH,UAA4B,EACV,eAAgC,EACzC,WAA4B,EAC7C,MAAc,EACd,KAAqB,EACxC,QAAkB,EACV,iBAAoC,EACpC,WAAwB,EACxB,YAA0B,EAC1B,IAAgB,EACW,YAA+B,EAClE,UAAqB,EAAA;AAGrB,QAAA,KAAK,CAAC,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,CAAC;QAjBjF,IAAA,CAAA,GAAG,GAAH,GAAG;QACF,IAAA,CAAA,SAAS,GAAT,SAAS;QAG4B,IAAA,CAAA,eAAe,GAAf,eAAe;QACxB,IAAA,CAAA,WAAW,GAAX,WAAW;QAC5B,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,KAAK,GAAL,KAAK;QAEhB,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,IAAI,GAAJ,IAAI;QACuB,IAAA,CAAA,YAAY,GAAZ,YAAY;QA9CjC,IAAA,CAAA,MAAM,GAAQ,EAAE;AACxB,QAAA,IAAA,CAAA,KAAK,GAAuB,IAAI,YAAY,EAAQ;QAE9D,IAAA,CAAA,QAAQ,GAAG,QAAQ;QACnB,IAAA,CAAA,OAAO,GAAU,EAAE;QACnB,IAAA,CAAA,SAAS,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,KAAK,GAAQ,EAAE;QACf,IAAA,CAAA,QAAQ,GAAQ,EAAE;QAClB,IAAA,CAAA,iBAAiB,GAAG,KAAK;QACzB,IAAA,CAAA,eAAe,GAAG,eAAe;QACjC,IAAA,CAAA,YAAY,GAAG,KAAK;QACpB,IAAA,CAAA,SAAS,GAAG,4BAA4B;QACxC,IAAA,CAAA,YAAY,GAAG,gCAAgC;QAC/C,IAAA,CAAA,YAAY,GAAG,KAAK;QASX,IAAA,CAAA,mBAAmB,GAAG,KAAK;QAC3B,IAAA,CAAA,UAAU,GAAG,sBAAsB;QACnC,IAAA,CAAA,WAAW,GAAG,SAAS;QAChC,IAAA,CAAA,uBAAuB,GAAG,KAAK;QAqR/B,IAAA,CAAA,QAAQ,GAAQ,EAAE;IA7PlB;IAES,QAAQ,GAAA;QACb,KAAK,CAAC,QAAQ,EAAE;QAChB,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,OAAW,KAAI;AAC1D,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;AAC3B,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;YAC/C,IAAI,CAAC,mBAAmB,EAAE;QAC9B;IACJ;IAES,eAAe,GAAA;AACpB,QAAA,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC;IAC/B;IAEmB,aAAa,GAAA;QAC5B,KAAK,CAAC,aAAa,EAAE;QACrB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE;AACjC,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB;AACrC,YAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS;QACrC;IACJ;IAEA,WAAW,GAAA;QACP,IAAI,CAAC,SAAS,EAAE;IACpB;AAEA,IAAA,qBAAqB,CAAC,KAAK,EAAA;AACvB,QAAA,QAAO,KAAK,CAAC,IAAI;AACb,YAAA,KAAK,MAAM;AACP,gBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;gBAChB;AACJ,YAAA,KAAK,OAAO;gBACR,IAAI,CAAC,gBAAgB,EAAE;gBACvB;AACJ,YAAA,KAAK,aAAa;AACd,gBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI;gBAC1B;;IAEZ;AAEA,IAAA,oBAAoB,CAAC,MAAM,EAAA;AACvB,QAAA,QAAQ,MAAM,CAAC,EAAE;AACb,YAAA,KAAK,MAAM;gBACP,IAAI,CAAC,IAAI,EAAE;gBACX;AACJ,YAAA,KAAK,QAAQ;gBACT,IAAI,CAAC,YAAY,EAAE;gBACnB;;IAEZ;IAEA,qBAAqB,GAAA;QACjB,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;AACvC,YAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,KAAK;QACvC;aAAO;AACH,YAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,IAAI;QACtC;IACJ;IAES,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,EAAE;QAC/B,IAAI,CAAC,SAAS,EAAE;IACpB;IAEA,SAAS,GAAA;QACL,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAS,KAAI;YAC7B,IAAI,IAAI,EAAE,SAAS;AAAE,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AACjD,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;QAClB,IAAI,IAAI,CAAC,YAAY;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;IAC1D;IAEA,MAAM,IAAI,CAAC,KAAW,EAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE;YAC9B;QACJ;AACA,QAAA,IAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YACjB;QACJ;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE;AACnC,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACnB,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAI;gBAC3B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK;AACnC,YAAA,CAAC,CAAC;QACN;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACnC,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;gBAC3B;YACJ;AACA,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC7B,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;YACxB,IAAI,CAAC,gBAAgB,EAAE;AAC3B,QAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AAC1B,QAAA,CAAC,CAAC;IACN;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;QAChB,MAAM,MAAM,GAAG,EAAE;QACjB,MAAM,QAAQ,GAAG,EAAE;QACnB,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI;AACvB,YAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QACvB;QACA,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC/B,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI;AACzB,YAAA,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;QACzB;AACA,QAAA,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;AACvE,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI;AAC1B,YAAA,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,IAAI;AAC/B,YAAA,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC;QAC5C;AACA,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;AACtE,YAAA,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI;AACjC,YAAA,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC;QAClC;QACA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YACvB,IAAI,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AACrC,YAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,YAAY,CAC1B,OAAO,EACP,SAAS,EACT,mBAAmB,EACnB,CAAA,iDAAA,EAAoD,aAAa,CAAA,CAAE,CACtE,CAAC;QACN;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AACpB,YAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,KAAI;AAC7B,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;QAC/B;AACA,QAAA,IAAI,IAAI,CAAC,eAAe,KAAK,eAAe,EAAE;YAC1C,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;AACrC,gBAAA,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,IAAI;AAC/B,gBAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,YAAY,CAC1B,OAAO,EACP,SAAS,EACT,CAAA,qBAAA,CAAuB,EACvB,CAAA,yCAAA,CAA2C,CAC9C,CAAC;YACN;AAAO,iBAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;AACvE,gBAAA,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,IAAI;AAC/B,gBAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,YAAY,CAC1B,OAAO,EACP,SAAS,EACT,CAAA,qBAAA,CAAuB,EACvB,CAAA,yGAAA,CAA2G,CAC9G,CAAC;YACN;QACJ;AAAO,aAAA,IAAI,IAAI,CAAC,eAAe,KAAK,UAAU,EAAE;YAC5C,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AAChC,gBAAA,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI;AAC1B,gBAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,YAAY,CAC1B,OAAO,EACP,SAAS,EACT,CAAA,gBAAA,CAAkB,EAClB,CAAA,yCAAA,CAA2C,CAC9C,CAAC;YACN;AAAO,iBAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE;AAC1E,gBAAA,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI;AAC1B,gBAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,YAAY,CAC1B,OAAO,EACP,SAAS,EACT,CAAA,gBAAA,CAAkB,EAClB,CAAA,2EAAA,CAA6E,CAChF,CAAC;YACN;QACJ;AAEA,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,KAAI;AAC7B,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IAC/B;AAEA,IAAA,IAAI,aAAa,GAAA;QACb,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,EAAE,OAAO,CAAC;IAC9G;AAEA,IAAA,IAAI,kBAAkB,GAAA;QAClB,IAAI,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,EAAE;AAC3C,YAAA,OAAO,KAAK;QAChB;AACA,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC;AACnE,QAAA,OAAO,aAAa,EAAE,KAAK,IAAI,CAAC;IACpC;AAEA,IAAA,IAAI,WAAW,GAAA;QACX,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;AAC7C,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,QAAQ;YACpC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC5C;AACA,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW;IACpC;IAEA,IAAI,WAAW,CAAC,GAAG,EAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB;QACJ;AACA,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,GAAG;IACnC;AAEA,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,sBAAsB,GAAG,0CAA0C,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA,CAAE,GAAG,EAAE,CAAC;IAC/I;AAEA,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,MAAM,IAAI,GAAQ;AACd,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE;AAC9B,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE;AACtC,YAAA,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE;AAClC,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE;AACtC,YAAA,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE;AACpC,YAAA,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,cAAc,IAAI,EAAE;AAClD,YAAA,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO;AAC9B,YAAA,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa;AAC1C,YAAA,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,EAAE;AAC5B,YAAA,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,IAAI,EAAE;AACpD,YAAA,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE;AAClC,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE;AAC9B,YAAA,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CAAC,mBAAmB;AACtD,YAAA,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAAC;SACvC;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;YACtC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY;QAClD;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE;YAC3D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW;QAChD;QACA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;YAC5B,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE;QAC9B;AACA,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;YAClB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE;QAC9B;AACA,QAAA,IAAI,IAAI,CAAC,eAAe,KAAK,eAAe,EAAE;AAC1C,YAAA,IAAI,CAAC,OAAO,GAAG,SAAS;QAC5B;aAAO;AACH,YAAA,IAAI,CAAC,YAAY,GAAG,SAAS;QACjC;AACA,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACpB,OAAO,IAAI,CAAC,QAAQ;IACxB;IAGA,IAAI,OAAO,CAAC,IAAI,EAAA;AACZ,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACxB;AAEA,IAAA,WAAW,CAAC,KAAK,EAAA;QACb,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;IAC3C;IAEA,aAAa,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC5B;QACJ;QACA,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO;IAClD;IAEA,mBAAmB,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC5B;QACJ;QACA,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa;AAC1D,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE;AAC9B,YAAA,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,KAAK;QACtC;IACJ;IAEA,yBAAyB,GAAA;QACrB,IAAI,CAAC,QAAQ,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB;IAC1E;IAEA,0BAA0B,GAAA;QACtB,IAAI,CAAC,QAAQ,CAAC,oBAAoB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB;IAC5E;IAEA,kBAAkB,GAAA;AACd,QAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI;IACvC;IAEA,oBAAoB,GAAA;AAChB,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;IAC1D;AAEA,IAAA,mBAAmB,CAAC,KAAU,EAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC5B;QACJ;AACA,QAAA,QAAQ,KAAK,CAAC,GAAG;AACb,YAAA,KAAK,WAAW;AACZ,gBAAA,IAAI,CAAC,eAAe,GAAG,eAAe;gBACtC;AACJ,YAAA,KAAK,YAAY;AACb,gBAAA,IAAI,CAAC,eAAe,GAAG,UAAU;gBACjC;AACJ,YAAA;gBACI;;IAEZ;AAEA,IAAA,qBAAqB,CAAC,MAAM,EAAA;AACxB,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC5B;QACJ;AACA,QAAA,IAAI,CAAC,eAAe,GAAG,MAAM;IACjC;AAEA,IAAA,cAAc,CAAC,KAAU,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC5B;QACJ;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE;AACtC,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;QAC7B,KAAK,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;QAClC,CAAC,EAAE,IAAI,CAAC;IACZ;AAEA,IAAA,aAAa,CAAC,KAAU,EAAA;AACpB,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC5B;QACJ;QACA,MAAM,IAAI,GAAS,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QAE1C,IAAI,IAAI,EAAE;AACN,YAAA,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE;AACnC,YAAA,UAAU,CAAC,MAAM,GAAG,CAAC,eAAe,KAAI;AACpC,gBAAA,MAAM,oBAAoB,GAAQ,eAAe,CAAC,MAAM,EAAE,MAAM;AAChE,gBAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC,EAAE;AAClE,oBAAA,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI;AAC1B,oBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,SAAS,EACT,CAAA,gBAAA,CAAkB,EAClB,CAAA,2FAAA,CAA6F,CAChG;AACD,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,oBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,8DAA8D;gBAC1F;qBAAO;AACH,oBAAA,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC;AAC7B,oBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,oBAAoB;gBAChD;AACJ,YAAA,CAAC;AACD,YAAA,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC;QACxC;IACJ;AAEA,IAAA,kBAAkB,CAAC,MAAM,EAAA;AACrB,QAAA,QAAQ,MAAM,CAAC,EAAE;AACb,YAAA,KAAK,KAAK;gBACN,IAAI,CAAC,cAAc,EAAE;gBACrB;AACJ,YAAA,KAAK,MAAM;gBACP,IAAI,CAAC,eAAe,EAAE;gBACtB;;IAEZ;IAEA,cAAc,GAAA;QACV,MAAM,OAAO,GAAG,CAAA,UAAA,EAAa,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,QAAQ,GAAG,QAAQ,CAAA,gBAAA,EAAmB,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA,CAAA,CAAG,GAAG,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,QAAQ,GAAG,EAAE,CAAA,EAAA,EAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAA,EAAA,EAAK,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,UAAU,GAAG,EAAE,CAAA,EAAA,EAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAA,cAAA,EAAiB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAA,cAAA,EAAiB,IAAI,CAAC,QAAQ,CAAC,OAAO,wBAAwB,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAA,uBAAA,EAA0B,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAA,SAAA,EAAY,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAA,CAAA,CAAG;AAExd,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC;AACtC,QAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,WAAA,CAAa,EACb,CAAA,+BAAA,CAAiC,CACpC;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACzC;IAEA,eAAe,GAAA;AACX,QAAA,MAAM,OAAO,GAAG,CAAA,MAAA,EAAS,IAAI,CAAC,UAAU,CAAA;MAC1C,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,oBAAoB,GAAG,IAAI;;;AAG9B,oBAAA,EAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAA;kBAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG;AAEzC,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC;AACtC,QAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,WAAA,CAAa,EACb,CAAA,gCAAA,CAAkC,CACrC;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACzC;AAEA,IAAA,aAAa,CAAC,KAAU,EAAA;QACpB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE;QACpC,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,OAAO,EAAE;YAChC,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;AACvB,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,MAAqB;YAC3C,OAAO,CAAC,IAAI,EAAE;YACd,OAAO,CAAC,KAAK,EAAE;QACnB;QACA,KAAK,CAAC,MAAK;YACP,IAAI,CAAC,oBAAoB,EAAE;AAC/B,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAI,WAAW,GAAA;QACX,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;IACxG;IAEA,eAAe,GAAA;QACX,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;AAC/C,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CACpB,IAAI,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,qBAAqB,EAAE,yDAAyD,CAAC,CAC3H;IACL;AAEA,IAAA,MAAM,sBAAsB,GAAA;AACxB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,mBAAmB,GAAG,SAAS;AACpC,QAAA,IAAI,CAAC,sBAAsB,GAAG,SAAS;AACvC,QAAA,IAAI,CAAC,sBAAsB,GAAG,SAAS;AACvC,QAAA,IAAI,CAAC,uBAAuB,GAAG,SAAS;AACxC,QAAA,IAAI,CAAC,uBAAuB,GAAG,SAAS;AACxC,QAAA,IAAI,CAAC,mBAAmB,GAAG,SAAS;AACpC,QAAA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE;QACvC,IAAI,CAAC,SAAS,EAAE;AACZ,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;YACzB;QACJ;AACA,QAAA,MAAM,cAAc,GAAG,CAAA,EAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAA,2BAAA,EAA8B,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY;AACnH,QAAA,YAAY,CAAC,OAAO,CAAC,2BAA2B,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAChF,QAAA,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC3E,YAAA,IAAI,MAAM,CAAC,OAAO,EAAE;gBAChB,KAAK,CAAC,MAAK;AACP,oBAAA,IAAI,CAAC,YAAY,GAAG,KAAK;gBAC7B,CAAC,EAAE,IAAI,CAAC;YACZ;iBAAO;gBACH,KAAK,CAAC,MAAK;AACP,oBAAA,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,OAAO;AAC5C,oBAAA,IAAI,CAAC,sBAAsB,GAAG,2BAA2B;AACzD,oBAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC1B,wBAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,mBAAmB;oBAC3D;AACA,oBAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,oBAAA,IAAI,CAAC,YAAY,GAAG,KAAK;gBAC7B,CAAC,EAAE,GAAG,CAAC;YAEX;AACJ,QAAA,CAAC,CAAC;IACN;IAEA,mBAAmB,GAAA;AACf,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,4BAA4B,CAAC;AAC9F,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,4BAA4B,CAAC;AAC9F,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,qBAAqB,CAAC;AACxF,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,gBAAgB,CAAC;QACtE,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,2BAA2B,CAAC;AAClE,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YACpB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QAChD;AACA,QAAA,IAAI,MAAM,KAAK,SAAS,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;YACxB,IAAI,mBAAmB,EAAE;gBACrB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC;YAC9D;QACJ;aAAO;AACH,YAAA,IAAI,CAAC,sBAAsB,GAAG,kBAAkB;AAChD,YAAA,IAAI,CAAC,sBAAsB,GAAG,kBAAkB;YAChD,IAAI,mBAAmB,EAAE;gBACrB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC;AAC1D,gBAAA,IAAI,CAAC,uBAAuB,GAAG,yGAAyG;gBACxI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,gBAAgB,CAAC;YAC7E;QACJ;IACJ;IAEA,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAA;AAC/B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;AACZ,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI;AAC3B,YAAA,IAAI,CAAC,uBAAuB,GAAG,uCAAuC;QAC1E;aAAO;YACH,IAAI,QAAQ,GAAG,IAAI;YACnB,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AAC1B,gBAAA,IAAI,OAAO,KAAK,QAAQ,CAAC,QAAQ,EAAE;oBAC/B,QAAQ,GAAG,KAAK;gBACpB;AACJ,YAAA,CAAC,CAAC;YACF,IAAI,QAAQ,EAAE;AACV,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI;AAC3B,gBAAA,IAAI,CAAC,uBAAuB,GAAG,qEAAqE;YACxG;QACJ;IACJ;AAEA,IAAA,MAAM,QAAQ,GAAA;AACV,QAAA,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,KAAK;AAChC,QAAA,IAAI;YACA,MAAM,QAAQ,GAAQ,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,KAAI;AAC9F,gBAAA,IAAI,CAAC,sBAAsB,GAAG,qBAAqB;AACnD,gBAAA,IAAI,CAAC,sBAAsB,GAAG,CAAA,6BAAA,EAAgC,KAAK,CAAC,MAAM,CAAA,WAAA,EAAc,KAAK,CAAC,OAAO,CAAA,CAAE;AACvG,gBAAA,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,IAAI;AAC/B,gBAAA,OAAO,KAAK;AAChB,YAAA,CAAC,CAAC;YACF,IAAI,QAAQ,EAAE;;AAEV,gBAAA,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE;AACnD,oBAAA,IAAI,CAAC,sBAAsB,GAAG,qBAAqB;AACnD,oBAAA,IAAI,CAAC,sBAAsB,GAAG,CAAA,qDAAA,CAAuD;AACrF,oBAAA,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,IAAI;gBACnC;qBAAO;oBACH,MAAM,QAAQ,GAAQ,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC;AAC5D,oBAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,KAAI;AAC5C,wBAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,wBAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACjB,4BAAA,IAAI,CAAC,mBAAmB,IAAI,GAAG,GAAG,GAAG;AACzC,wBAAA,CAAC,CAAC;AACF,wBAAA,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;AAC9B,oBAAA,CAAC;AACD,oBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,2BAA2B,EAAE,QAAQ,CAAC;gBACnF;YACJ;QACJ;QAAE,OAAO,KAAU,EAAE;AACjB,YAAA,IAAI,CAAC,sBAAsB,GAAG,qBAAqB;YACnD,IAAI,CAAC,sBAAsB,GAAG,CAAA,EAAG,KAAK,CAAC,OAAO,EAAE;AAChD,YAAA,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,IAAI;QACnC;AACA,QAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,SAAS,EACT,IAAI,CAAC,sBAAsB,EAC3B,IAAI,CAAC,sBAAsB,CAC9B;AACD,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;AAC1B,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;QACzC;AACA,QAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY;IACpC;AAxlBS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,wGAsCnB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EACjB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAChB,iBAAiB,2MAQjB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAA8G,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAhDpB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,kXCnDnC,uxpBAybA,EAAA,MAAA,EAAA,CAAA,m3QAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAApH,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAqH,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,aAAA,EAAA,UAAA,EAAA,cAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,aAAA,EAAA,OAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,oBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDtYa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,cAGjB,KAAK,EAAA,QAAA,EAAA,uxpBAAA,EAAA,MAAA,EAAA,CAAA,m3QAAA,CAAA,EAAA;;0BAwCZ,MAAM;2BAAC,iBAAiB;;0BACxB,MAAM;2BAAC,gBAAgB;;0BACvB,MAAM;2BAAC,iBAAiB;;0BAQxB,MAAM;2BAAC,iBAAiB;;sBA9C5B;;sBACA;;sBA4BA,SAAS;uBAAC,YAAY;;sBACtB,SAAS;uBAAC,kBAAkB;;;AEnFjC;;;;;;;;;;;;;;AAcE;AAyBI,MAAO,uBAAwB,SAAQ,oBAAoB,CAAA;AAa7D,IAAA,WAAA,CACY,SAAwB,EACN,QAAyB,EACnD,aAAqC,EACrC,kBAAsC,EACX,UAA4B,EACpC,MAAc,EACzB,UAAqB,EAAA;QAE7B,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,CAAC;QAR9D,IAAA,CAAA,SAAS,GAAT,SAAS;QAKE,IAAA,CAAA,MAAM,GAAN,MAAM;QACjB,IAAA,CAAA,UAAU,GAAV,UAAU;AAlBd,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,cAAc;QAEpC,IAAA,CAAA,YAAY,GAAG,eAAe;QAC9B,IAAA,CAAA,cAAc,GAAQ,EAAE;QACxB,IAAA,CAAA,SAAS,GAAG,EAAE;AAEL,QAAA,IAAA,CAAA,SAAS,GAAG;AACjB,YAAA,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAC;AAChC,YAAA,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAC;SACrC;AA+ID,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,QAAQ,KAA8B;YAC9C,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAC,CAAC;AAC3C,QAAA,CAAC;IArID;IAEA,gBAAgB,GAAA;AAEZ,QAAA,MAAM,4BAA4B,GAAG;AACjC,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE;AACX,gBAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;AAC3B,gBAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE;AACjC,gBAAA,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE;AACzC;SACJ;AACD,QAAA,MAAM,8BAA8B,GAAG;AACnC,YAAA,UAAU,EAAE,UAAU;SACzB;QACD,OAAO;AACH,YAAA;AACI,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,UAAU,EAAE,MAAM;AAClB,gBAAA,eAAe,EAAE,2BAA2B;gBAC5C,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;AACjD,gBAAA,YAAY,EAAE,sBAAsB;AACpC,gBAAA,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,gBAAgB,EAAE,CAAC,IAAI,KAAI;wBACtE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC9C,4BAAA,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE;gCACpB;4BACJ;AACA,4BAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC;AAC/B,wBAAA,CAAC,CAAC;AACN,oBAAA,CAAC,EAAC;AACF,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;AACA,oBAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AACzD,wBAAA,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE;4BACpB;wBACJ;wBACA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;AACrC,oBAAA,CAAC,CAAC;gBACN,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAClC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,sBAAsB;AAC7B,gBAAA,KAAK,EAAE,sBAAsB;AAC7B,gBAAA,UAAU,EAAE,MAAM;AAClB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,4BAA4B;AACnD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,wBAAwB;AAC/B,gBAAA,KAAK,EAAE,wBAAwB;AAC/B,gBAAA,UAAU,EAAE,cAAc;AAC1B,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,4BAA4B;AACnD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,sBAAsB;AAC7B,gBAAA,KAAK,EAAE,sBAAsB;AAC7B,gBAAA,UAAU,EAAE,MAAM;AAClB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,4BAA4B;AACnD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,UAAU,EAAE,YAAY;AACxB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,8BAA8B;gBACrD,cAAc,EAAE,IAAI,CAAC,kBAAkB;AACvC,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACvC,aAAA;AACD,YAAA,IAAI,CAAC;SACR;IACL;AAEA,IAAA,sBAAsB,CAAC,UAAU,EAAA;AAC7B,QAAA,IAAI,UAAU,CAAC,EAAE,KAAK,SAAS,EAAE;YAC7B,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAC/C;AACA,QAAA,MAAM,mBAAmB,GACrB,CAAA;;mDAEuC;AAC3C,QAAA,MAAM,IAAI,GAAG;AACT,YAAA,QAAQ,EAAE,0BAA0B;AACpC,YAAA,KAAK,EAAE,eAAe;AACtB,YAAA,OAAO,EAAE,mBAAmB;AAC5B,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,WAAW,EAAE,6BAA6B;AAC1C,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,QAAQ,EAAE;SACb;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACpD,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,SAAS,EAAE,KAAK;AACnB,SAAA,CAAC;QACF,OAAO,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;IACvD;IAEA,OAAO,CAAC,OAAqB,EAAE,IAAU,EAAA;;AAErC,QAAA,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI;AAClE,aAAA,IAAI,CAAC,CAAC,OAAY,KAAI;AACnB,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AACpC,QAAA,CAAC,CAAC;IACV;AAMQ,IAAA,WAAW,CAAC,OAAY,EAAA;QAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;;YAEzB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;QACjD;AACA,QAAA,OAAO,OAAO;IAClB;AAEQ,IAAA,gBAAgB,CAAC,OAAY,EAAA;QACjC,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;YAC5B,GAAG,CAAC,UAAU,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACrC,YAAA,OAAO,GAAG;AACd,QAAA,CAAC,CAAC;IACN;AAEO,IAAA,UAAU,CAAC,IAAU,EAAA;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,aAAa;QAC9B,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,EAAE;AAC/B,YAAA,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC;QACxC;aAAO;AACH,YAAA,IAAI,CAAC,cAAc,GAAG,IAAIlH,SAAO,EAAE;QACvC;AACA,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;IAC7B;+GAvLS,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,EAAA,EAAA,KAAA,EAepB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAAC,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,kBAAA,EAAA,EAAA,EAAA,KAAA,EAGhB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAlBpB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cAFpB,MAAM,EAAA,CAAA,CAAA;;4FAET,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAgBQ,MAAM;2BAAC,gBAAgB;;0BAGvB,MAAM;2BAAC,iBAAiB;;;ACzDjC;;;;;;;;;;;;;;AAcE;AAoBI,MAAO,yBAA0B,SAAQ,iBAAiB,CAAA;IAM5D,WAAA,CACa,GAA4B,EACrC,aAAqC,EAC7B,QAAwB,EAChC,aAAmC,EACnC,UAAqB,EACc,UAA4B,EAAA;QAE/D,KAAK,CAAC,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC;QAPvD,IAAA,CAAA,GAAG,GAAH,GAAG;QAEJ,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAGmB,IAAA,CAAA,UAAU,GAAV,UAAU;QAXjD,IAAA,CAAA,KAAK,GAAG,eAAe;QAGvB,IAAA,CAAA,eAAe,GAAG,KAAK;IAWvB;IAES,QAAQ,GAAA;QACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC;QACnD,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;QACvC,KAAK,CAAC,QAAQ,EAAE;IACpB;AAEA,IAAA,mBAAmB,CAAC,MAAc,EAAA;QAC9B,QAAQ,MAAM;AACV,YAAA,KAAK,KAAK;AACN,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACJ,YAAA,KAAK,MAAM;AACP,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACJ,YAAA,KAAK,QAAQ;AACT,gBAAA,IAAI,mBAAmB,GAAiB,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;gBAC5E,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;oBAC9C,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,EAAE,KAAK,SAAS,EAAE;wBACtC,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,GAAG,CAAC;oBAC9D;oBACA,OAAO,GAAG,CAAC,QAAQ;AACvB,gBAAA,CAAC,CAAC;AACF,gBAAA,mBAAmB,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAChC,oBAAA,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE;wBACpB;oBACJ;AACA,oBAAA,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,GAAG,eAAe,GAAG,aAAa;AACxE,oBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,KAAK,CAAC;AAC7C,gBAAA,CAAC,CAAC;gBACF;YACJ;;IAER;AAEA,IAAA,WAAW,CAAC,KAAU,EAAA;QAClB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;AAChD,QAAA,QAAO,KAAK,EAAE,MAAM;AAChB,YAAA,KAAK,WAAW;AAChB,YAAA,KAAK,YAAY;AACb,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC5B;AACJ,YAAA,KAAK,QAAQ;AACT,gBAAA,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;oBACxD,IAAI,CAAC,MAAM,EAAE;wBACT;oBACJ;oBACA,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;AACzC,gBAAA,CAAC,CAAC;gBACF;AACJ,YAAA,KAAK,QAAQ;AACT,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACJ,YAAA,KAAK,QAAQ;AACT,gBAAA,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;oBACxD,IAAI,CAAC,MAAM,EAAE;wBACT;oBACJ;AACA,oBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;AAC/B,gBAAA,CAAC,CAAC;gBACF;AACJ,YAAA,KAAK,cAAc;gBACf,IAAI,CAAC,gBAAgB,EAAE;gBACvB;AACJ,YAAA,KAAK,mBAAmB;gBACpB,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC1C;AACJ,YAAA;gBACI;;IAEZ;IAEA,eAAe,CAAC,MAAc,EAAE,IAAS,EAAA;AACrC,QAAA,IAAI,CAAC,UAAU,EAAE,sBAAsB,EAAE,IAAI,CAAC;YAC1C,MAAM;AACN,YAAA,IAAI,EAAE,aAAa;YACnB,IAAI;AACJ,YAAA,IAAI,EAAC;AACR,SAAA,CAAC;IACN;AACA,IAAA,UAAU,CAAC,IAAS,EAAA;QAChB,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC;IAC9C;AAEA,IAAA,UAAU,CAAC,KAAU,EAAA;AACjB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,KAAK;AAC9B,QAAA,IAAG,KAAK,EAAE,OAAO,EAAE;YACf,IAAI,CAAC,WAAW,EAAE;QACtB;IACJ;AAEA,IAAA,WAAW,CAAC,KAAK,EAAA;AACb,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;IAChC;AA7GS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,8KAYtB,iBAAiB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAZpB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,qGClCtC,6uCAyBA,EAAA,MAAA,EAAA,CAAA,8GAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAe,uBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,WAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,cAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDSa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,cAGjB,KAAK,EAAA,QAAA,EAAA,6uCAAA,EAAA,MAAA,EAAA,CAAA,8GAAA,CAAA,EAAA;;0BAcZ,MAAM;2BAAC,iBAAiB;;;ME9CpB,UAAU,CAAA;AAAvB,IAAA,WAAA,GAAA;QACI,IAAA,CAAA,IAAI,GAAW,EAAE;QACjB,IAAA,CAAA,EAAE,GAAW,EAAE;AACf,QAAA,IAAA,CAAA,OAAO,GAAQ;AACX,YAAA,IAAI,EAAE;AACF,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,iBAAiB,EAAE,KAAK;AAC3B,aAAA;AACD,YAAA,MAAM,EAAE;AACJ,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,cAAc,EAAE;AACnB,aAAA;AACD,YAAA,IAAI,EAAE;AACF,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,sBAAsB,EAAE,CAAC;AACzB,gBAAA,WAAW,EAAE,CAAC;AACd,gBAAA,iBAAiB,EAAE,CAAC;AACpB,gBAAA,gBAAgB,EAAE,KAAK;AACvB,gBAAA,iBAAiB,EAAE,KAAK;AACxB,gBAAA,kBAAkB,EAAE;AACvB;SACJ;AACD,QAAA,IAAA,CAAA,SAAS,GAAQ;AACb,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,mBAAmB,EAAE;SACxB;QACD,IAAA,CAAA,IAAI,GAAQ,EAAE;IAClB;AAAC;;MCfY,qBAAqB,CAAA;AAwB9B,IAAA,WAAA,CACuC,WAA4B,EAC7B,UAA4B,EACtD,cAA8B,EAC9B,iBAAoC,EAAA;QAHT,IAAA,CAAA,WAAW,GAAX,WAAW;QACZ,IAAA,CAAA,UAAU,GAAV,UAAU;QACpC,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QA1B7B,IAAA,CAAA,KAAK,GAAU,EAAE;QACjB,IAAA,CAAA,MAAM,GAAU,EAAE;QAClB,IAAA,CAAA,YAAY,GAAG,KAAK;QAEpB,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,wBAAwB,GAAG,EAAE;QAC7B,IAAA,CAAA,2BAA2B,GAAG,EAAE;QAChC,IAAA,CAAA,iBAAiB,GAAG,KAAK;AAKzB,QAAA,IAAA,CAAA,MAAM,GAAG;AACL,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE;SACV;IAQD;IAEO,2BAA2B,GAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,sBAAsB,EAAE,EAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;YACnJ,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAI;gBACjD,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,EAAE;gBAC7D,OAAO,QAAQ,CAAC,IAAI;AACxB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,wBAAwB,GAAG,eAAe;AAC/C,YAAA,OAAO,eAAe;AAC1B,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,aAAa,CAAC,OAAO,GAAG,EAAE,EAAE,IAAI,GAAG,CAAC,EAAA;AAChC,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;QAC7B,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;AACrC,QAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACpB,YAAA,MAAM,CAAC,QAAQ,GAAG,KAAK;QAC3B;AACA,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,sBAAsB,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AACtF,YAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI;AACjC,QAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAClC,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAI,CAAC,QAAQ,EAAA;QACT,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,GAAQ,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACjE,QAAA,IAAI,IAAI;QACR,IAAI,QAAQ,EAAE;AACV,YAAA,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;QACzE;aAAO;AACH,YAAA,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,CAAC;QAC7D;QAEA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,MAAW,KAAI;YACnC,MAAM,EAAE,GAAG,QAAQ,GAAG,QAAQ,CAAC,EAAE,IAAI,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,MAAM,EAAE,EAAE,CAAC;YACpE,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,eAAe,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAI;gBACrF,OAAO,OAAO,CAAC,IAAI;AACvB,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,eAAoB,KAAI;gBACvE,IAAI,CAAC,eAAe,EAAE;AAClB,oBAAA,OAAO,MAAM;gBACjB;AACA,gBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,YAAA,EAAe,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA,CAAE,EACjD,CAAA,aAAA,EAAgB,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA,cAAA,EAAiB,QAAQ,CAAC,IAAI,CAAA,CAAE,CACnF;AACD,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,gBAAA,OAAO,MAAM;AACjB,YAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAI;AAChB,gBAAA,OAAO,KAAK;AAChB,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAI;YACd,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC;YAC3D,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,MAAA,EAAS,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAA,YAAA,CAAc,EACzD,YAAY,CACf;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,YAAA,MAAM,IAAI;AACd,QAAA,CAAC,CAAC;IACN;IAEA,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAA;AACrC,QAAA,MAAM,SAAS,GAAG,IAAI,UAAU,EAAE;AAClC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC;AACvC,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAC7B,QAAO,IAAI;AACP,gBAAA;oBACI,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;;AAE5C,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,SAAS;IACpB;+GA7GS,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAyBlB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EACjB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAApB,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAL,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AA1BpB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFlB,MAAM,EAAA,CAAA,CAAA;;4FAET,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BA0BQ,MAAM;2BAAC,iBAAiB;;0BACxB,MAAM;2BAAC,iBAAiB;;;ACtCjC;;;;;;;;;;;;;;AAcE;AA+BI,MAAO,uBAAwB,SAAQ,eAAe,CAAA;AAsBxD,IAAA,WAAA,CACW,GAA0B,EACzB,SAAwB,EAChC,cAA8B,EACH,UAA4B,EACV,eAAgC,EACzC,WAA4B,EAC7C,MAAc,EACd,KAAqB,EACxC,QAAkB,EACV,iBAAoC,EAAA;AAE5C,QAAA,KAAK,CAAC,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,CAAC;QAXjF,IAAA,CAAA,GAAG,GAAH,GAAG;QACF,IAAA,CAAA,SAAS,GAAT,SAAS;QAG4B,IAAA,CAAA,eAAe,GAAf,eAAe;QACxB,IAAA,CAAA,WAAW,GAAX,WAAW;QAC5B,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,KAAK,GAAL,KAAK;QAEhB,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QA9BX,IAAA,CAAA,MAAM,GAAQ,EAAE;AACxB,QAAA,IAAA,CAAA,KAAK,GAAuB,IAAI,YAAY,EAAQ;QAE9D,IAAA,CAAA,0BAA0B,GAAG,EAAE;QAE/B,IAAA,CAAA,QAAQ,GAAG,QAAQ;QACnB,IAAA,CAAA,OAAO,GAAU,EAAE;QACnB,IAAA,CAAA,SAAS,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,KAAK,GAAQ,EAAE;QACf,IAAA,CAAA,QAAQ,GAAQ,EAAE;QAClB,IAAA,CAAA,iBAAiB,GAAG,KAAK;QAChB,IAAA,CAAA,UAAU,GAAG,eAAe;QAC5B,IAAA,CAAA,WAAW,GAAG,UAAU;AAEjC,QAAA,IAAA,CAAA,gCAAgC,GAAG,QAAQ,CAAC,CAAC,UAAkB,KAAK,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC;QA0KjH,IAAA,CAAA,QAAQ,GAAQ,EAAE;IAzJlB;IAES,QAAQ,GAAA;QACb,KAAK,CAAC,QAAQ,EAAE;AAChB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;QACxB,IAAI,CAAC,GAAG,CAAC,2BAA2B,EAAE,CAAC,IAAI,CAAC,MAAK;YAC7C,IAAI,CAAC,sBAAsB,EAAE;AACjC,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,OAAW,KAAI;AAC1D,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;AAC3B,QAAA,CAAC,CAAC;IACN;IAEmB,aAAa,GAAA;QAC5B,KAAK,CAAC,aAAa,EAAE;IACzB;IAEA,WAAW,GAAA;QACP,IAAI,CAAC,SAAS,EAAE;IACpB;AAEA,IAAA,qBAAqB,CAAC,KAAK,EAAA;AACvB,QAAA,QAAO,KAAK,CAAC,IAAI;AACb,YAAA,KAAK,MAAM;AACP,gBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;gBAChB;AACJ,YAAA,KAAK,OAAO;gBACR,IAAI,CAAC,gBAAgB,EAAE;gBACvB;AACJ,YAAA,KAAK,aAAa;AACd,gBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI;gBAC1B;;IAEZ;AAEA,IAAA,oBAAoB,CAAC,MAAM,EAAA;AACvB,QAAA,QAAQ,MAAM,CAAC,EAAE;AACb,YAAA,KAAK,MAAM;gBACP,IAAI,CAAC,IAAI,EAAE;gBACX;AACJ,YAAA,KAAK,QAAQ;gBACT,IAAI,CAAC,YAAY,EAAE;gBACnB;;IAEZ;IAES,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,EAAE;QAC/B,IAAI,CAAC,SAAS,EAAE;IACpB;IAEA,SAAS,GAAA;QACL,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAS,KAAI;YAC7B,IAAI,IAAI,EAAE,SAAS;AAAE,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AACjD,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,UAAU,EAAE;QAChC,IAAI,IAAI,CAAC,YAAY;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;IAC1D;AAEA,IAAA,wBAAwB,CAAC,KAAK,EAAA;QAC1B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,0BAA0B,EAAE,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC;IACnJ;IAEA,qBAAqB,CAAC,eAAe,EAAE,iBAAiB,EAAA;QACpD,MAAM,wBAAwB,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AAC1D,YAAA,OAAO,iBAAiB,CAAC,IAAI,CAAC;AAClC,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,CAAC,GAAG,wBAAwB,CAAC;IACxC;IAEA,sBAAsB,GAAA;QAClB,MAAM,2BAA2B,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC;AAChF,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,IAAI,IAAG;YAC1D,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC;AAC3E,QAAA,CAAC,CAAC;IACN;IAEA,MAAM,IAAI,CAAC,KAAW,EAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE;YAC9B;QACJ;AACA,QAAA,IAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YACjB;QACJ;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE;AACnC,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACnB,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAI;gBAC3B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK;AACnC,YAAA,CAAC,CAAC;QACN;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;QAC5B,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE;AAC7B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACnC,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;gBAC3B;YACJ;AACA,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC7B,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;YACxB,IAAI,CAAC,gBAAgB,EAAE;AAC3B,QAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AAC1B,QAAA,CAAC,CAAC;IACN;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;QAChB,MAAM,MAAM,GAAG,EAAE;QACjB,MAAM,QAAQ,GAAG,EAAE;QACnB,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI;AACvB,YAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QACvB;QACA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YACvB,IAAI,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AACrC,YAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,YAAY,CAC1B,OAAO,EACP,SAAS,EACT,mBAAmB,EACnB,CAAA,iDAAA,EAAoD,aAAa,CAAA,CAAE,CACtE,CAAC;QACN;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AACpB,YAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,KAAI;AAC7B,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;QAC/B;AAEA,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,KAAI;AAC7B,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IAC/B;AAEA,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,sBAAsB,GAAG,mCAAmC,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA,CAAE,GAAG,EAAE,CAAC;IACxI;AAEA,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,MAAM,IAAI,GAAQ;AACd,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE;AAC9B,YAAA,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE;AACpC,YAAA,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE;AACxC,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI;SAC/B;AACD,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACpB,OAAO,IAAI,CAAC,QAAQ;IACxB;IAGA,IAAI,OAAO,CAAC,IAAI,EAAA;AACZ,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACxB;AAEA,IAAA,WAAW,CAAC,KAAK,EAAA;QACb,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;IAC3C;IAEA,iBAAiB,GAAA;AACb,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO;QACxE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE;YACrC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,GAAG,KAAK;QACxD;IACJ;IAEA,mBAAmB,GAAA;AACf,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO;IAChF;IAEA,iBAAiB,GAAA;AACb,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO;IAC5E;IAEA,uBAAuB,GAAA;AACnB,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB;IAChG;IAEA,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB;IAC9F;IAEA,iBAAiB,GAAA;AACb,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB;IAClG;IAEA,iBAAiB,GAAA;AACb,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB;IAClG;IAEA,iBAAiB,GAAA;AACb,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW;IAC9E;AAEA,IAAA,cAAc,CAAC,KAAU,EAAA;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE;AACtC,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;QAC7B,KAAK,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;QAClC,CAAC,EAAE,IAAI,CAAC;IACZ;AAEA,IAAA,aAAa,CAAC,KAAU,EAAA;QACpB,MAAM,IAAI,GAAS,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QAE1C,IAAI,IAAI,EAAE;AACN,YAAA,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE;AACnC,YAAA,UAAU,CAAC,MAAM,GAAG,CAAC,eAAe,KAAI;AACpC,gBAAA,MAAM,oBAAoB,GAAQ,eAAe,CAAC,MAAM,EAAE,MAAM;AAChE,gBAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC,EAAE;AAClE,oBAAA,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI;AAC1B,oBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,SAAS,EACT,CAAA,gBAAA,CAAkB,EAClB,CAAA,2FAAA,CAA6F,CAChG;AACD,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,oBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,8DAA8D;gBAC1F;qBAAO;AACH,oBAAA,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC;AAC7B,oBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,oBAAoB;gBAChD;AACJ,YAAA,CAAC;AACD,YAAA,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC;QACxC;IACJ;AAEA,IAAA,kBAAkB,CAAC,MAAM,EAAA;AACrB,QAAA,QAAQ,MAAM,CAAC,EAAE;AACb,YAAA,KAAK,KAAK;gBACN,IAAI,CAAC,cAAc,EAAE;gBACrB;AACJ,YAAA,KAAK,MAAM;gBACP,IAAI,CAAC,eAAe,EAAE;gBACtB;;IAEZ;IAEA,cAAc,GAAA;QACV,MAAM,OAAO,GAAG,CAAA,UAAA,EAAa,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,QAAQ,GAAG,QAAQ,gBAAgB,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA,CAAA,CAAG,GAAG,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,QAAQ,GAAG,EAAE,CAAA,EAAA,EAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAA,0BAAA,EAA6B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAA,kCAAA,EAAqC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAA,6BAAA,EAAgC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAA,oCAAA,EAAuC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,4BAA4B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAA,6BAAA,EAAgC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAA,6BAAA,EAAgC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAA,2BAAA,EAA8B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAA,gCAAA,EAAmC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAA,8BAAA,EAAiC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAA,8BAAA,EAAiC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAA,kCAAA,EAAqC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,mBAAmB,CAAA,wBAAA,EAA2B,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAA,eAAA,EAAkB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG;AAEhsC,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC;AACtC,QAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,WAAA,CAAa,EACb,CAAA,+BAAA,CAAiC,CACpC;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACzC;IAEA,eAAe,GAAA;AACX,QAAA,MAAM,OAAO,GAAG,CAAA,MAAA,EAAS,IAAI,CAAC,UAAU,CAAA;MAC1C,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,oBAAoB,GAAG,IAAI;;;AAG9B,oBAAA,EAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAA;kBAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG;AAEzC,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC;AACtC,QAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,WAAA,CAAa,EACb,CAAA,gCAAA,CAAkC,CACrC;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACzC;AAEA,IAAA,aAAa,CAAC,KAAU,EAAA;QACpB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE;QACpC,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,OAAO,EAAE;YAChC,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;AACvB,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,MAAqB;YAC3C,OAAO,CAAC,IAAI,EAAE;YACd,OAAO,CAAC,KAAK,EAAE;QACnB;IACJ;AAEA,IAAA,sBAAsB,CAAC,UAAkB,EAAA;QACrC,MAAM,OAAO,GAAG,EAAE;AAClB,QAAA,IAAI,UAAU,IAAI,UAAU,KAAK,EAAE,EAAE;YACjC,OAAO,CAAC,IAAI,CAAC;AACT,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,UAAU,EAAE,MAAM;AAClB,gBAAA,IAAI,EAAE,WAAW;AACpB,aAAA,CAAC;QACN;QACA,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACtC;AAEA,IAAA,yBAAyB,CAAC,KAAK,EAAA;AAC3B,QAAA,IAAI,CAAC,GAAG,CAAC,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,KAAI;YACnE,OAAO,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,mBAAmB;AACvE,QAAA,CAAC,CAAC;IACN;AAjVS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAyH,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAA5F,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,EAAA,EAAA,KAAA,EA0BpB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EACjB,gBAAgB,aAChB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAApC,IAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAgI,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA5BpB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,2QC7CpC,qkgBA0VA,EAAA,MAAA,EAAA,CAAA,mpLAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAhI,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAgE,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAArB,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAuB,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,aAAA,EAAA,UAAA,EAAA,cAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,aAAA,EAAA,OAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,oBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAiB,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,cAAA,EAAA,eAAA,EAAA,YAAA,EAAA,WAAA,EAAA,cAAA,EAAA,aAAA,EAAA,+BAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,8BAAA,EAAA,+BAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA0C,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA1B,qBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,aAAA,EAAA,YAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,aAAA,EAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FD7Sa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,cAGjB,KAAK,EAAA,QAAA,EAAA,qkgBAAA,EAAA,MAAA,EAAA,CAAA,mpLAAA,CAAA,EAAA;;0BA4BZ,MAAM;2BAAC,iBAAiB;;0BACxB,MAAM;2BAAC,gBAAgB;;0BACvB,MAAM;2BAAC,iBAAiB;;sBA1B5B;;sBACA;;sBAiBA,SAAS;uBAAC,YAAY;;;AEjE3B;;;;;;;;;;;;;;AAcE;AAyBI,MAAO,iCAAkC,SAAQ,oBAAoB,CAAA;AAcvE,IAAA,WAAA,CACY,SAAwB,EACN,QAAyB,EACnD,aAAqC,EACrC,kBAAsC,EACX,UAA4B,EACpC,MAAc,EACzB,UAAqB,EAAA;QAE7B,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,CAAC;QAR9D,IAAA,CAAA,SAAS,GAAT,SAAS;QAKE,IAAA,CAAA,MAAM,GAAN,MAAM;QACjB,IAAA,CAAA,UAAU,GAAV,UAAU;AAnBd,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,cAAc;QAEpC,IAAA,CAAA,YAAY,GAAG,KAAK;QACpB,IAAA,CAAA,cAAc,GAAQ,EAAE;QACxB,IAAA,CAAA,SAAS,GAAG,EAAE;AAEL,QAAA,IAAA,CAAA,SAAS,GAAG;AACjB,YAAA,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAC;AAChC,YAAA,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAC;AAClC,YAAA,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAC;SACrC;AAoJD,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,QAAQ,KAA8B;YAC9C,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAC,CAAC;AAC3C,QAAA,CAAC;IA1ID;IAEA,gBAAgB,GAAA;AAEZ,QAAA,MAAM,6BAA6B,GAAG;AAClC,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE;AACX,gBAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;AAC3B,gBAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE;AAClC,gBAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE;AACxC;SACJ;AACD,QAAA,MAAM,sBAAsB,GAAG;AAC3B,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE;AACX,gBAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;AAC3B,gBAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE;AACjC,gBAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE;AACtC;SACJ;AACD,QAAA,MAAM,8BAA8B,GAAG;AACnC,YAAA,UAAU,EAAE,UAAU;SACzB;AACD,QAAA,MAAM,iBAAiB,GAAG,CAAC,GAAG,KAAI;YAC9B,IAAI,IAAI,GAAG,EAAE;AACb,YAAA,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE;gBACtC,IAAI,GAAG,4BAA4B;YACvC;AACA,YAAA,OAAO,IAAI;AACf,QAAA,CAAC;QACD,OAAO;AACH,YAAA;AACI,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,UAAU,EAAE,MAAM;AAClB,gBAAA,eAAe,EAAE,2BAA2B;gBAC5C,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;AACjD,gBAAA,YAAY,EAAE,sBAAsB;AACpC,gBAAA,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AAC/C,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;oBACA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;gBACrC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAClC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,YAAY;AACnB,gBAAA,KAAK,EAAE,YAAY;AACnB,gBAAA,UAAU,EAAE,UAAU;AACtB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,6BAA6B;AACpD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,2BAA2B;AAClC,gBAAA,KAAK,EAAE,2BAA2B;AAClC,gBAAA,UAAU,EAAE,iBAAiB;AAC7B,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,sBAAsB;AAC7C,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,0BAA0B;AACjC,gBAAA,KAAK,EAAE,0BAA0B;AACjC,gBAAA,UAAU,EAAE,UAAU;AACtB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,sBAAsB;AAC7C,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,eAAe;AACtB,gBAAA,KAAK,EAAE,eAAe;AACtB,gBAAA,UAAU,EAAE,cAAc;AAC1B,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,sBAAsB;AAC7C,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,YAAY,EAAE,iBAAiB;AAC/B,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,gBAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;AAC7B,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,UAAU,EAAE,YAAY;AACxB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,8BAA8B;gBACrD,cAAc,EAAE,IAAI,CAAC,kBAAkB;AACvC,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACvC,aAAA;AACD,YAAA,IAAI,CAAC;SACR;IACL;IAEA,OAAO,CAAC,OAAqB,EAAE,IAAU,EAAA;;AAErC,QAAA,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI;AAClE,aAAA,IAAI,CAAC,CAAC,OAAY,KAAI;AACnB,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AACpC,QAAA,CAAC,CAAC;IACV;AAMQ,IAAA,WAAW,CAAC,OAAY,EAAA;QAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;;YAEzB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;QACjD;AACA,QAAA,OAAO,OAAO;IAClB;AAEQ,IAAA,gBAAgB,CAAC,OAAY,EAAA;QACjC,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;AAC5B,YAAA,IAAI,UAAU,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACrC,YAAA,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE;gBACjB,UAAU,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;YAC/C;AACA,YAAA,GAAG,CAAC,UAAU,GAAG,UAAU;AAC3B,YAAA,OAAO,GAAG;AACd,QAAA,CAAC,CAAC;IACN;AAEO,IAAA,UAAU,CAAC,IAAU,EAAA;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QACtB,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,EAAE;AAC/B,YAAA,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC;QACxC;aAAO;AACH,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI3F,SAAO,EAAE;QACvC;AACA,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;IAC7B;IAEO,UAAU,CAAC,MAAM,EAAE,QAAS,EAAA;AAC/B,QAAA,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC,QAAQ;QAC9C,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,MAAM,CAAA,OAAA,CAAS,CAAC;IAC9D;AAEO,IAAA,MAAM,CAAC,EAAE,EAAA;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,EAAC,KAAK,EAAE,EAAE,EAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;YAC3F,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AAC3C,YAAA,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,0CAA0C,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;YACrG,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,GAAC,MAAM,CAAC;AAC3C,YAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AAC9B,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;YAClC,OAAO,CAAC,KAAK,EAAE;AACf,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AACtC,QAAA,CAAC,CAAC;IACN;+GAlNS,iCAAiC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,EAAA,EAAA,KAAA,EAgB9B,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAAC,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,kBAAA,EAAA,EAAA,EAAA,KAAA,EAGhB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAnBpB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iCAAiC,cAF9B,MAAM,EAAA,CAAA,CAAA;;4FAET,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAH7C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAiBQ,MAAM;2BAAC,gBAAgB;;0BAGvB,MAAM;2BAAC,iBAAiB;;;AC1DjC;;;;;;;;;;;;;;AAcE;AAoBI,MAAO,mCAAoC,SAAQ,iBAAiB,CAAA;IAMtE,WAAA,CACa,GAAsC,EAC/C,aAAqC,EAC7B,QAAwB,EAChC,aAAmC,EACnC,UAAqB,EACc,UAA4B,EAAA;QAE/D,KAAK,CAAC,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC;QAPvD,IAAA,CAAA,GAAG,GAAH,GAAG;QAEJ,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAGmB,IAAA,CAAA,UAAU,GAAV,UAAU;QAXjD,IAAA,CAAA,KAAK,GAAG,yBAAyB;QAGjC,IAAA,CAAA,eAAe,GAAG,KAAK;IAWvB;IAES,QAAQ,GAAA;QACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC;QACnD,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;QACvC,KAAK,CAAC,QAAQ,EAAE;IACpB;AAEA,IAAA,mBAAmB,CAAC,MAAc,EAAA;QAC9B,QAAQ,MAAM;AACV,YAAA,KAAK,KAAK;AACN,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACJ,YAAA,KAAK,MAAM;AACP,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACJ,YAAA,KAAK,QAAQ;gBACT,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;oBAC9C,OAAO,GAAG,CAAC,QAAQ;AACvB,gBAAA,CAAC,CAAC;AACF,gBAAA,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,GAAG,yBAAyB,GAAG,uBAAuB;AAC5F,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,KAAK,CAAC;gBACzC;YACJ;;IAER;AAEA,IAAA,WAAW,CAAC,KAAU,EAAA;QAClB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;AAChD,QAAA,QAAO,KAAK,EAAE,MAAM;AAChB,YAAA,KAAK,WAAW;AAChB,YAAA,KAAK,YAAY;AACb,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC5B;AACJ,YAAA,KAAK,QAAQ;gBACT,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;gBACrC;AACJ,YAAA,KAAK,QAAQ;AACT,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACJ,YAAA,KAAK,QAAQ;AACT,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC3B;AACJ,YAAA,KAAK,QAAQ;gBACT,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC;AACJ,YAAA,KAAK,cAAc;gBACf,IAAI,CAAC,gBAAgB,EAAE;gBACvB;AACJ,YAAA,KAAK,mBAAmB;gBACpB,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC1C;AACJ,YAAA;gBACI;;IAEZ;IAEA,eAAe,CAAC,MAAc,EAAE,IAAS,EAAA;AACrC,QAAA,IAAI,CAAC,UAAU,EAAE,sBAAsB,EAAE,IAAI,CAAC;YAC1C,MAAM;AACN,YAAA,IAAI,EAAE,uBAAuB;YAC7B,IAAI;AACJ,YAAA,IAAI,EAAC;AACR,SAAA,CAAC;IACN;AACA,IAAA,UAAU,CAAC,IAAS,EAAA;QAChB,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,uBAAuB,CAAC;IACxD;AAEA,IAAA,UAAU,CAAC,KAAU,EAAA;AACjB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,KAAK;AAC9B,QAAA,IAAG,KAAK,EAAE,OAAO,EAAE;YACf,IAAI,CAAC,WAAW,EAAE;QACtB;IACJ;AAEA,IAAA,WAAW,CAAC,KAAK,EAAA;AACb,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;IAChC;AAES,IAAA,SAAS,CAAC,KAAK,EAAA;QACpB,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,KAAK,KAAI;YAChD,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,KAAK,EAAE;AACnC,gBAAA,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE;AACzC,oBAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,oBAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAK;AACzC,wBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AAC1B,oBAAA,CAAC,CAAC;gBACN;YACJ;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC;IAC1B;AA3GS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mCAAmC,wLAYhC,iBAAiB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAZpB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mCAAmC,qGClChD,iiCA4BA,EAAA,MAAA,EAAA,CAAA,uHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAe,uBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,WAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,cAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAqB,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDMa,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAN/C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,cAGjB,KAAK,EAAA,QAAA,EAAA,iiCAAA,EAAA,MAAA,EAAA,CAAA,uHAAA,CAAA,EAAA;;0BAcZ,MAAM;2BAAC,iBAAiB;;;ME9CpB,oBAAoB,CAAA;AAAjC,IAAA,WAAA,GAAA;QACI,IAAA,CAAA,IAAI,GAAW,EAAE;QACjB,IAAA,CAAA,EAAE,GAAW,EAAE;QACf,IAAA,CAAA,yBAAyB,GAAY,KAAK;QAC1C,IAAA,CAAA,wBAAwB,GAAY,KAAK;QACzC,IAAA,CAAA,aAAa,GAAU,EAAE;QACzB,IAAA,CAAA,kBAAkB,GAAW,EAAE;QAC/B,IAAA,CAAA,aAAa,GAAY,KAAK;QAC9B,IAAA,CAAA,OAAO,GAAW,EAAE;QACpB,IAAA,CAAA,eAAe,GAAQ,SAAS;QAChC,IAAA,CAAA,IAAI,GAAQ,EAAE;QACd,IAAA,CAAA,gBAAgB,GAAW,EAAE;IACjC;AAAC;;MCCY,+BAA+B,CAAA;AAwBxC,IAAA,WAAA,CACuC,WAA4B,EAC7B,UAA4B,EACtD,cAA8B,EAC9B,iBAAoC,EAAA;QAHT,IAAA,CAAA,WAAW,GAAX,WAAW;QACZ,IAAA,CAAA,UAAU,GAAV,UAAU;QACpC,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QA1B7B,IAAA,CAAA,KAAK,GAAU,EAAE;QACjB,IAAA,CAAA,MAAM,GAAU,EAAE;QAClB,IAAA,CAAA,YAAY,GAAG,KAAK;QAEpB,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,wBAAwB,GAAG,EAAE;QAC7B,IAAA,CAAA,2BAA2B,GAAG,EAAE;QAChC,IAAA,CAAA,iBAAiB,GAAG,KAAK;AAKzB,QAAA,IAAA,CAAA,MAAM,GAAG;AACL,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE;SACV;IAQD;AAEA,IAAA,IAAI,CAAC,QAAQ,EAAA;QACT,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,GAAQ,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACjE,QAAA,IAAI,IAAI;QACR,IAAI,QAAQ,EAAE;AACV,YAAA,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;QAC/D;aAAO;AACH,YAAA,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;QACnD;QAEA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,MAAW,KAAI;YACnC,MAAM,EAAE,GAAG,QAAQ,GAAG,QAAQ,CAAC,EAAE,IAAI,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,MAAM,EAAE,EAAE,CAAC;YACpE,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAI;gBAC3E,OAAO,OAAO,CAAC,IAAI;AACvB,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,eAAoB,KAAI;gBACvE,IAAI,CAAC,eAAe,EAAE;AAClB,oBAAA,OAAO,MAAM;gBACjB;AACA,gBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,sBAAA,EAAyB,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA,CAAE,EAC3D,CAAA,aAAA,EAAgB,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA,wBAAA,EAA2B,QAAQ,CAAC,IAAI,CAAA,CAAE,CAC7F;AACD,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,gBAAA,OAAO,MAAM;AACjB,YAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAI;AAChB,gBAAA,OAAO,KAAK;AAChB,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAI;YACd,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC;YAC3D,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,MAAA,EAAS,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAA,sBAAA,CAAwB,EACnE,YAAY,CACf;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,YAAA,MAAM,IAAI;AACd,QAAA,CAAC,CAAC;IACN;IAEA,yBAAyB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,0BAA0B,EAAE,EAAE,EAAE,EAAE,CAAC;IACnE;IAEA,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAA;AACrC,QAAA,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE;AAC5C,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC;AACvC,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAC7B,QAAO,IAAI;AACP,gBAAA;oBACI,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;;AAE5C,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,SAAS;IACpB;+GAzFS,+BAA+B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAyB5B,iBAAiB,EAAA,EAAA,EAAA,KAAA,EACjB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAAzC,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAL,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AA1BpB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,+BAA+B,cAF5B,MAAM,EAAA,CAAA,CAAA;;4FAET,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAH3C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BA0BQ,MAAM;2BAAC,iBAAiB;;0BACxB,MAAM;2BAAC,iBAAiB;;;ACvCjC;;;;;;;;;;;;;;AAcE;AA+BI,MAAO,iCAAkC,SAAQ,eAAe,CAAA;AA0BlE,IAAA,WAAA,CACW,GAAoC,EACnC,SAAwB,EAChC,cAA8B,EACH,UAA4B,EACV,eAAgC,EACzC,WAA4B,EAC7C,MAAc,EACd,KAAqB,EACxC,QAAkB,EACV,iBAAoC,EAAA;AAE5C,QAAA,KAAK,CAAC,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,CAAC;QAXjF,IAAA,CAAA,GAAG,GAAH,GAAG;QACF,IAAA,CAAA,SAAS,GAAT,SAAS;QAG4B,IAAA,CAAA,eAAe,GAAf,eAAe;QACxB,IAAA,CAAA,WAAW,GAAX,WAAW;QAC5B,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,KAAK,GAAL,KAAK;QAEhB,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QAlCX,IAAA,CAAA,MAAM,GAAQ,EAAE;AACxB,QAAA,IAAA,CAAA,KAAK,GAAuB,IAAI,YAAY,EAAQ;QAE9D,IAAA,CAAA,gBAAgB,GAAG,KAAK;QAExB,IAAA,CAAA,QAAQ,GAAG,QAAQ;QACnB,IAAA,CAAA,OAAO,GAAU,EAAE;QACnB,IAAA,CAAA,SAAS,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,KAAK,GAAQ,EAAE;QACf,IAAA,CAAA,QAAQ,GAAQ,EAAE;QAClB,IAAA,CAAA,iBAAiB,GAAG,KAAK;QACzB,IAAA,CAAA,sBAAsB,GAAG,EAAE;QAC3B,IAAA,CAAA,MAAM,GAAU,EAAE;QACT,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,WAAW,GAAG,oBAAoB;QAE3C,IAAA,CAAA,SAAS,GAAG,CAAC,aAAa,EAAE,SAAS,EAAE,WAAW,CAAC;QACnD,IAAA,CAAA,QAAQ,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAChD,QAAA,IAAA,CAAA,OAAO,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;QAoN3B,IAAA,CAAA,QAAQ,GAAQ,EAAE;IAnMlB;IAES,QAAQ,GAAA;QACb,KAAK,CAAC,QAAQ,EAAE;QAChB,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,KAAI;YAClD,IAAI,CAAC,sBAAsB,GAAG,OAAO,EAAE,IAAI,IAAI,EAAE;AACrD,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,OAAW,KAAI;AAC1D,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;AAC3B,QAAA,CAAC,CAAC;IACN;IAEmB,aAAa,GAAA;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;AAC9C,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAC,CAAC;QAChF;AAAO,aAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;AACzB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAC,CAAC;QAC3D;QACA,KAAK,CAAC,aAAa,EAAE;IACzB;IAEA,WAAW,GAAA;QACP,IAAI,CAAC,SAAS,EAAE;IACpB;AAEA,IAAA,qBAAqB,CAAC,KAAK,EAAA;AACvB,QAAA,QAAO,KAAK,CAAC,IAAI;AACb,YAAA,KAAK,MAAM;AACP,gBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;gBAChB;AACJ,YAAA,KAAK,OAAO;gBACR,IAAI,CAAC,gBAAgB,EAAE;gBACvB;AACJ,YAAA,KAAK,aAAa;AACd,gBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI;gBAC1B;;IAEZ;AAEA,IAAA,oBAAoB,CAAC,MAAM,EAAA;AACvB,QAAA,QAAQ,MAAM,CAAC,EAAE;AACb,YAAA,KAAK,MAAM;gBACP,IAAI,CAAC,IAAI,EAAE;gBACX;AACJ,YAAA,KAAK,QAAQ;gBACT,IAAI,CAAC,YAAY,EAAE;gBACnB;;IAEZ;IAEA,sBAAsB,GAAA;QAClB,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;AACxD,YAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,GAAG;AAC5B,gBAAA,QAAQ,EAAE,EAAE;AACZ,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,eAAe,EAAE,EAAE;AACnB,gBAAA,cAAc,EAAE;aACnB;QACL;IACJ;IAES,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,EAAE;QAC/B,IAAI,CAAC,SAAS,EAAE;IACpB;IAEA,SAAS,GAAA;QACL,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAS,KAAI;YAC7B,IAAI,IAAI,EAAE,SAAS;AAAE,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AACjD,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,oBAAoB,EAAE;QAC1C,IAAI,IAAI,CAAC,YAAY;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;IAC1D;IAEA,MAAM,IAAI,CAAC,KAAW,EAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE;YAC9B;QACJ;AACA,QAAA,IAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YACjB;QACJ;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE;AACnC,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACnB,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAI;gBAC3B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK;AACnC,YAAA,CAAC,CAAC;QACN;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;QAC5B,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE;AAC7B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACnC,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;gBAC3B;YACJ;AACA,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC7B,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;YACxB,IAAI,CAAC,gBAAgB,EAAE;AAC3B,QAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AAC1B,QAAA,CAAC,CAAC;IACN;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;QAChB,MAAM,MAAM,GAAG,EAAE;QACjB,MAAM,QAAQ,GAAG,EAAE;QACnB,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI;AACvB,YAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QACvB;AACA,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,IAAI,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;AAC7B,gBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,IAAI;AAChC,gBAAA,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;YAC3B;AACA,YAAA,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACtB,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI;AACzB,gBAAA,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;YACzB;AACA,YAAA,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACvB,gBAAA,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI;AAC1B,gBAAA,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;YAC1B;AACA,YAAA,IAAI,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;AAC9B,gBAAA,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI;AACjC,gBAAA,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC;YAClC;AACA,YAAA,IAAI,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;AAC/B,gBAAA,IAAI,CAAC,MAAM,CAAC,eAAe,GAAG,IAAI;AAClC,gBAAA,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC;YACnC;AACA,YAAA,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE;AACrC,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI;AACxB,gBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;YACxB;QACJ;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AAC3D,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI;AAC1B,YAAA,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;QAC3B;QACA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YACvB,IAAI,WAAW,GAAG,EAAE;YACpB,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;AAC5B,gBAAA,WAAW,IAAI,CAAA,IAAA,EAAO,KAAK,CAAA,KAAA,CAAO;AACtC,YAAA,CAAC,CAAC;AACF,YAAA,WAAW,GAAG,CAAA,IAAA,EAAO,WAAW,CAAA,KAAA,CAAO;AACvC,YAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,YAAY,CAC1B,OAAO,EACP,SAAS,EACT,mBAAmB,EACnB,CAAA,iDAAA,EAAoD,WAAW,CAAA,CAAE,CACpE,CAAC;QACN;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AACpB,YAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,KAAI;AAC7B,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;QAC/B;AAEA,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,KAAI;AAC7B,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IAC/B;AAEA,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,sBAAsB,GAAG,yBAAyB,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA,CAAE,GAAG,EAAE,CAAC;IAC9H;AAEA,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,MAAM,IAAI,GAAQ;AACd,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE;AAC9B,YAAA,yBAAyB,EAAE,IAAI,CAAC,QAAQ,CAAC,yBAAyB;AAClE,YAAA,wBAAwB,EAAE,IAAI,CAAC,QAAQ,CAAC,wBAAwB;AAChE,YAAA,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,IAAI,EAAE;AAChD,YAAA,kBAAkB,EAAE,IAAI,CAAC,QAAQ,CAAC,kBAAkB;AACpD,YAAA,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa;AAC1C,YAAA,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO;AAE9B,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI;SAC/B;AACD,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,eAAe,GAAI,IAAI,CAAC,QAAQ,CAAC,eAAe;QACzD;AACA,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACpB,OAAO,IAAI,CAAC,QAAQ;IACxB;IAGA,IAAI,OAAO,CAAC,IAAI,EAAA;AACZ,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACxB;AAEA,IAAA,WAAW,CAAC,KAAK,EAAA;QACb,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;IAC3C;AAEA,IAAA,IAAI,eAAe,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;AAC/B,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;QAChC;QACA,OAAO,IAAI,CAAC,gBAAgB;IAChC;IAEA,IAAI,eAAe,CAAC,GAAG,EAAA;QACnB,IAAI,CAAC,GAAG,EAAE;AACN,YAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,GAAG,SAAS;QAC7C;AACA,QAAA,IAAI,CAAC,gBAAgB,GAAG,GAAG;IAC/B;AAEA,IAAA,YAAY,CAAC,IAAI,EAAA;AACb,QAAA,IAAI,IAAI,KAAK,iBAAiB,EAAE;AAC5B,YAAA,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,eAAe;QAChD;AACA,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC9C;AAEA,IAAA,cAAc,CAAC,KAAU,EAAA;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE;AACtC,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;QAC7B,KAAK,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;QAClC,CAAC,EAAE,IAAI,CAAC;IACZ;AAEA,IAAA,aAAa,CAAC,KAAU,EAAA;QACpB,MAAM,IAAI,GAAS,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QAE1C,IAAI,IAAI,EAAE;AACN,YAAA,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE;AACnC,YAAA,UAAU,CAAC,MAAM,GAAG,CAAC,eAAe,KAAI;AACpC,gBAAA,MAAM,oBAAoB,GAAQ,eAAe,CAAC,MAAM,EAAE,MAAM;AAChE,gBAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC,EAAE;AAClE,oBAAA,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI;AAC1B,oBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,SAAS,EACT,CAAA,gBAAA,CAAkB,EAClB,CAAA,2FAAA,CAA6F,CAChG;AACD,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,oBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,8DAA8D;gBAC1F;qBAAO;AACH,oBAAA,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC;AAC7B,oBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,oBAAoB;gBAChD;AACJ,YAAA,CAAC;AACD,YAAA,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC;QACxC;IACJ;AAEA,IAAA,kBAAkB,CAAC,MAAM,EAAA;AACrB,QAAA,QAAQ,MAAM,CAAC,EAAE;AACb,YAAA,KAAK,KAAK;gBACN,IAAI,CAAC,cAAc,EAAE;gBACrB;AACJ,YAAA,KAAK,MAAM;gBACP,IAAI,CAAC,eAAe,EAAE;gBACtB;;IAEZ;IAEA,cAAc,GAAA;QACV,IAAI,OAAO,GAAG,CAAA,UAAA,EAAa,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,QAAQ,GAAG,QAAQ,CAAA,IAAA,EAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,QAAQ,GAAG,EAAE,CAAA,EAAA,EAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAA,EAAA,EAAK,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAA,yBAAA,EAA4B,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAA,UAAA,EAAa,IAAI,CAAC,QAAQ,CAAC,aAAa,aAAa,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAA,YAAA,EAAe,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAA,WAAA,EAAc,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAA,CAAA,CAAG;AAC7d,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,OAAO,IAAI,gBAAgB,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAA,aAAA,EAAgB,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAA,YAAA,EAAe,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,cAAc,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAA,sBAAA,EAAyB,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,eAAe,CAAA,qBAAA,EAAwB,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,CAAA,CAAA,CAAG;QAC3W;AAEA,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC;AACtC,QAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,WAAA,CAAa,EACb,CAAA,+BAAA,CAAiC,CACpC;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACzC;IAEA,eAAe,GAAA;AACX,QAAA,MAAM,OAAO,GAAG,CAAA,MAAA,EAAS,IAAI,CAAC,UAAU,CAAA;MAC1C,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,oBAAoB,GAAG,IAAI;;;AAG9B,oBAAA,EAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAA;kBAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG;AAEzC,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC;AACtC,QAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,WAAA,CAAa,EACb,CAAA,gCAAA,CAAkC,CACrC;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACzC;AAEA,IAAA,iBAAiB,CAAC,KAAK,EAAA;QACnB,KAAK,CAAC,eAAe,EAAE;QACvB,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA,OAAA,CAAS,CAAC;IAC7E;AAEA,IAAA,IAAI,aAAa,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,QAAQ;IAClD;IAEA,IAAI,aAAa,CAAC,GAAG,EAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;YAChC;QACJ;QACA,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,GAAG,GAAG;IAChD;AAEA,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO;IACjD;IAEA,IAAI,OAAO,CAAC,OAAO,EAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;YAChC;QACJ;QACA,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,GAAG,OAAO;IACnD;AAEA,IAAA,IAAI,MAAM,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM;IAChD;IAEA,IAAI,MAAM,CAAC,MAAM,EAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;YAChC;QACJ;QACA,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,GAAG,MAAM;IACjD;AAEA,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,KAAK;IAC/C;IAEA,IAAI,KAAK,CAAC,KAAK,EAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;YAChC;QACJ;QACA,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,GAAG,KAAK;IAC/C;AAEA,IAAA,IAAI,eAAe,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,eAAe;IACzD;IAEA,IAAI,eAAe,CAAC,eAAe,EAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;YAChC;QACJ;QACA,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,eAAe,GAAG,eAAe;IACnE;AAEA,IAAA,IAAI,cAAc,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,cAAc;IACxD;IAEA,IAAI,cAAc,CAAC,cAAc,EAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;YAChC;QACJ;QACA,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,GAAG,cAAc;IACjE;AA7ZS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iCAAiC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA4H,+BAAA,EAAA,EAAA,EAAA,KAAA,EAAA/F,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,EAAA,EAAA,KAAA,EA8B9B,iBAAiB,EAAA,EAAA,EAAA,KAAA,EACjB,gBAAgB,aAChB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAApC,IAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAgI,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAhCpB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iCAAiC,mRC7C9C,4xdA+SA,EAAA,MAAA,EAAA,CAAA,wvHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAhI,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAgE,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAArB,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAuB,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,aAAA,EAAA,UAAA,EAAA,cAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,aAAA,EAAA,OAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,oBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAiB,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,cAAA,EAAA,eAAA,EAAA,YAAA,EAAA,WAAA,EAAA,cAAA,EAAA,aAAA,EAAA,+BAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,8BAAA,EAAA,+BAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA0C,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDlQa,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAN7C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,2BAA2B,cAGzB,KAAK,EAAA,QAAA,EAAA,4xdAAA,EAAA,MAAA,EAAA,CAAA,wvHAAA,CAAA,EAAA;;0BAgCZ,MAAM;2BAAC,iBAAiB;;0BACxB,MAAM;2BAAC,gBAAgB;;0BACvB,MAAM;2BAAC,iBAAiB;;sBA9B5B;;sBACA;;sBAqBA,SAAS;uBAAC,YAAY;;;ME1Dd,wBAAwB,CAAA;AAgBjC,IAAA,WAAA,CACuC,WAA4B,EAC7B,UAA4B,EACtD,cAA8B,EAC9B,iBAAoC,EAAA;QAHT,IAAA,CAAA,WAAW,GAAX,WAAW;QACZ,IAAA,CAAA,UAAU,GAAV,UAAU;QACpC,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QAlB7B,IAAA,CAAA,KAAK,GAAU,EAAE;QACjB,IAAA,CAAA,MAAM,GAAU,EAAE;QAClB,IAAA,CAAA,YAAY,GAAG,KAAK;AAEpB,QAAA,IAAA,CAAA,MAAM,GAAG;AACL,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE;SACV;IAQD;IAEA,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAA;QACf,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA,IAAA,EAAO,QAAQ,CAAC,EAAE,CAAA,OAAA,CAAS,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,OAAO,MAAW,KAAI;AAC3G,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,oBAAA,CAAsB,EACtB,CAAA,gEAAA,CAAkE,CACrE;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAI;YACd,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC;AAC3D,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,2BAAA,CAA6B,EAC7B,YAAY,CACf;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,YAAA,MAAM,YAAY;AACtB,QAAA,CAAC,CAAC;IACN;+GA5CS,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAiBrB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EACjB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAAtH,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAL,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAlBpB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cAFrB,MAAM,EAAA,CAAA,CAAA;;4FAET,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAkBQ,MAAM;2BAAC,iBAAiB;;0BACxB,MAAM;2BAAC,iBAAiB;;;AC7BjC;;;;;;;;;;;;;;AAcE;AA+BI,MAAO,0BAA2B,SAAQ,eAAe,CAAA;AA4B3D,IAAA,WAAA,CACW,GAA6B,EAC5B,SAAwB,EAChC,cAA8B,EACH,UAA4B,EACV,eAAgC,EACzC,WAA4B,EAC7C,MAAc,EACd,KAAqB,EACxC,QAAkB,EACV,iBAAoC,EAAA;AAE5C,QAAA,KAAK,CAAC,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,CAAC;QAXjF,IAAA,CAAA,GAAG,GAAH,GAAG;QACF,IAAA,CAAA,SAAS,GAAT,SAAS;QAG4B,IAAA,CAAA,eAAe,GAAf,eAAe;QACxB,IAAA,CAAA,WAAW,GAAX,WAAW;QAC5B,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,KAAK,GAAL,KAAK;QAEhB,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QApCX,IAAA,CAAA,MAAM,GAAQ,EAAE;AACxB,QAAA,IAAA,CAAA,KAAK,GAAuB,IAAI,YAAY,EAAQ;QAE9D,IAAA,CAAA,gBAAgB,GAAG,KAAK;QAExB,IAAA,CAAA,QAAQ,GAAG,QAAQ;QACnB,IAAA,CAAA,OAAO,GAAU,EAAE;QACnB,IAAA,CAAA,SAAS,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,KAAK,GAAQ,EAAE;QACf,IAAA,CAAA,QAAQ,GAAQ,EAAE;QAClB,IAAA,CAAA,iBAAiB,GAAG,KAAK;QACzB,IAAA,CAAA,sBAAsB,GAAG,EAAE;QAClB,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,WAAW,GAAG,oBAAoB;QAE3C,IAAA,CAAA,SAAS,GAAG,CAAC,aAAa,EAAE,SAAS,EAAE,WAAW,CAAC;QACnD,IAAA,CAAA,QAAQ,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAChD,QAAA,IAAA,CAAA,OAAO,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;QAE3B,IAAA,CAAA,WAAW,GAAG,EAAE;QAChB,IAAA,CAAA,gBAAgB,GAAG,EAAE;QAqIrB,IAAA,CAAA,QAAQ,GAAQ,EAAE;IApHlB;IAES,QAAQ,GAAA;QACb,KAAK,CAAC,QAAQ,EAAE;QAChB,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,OAAW,KAAI;AAC1D,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;AAC3B,QAAA,CAAC,CAAC;IACN;IAEmB,aAAa,GAAA;QAC5B,KAAK,CAAC,aAAa,EAAE;IACzB;IAEA,WAAW,GAAA;QACP,IAAI,CAAC,SAAS,EAAE;IACpB;AAEA,IAAA,qBAAqB,CAAC,KAAK,EAAA;AACvB,QAAA,QAAO,KAAK,CAAC,IAAI;AACb,YAAA,KAAK,MAAM;AACP,gBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;gBAChB;AACJ,YAAA,KAAK,OAAO;gBACR,IAAI,CAAC,gBAAgB,EAAE;gBACvB;AACJ,YAAA,KAAK,aAAa;AACd,gBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI;gBAC1B;;IAEZ;IAES,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,EAAE;QAC/B,IAAI,CAAC,SAAS,EAAE;IACpB;IAEA,SAAS,GAAA;QACL,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAS,KAAI;YAC7B,IAAI,IAAI,EAAE,SAAS;AAAE,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AACjD,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,oBAAoB,EAAE;QAC1C,IAAI,IAAI,CAAC,YAAY;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;IAC1D;AAES,IAAA,eAAe,CAAC,GAAG,EAAA;AACxB,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC;AAClC,QAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,MAAM,EACN,aAAa,EACb,CAAA,YAAA,CAAc,EACd,CAAA,yBAAA,CAA2B,CAC9B;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACzC;IAEA,MAAM,IAAI,CAAC,KAAW,EAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE;YAC9B;QACJ;AACA,QAAA,IAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YACjB;QACJ;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE;AACnC,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACnB,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAI;gBAC3B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK;AACnC,YAAA,CAAC,CAAC;QACN;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;QAC5B,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE;AAC7B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACrD,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;gBAC3B;YACJ;AACA,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC7B,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;YACxB,IAAI,CAAC,gBAAgB,EAAE;AAC3B,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,KAAI;AACtB,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI;AAC1B,YAAA,IAAI,CAAC,gBAAgB,GAAG,YAAY;AACxC,QAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AAC1B,QAAA,CAAC,CAAC;IACN;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;QAChB,MAAM,MAAM,GAAG,EAAE;QACjB,MAAM,QAAQ,GAAG,EAAE;AACnB,QAAA,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AAC3B,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI;AAC1B,YAAA,IAAI,CAAC,gBAAgB,GAAG,4CAA4C;AACpE,YAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,YAAY,CAC1B,OAAO,EACP,SAAS,EACT,qBAAqB,EACrB,IAAI,CAAC,gBAAgB,CACxB,CAAC;QACN;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IAC/B;AAEA,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,sBAAsB,GAAG,wCAAwC,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA,CAAE,GAAG,EAAE,CAAC;IAC7I;AAEA,IAAA,IAAI,OAAO,GAAA;QACP,MAAM,IAAI,GAAQ,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACpB,OAAO,IAAI,CAAC,QAAQ;IACxB;IAGA,IAAI,OAAO,CAAC,IAAI,EAAA;AACZ,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACxB;AAEA,IAAA,WAAW,CAAC,KAAK,EAAA;QACb,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;IAC3C;AAGA,IAAA,cAAc,CAAC,KAAU,EAAA;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE;AACtC,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;QAC7B,KAAK,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;QAClC,CAAC,EAAE,IAAI,CAAC;IACZ;AAEA,IAAA,aAAa,CAAC,KAAU,EAAA;QACpB,MAAM,IAAI,GAAS,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QAE1C,IAAI,IAAI,EAAE;AACN,YAAA,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE;AACnC,YAAA,UAAU,CAAC,MAAM,GAAG,CAAC,eAAe,KAAI;AACpC,gBAAA,MAAM,oBAAoB,GAAQ,eAAe,CAAC,MAAM,EAAE,MAAM;AAChE,gBAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC,EAAE;AAClE,oBAAA,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI;AAC1B,oBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,SAAS,EACT,CAAA,YAAA,CAAc,EACd,CAAA,8FAAA,CAAgG,CACnG;AACD,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,oBAAA,IAAI,CAAC,WAAW,GAAG,2DAA2D;gBAClF;qBAAO;AACH,oBAAA,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC;AAC7B,oBAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB;gBAC3C;AACJ,YAAA,CAAC;AACD,YAAA,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC;QACxC;IACJ;AAvMS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA6H,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAhG,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,EAAA,EAAA,KAAA,EAgCvB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EACjB,gBAAgB,aAChB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAApC,IAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAgI,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAlCpB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,mRC7CvC,s+GA2EA,EAAA,MAAA,EAAA,CAAA,kzFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAhI,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAgE,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAArB,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAuB,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,aAAA,EAAA,UAAA,EAAA,cAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,aAAA,EAAA,OAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,oBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAiB,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FD9Ba,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBANtC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,2BAA2B,cAGzB,KAAK,EAAA,QAAA,EAAA,s+GAAA,EAAA,MAAA,EAAA,CAAA,kzFAAA,CAAA,EAAA;;0BAkCZ,MAAM;2BAAC,iBAAiB;;0BACxB,MAAM;2BAAC,gBAAgB;;0BACvB,MAAM;2BAAC,iBAAiB;;sBAhC5B;;sBACA;;sBAuBA,SAAS;uBAAC,YAAY;;;AEvE3B;;;;;;;;;;;;;;AAcE;MAiBW,oBAAoB,CAAA;IAU/B,WAAA,CACoC,GAAsB,EACtB,eAAqC,EACvC,IAAS,EACjC,MAAc,EACd,SAA6C,EAAA;QAJnB,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,eAAe,GAAf,eAAe;QACjB,IAAA,CAAA,IAAI,GAAJ,IAAI;QAC5B,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,SAAS,GAAT,SAAS;QAbnB,IAAA,CAAA,OAAO,GAAG,EAAE;QACZ,IAAA,CAAA,sBAAsB,GAAG,EAAE;QAC3B,IAAA,CAAA,QAAQ,GAAG,EAAE;QACb,IAAA,CAAA,QAAQ,GAAG,EAAE;QACb,IAAA,CAAA,WAAW,GAAG,KAAK;QACnB,IAAA,CAAA,kBAAkB,GAAG,EAAE;QACvB,IAAA,CAAA,iBAAiB,GAAG,KAAK;AASvB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,IAAI;QAC/B,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,eAAe,EAAE,QAAQ,EAAE,sBAAsB;IACtF;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,OAAY,KAAI;AAC7D,YAAA,IAAI,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE;gBAC/B;YACF;AACA,YAAA,IAAI,OAAO;AAAE,gBAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;AAC7C,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,gBAAgB,CAAC,QAAa,EAAA;AAC5B,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;QAC5B,IAAI,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,CAAC,EAAE;AACxC,YAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;YAC5B,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;AAC9C,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE;oBACnB;gBACF;gBACA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAC,IAAI,EAAC,UAAU,CAAC,IAAI,GAAG,KAAK,UAAU,CAAC,GAAG,CAAA,CAAA,CAAG,EAAE,KAAK,EAAE,UAAU,CAAC,GAAG,EAAC,CAAC;AACtG,YAAA,CAAC,CAAC;QACJ;QACA,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,uBAAuB,CAAC;AAChE,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YACxB,MAAM,OAAO,GAAQ,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI;AAChD,YAAA,IAAI,CAAC,sBAAsB,GAAG,OAAO,CAAC,IAAI,EAAE;QAC9C;aAAO;AACL,YAAA,IAAI,CAAC,sBAAsB,GAAG,QAAQ,CAAC,sBAAsB;QAC/D;IACF;AAEA,IAAA,WAAW,CAAC,KAAM,EAAA;AAChB,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAC/B,YAAA,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC;QAC1E;AACA,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,EAAE,IAAI,EAAE;IAC5F;IAEA,KAAK,GAAA;AACD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW;AACpD,QAAA,MAAM,MAAM,GAAG,WAAW,IAAI,WAAW,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE;AAC5E,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CACV,MAAM,EACN,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,EAClC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EACpB,IAAI,CAAC,QAAQ,EACb,KAAK,CACR,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAChB,YAAA,IAAI,MAAM,EAAE,KAAK,EAAE;gBACjB;YACF;AACA,YAAA,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,KAAK;YAChC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;YACvD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAC,UAAU,EAAE,IAAI,EAAC,CAAC;AAC1C,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACzB,QAAA,CAAC,CAAC;IACN;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,KAAK;AAChC,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;IACxB;IAEA,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,KAAK;QAChC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAC,aAAa,EAAE,IAAI,EAAC,CAAC;IAC7C;AAxFW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAWrB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EACjB,gBAAgB,aAChB,eAAe,EAAA,EAAA,EAAA,KAAA,EAAAjG,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAbd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,wEC/BjC,69EA4DA,EAAA,MAAA,EAAA,CAAA,+rEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAe,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,sBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,YAAA,EAAA,UAAA,EAAA,aAAA,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FD7Ba,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,cAGX,KAAK,EAAA,QAAA,EAAA,69EAAA,EAAA,MAAA,EAAA,CAAA,+rEAAA,CAAA,EAAA;;0BAahB,MAAM;2BAAC,iBAAiB;;0BACxB,MAAM;2BAAC,gBAAgB;;0BACvB,MAAM;2BAAC,eAAe;;;AE5C3B;;;;;;;;;;;;;;AAcE;AAsBI,MAAO,sBAAuB,SAAQ,oBAAoB,CAAA;IAa5D,WAAA,CACY,SAAwB,EACN,QAAyB,EACnD,aAAqC,EACrC,kBAAsC,EACX,UAA4B,EACpC,MAAc,EAAA;QAEjC,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,CAAC;QAP9D,IAAA,CAAA,SAAS,GAAT,SAAS;QAKE,IAAA,CAAA,MAAM,GAAN,MAAM;AAjBrB,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,cAAc;QAEpC,IAAA,CAAA,YAAY,GAAG,cAAc;QAC7B,IAAA,CAAA,cAAc,GAAQ,EAAE;QACxB,IAAA,CAAA,SAAS,GAAG,EAAE;AAEL,QAAA,IAAA,CAAA,SAAS,GAAG;AACjB,YAAA,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAC;AAChC,YAAA,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAC;SACrC;IAWD;IAEA,gBAAgB,GAAA;AAEZ,QAAA,MAAM,8BAA8B,GAAG;AACnC,YAAA,UAAU,EAAE,UAAU;SACzB;QACD,OAAO;AACH,YAAA;AACI,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,UAAU,EAAE,MAAM;AAClB,gBAAA,eAAe,EAAE,2BAA2B;gBAC5C,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;AACjD,gBAAA,YAAY,EAAE,sBAAsB;AACpC,gBAAA,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AAC/C,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;oBACA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;gBACrC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,UAAU,EAAE,YAAY;AACxB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,8BAA8B;gBACrD,cAAc,EAAE,IAAI,CAAC,kBAAkB;AACvC,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;AAC1B,aAAA;AACD,YAAA,IAAI,CAAC;SACR;IACL;IAEA,OAAO,CAAC,OAAqB,EAAE,IAAU,EAAA;;AAErC,QAAA,OAAO,KAAK,CAAC,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI;AAC/D,aAAA,IAAI,CAAC,CAAC,OAAY,KAAI;AACnB,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AACpC,QAAA,CAAC,CAAC;IACV;AAEQ,IAAA,WAAW,CAAC,OAAY,EAAA;QAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;;YAEzB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;QACjD;AACA,QAAA,OAAO,OAAO;IAClB;AAEQ,IAAA,gBAAgB,CAAC,OAAY,EAAA;AACjC,QAAA,MAAM,mBAAmB,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,yBAAyB,EAAE,yBAAyB,CAAC;QACxH,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;YAC5B,GAAG,CAAC,UAAU,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;YACrC,IAAI,mBAAmB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACxC,gBAAA,GAAG,CAAC,QAAQ,GAAG,IAAI;YACvB;AACA,YAAA,OAAO,GAAG;AACd,QAAA,CAAC,CAAC;IACN;AAEO,IAAA,UAAU,CAAC,IAAU,EAAA;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;QACzB,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,EAAE;AAC/B,YAAA,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC;QACxC;aAAO;AACH,YAAA,IAAI,CAAC,cAAc,GAAG,IAAIkB,SAAO,EAAE;QACvC;AACA,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;IAC7B;+GAtGS,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,EAAA,EAAA,KAAA,EAenB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAAC,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,kBAAA,EAAA,EAAA,EAAA,KAAA,EAGhB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAlBpB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cAFnB,MAAM,EAAA,CAAA,CAAA;;4FAET,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAgBQ,MAAM;2BAAC,gBAAgB;;0BAGvB,MAAM;2BAAC,iBAAiB;;;ACtDjC;;;;;;;;;;;;;;AAcE;AAmBI,MAAO,wBAAyB,SAAQ,iBAAiB,CAAA;IAO3D,WAAA,CACa,GAA2B,EACpC,aAAqC,EAC7B,QAAwB,EAChC,aAAmC,EACnC,UAAqB,EACc,UAA4B,EAAA;QAE/D,KAAK,CAAC,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC;QAPvD,IAAA,CAAA,GAAG,GAAH,GAAG;QAEJ,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAGmB,IAAA,CAAA,UAAU,GAAV,UAAU;QAZjD,IAAA,CAAA,KAAK,GAAG,cAAc;QAGtB,IAAA,CAAA,eAAe,GAAG,KAAK;AACd,QAAA,IAAA,CAAA,aAAa,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,yBAAyB,EAAE,yBAAyB,CAAC;IAWrH;IAES,QAAQ,GAAA;QACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;QAC7C,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;QACvC,KAAK,CAAC,QAAQ,EAAE;IACpB;AAEA,IAAA,mBAAmB,CAAC,MAAc,EAAA;QAC9B,QAAQ,MAAM;AACV,YAAA,KAAK,KAAK;AACN,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACJ,YAAA,KAAK,MAAM;AACP,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACJ,YAAA,KAAK,QAAQ;gBACT,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;oBAC9C,OAAO,GAAG,CAAC,QAAQ;AACvB,gBAAA,CAAC,CAAC;AACF,gBAAA,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,GAAG,cAAc,GAAG,aAAa;AACvE,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,KAAK,CAAC;gBACzC;YACJ;;IAER;AAEA,IAAA,WAAW,CAAC,KAAU,EAAA;QAClB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;AAChD,QAAA,QAAO,KAAK,EAAE,MAAM;AAChB,YAAA,KAAK,WAAW;AAChB,YAAA,KAAK,YAAY;AACb,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC5B;AACJ,YAAA,KAAK,QAAQ;gBACT,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;gBACrC;AACJ,YAAA,KAAK,QAAQ;AACT,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACJ,YAAA,KAAK,QAAQ;AACT,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC3B;AACJ,YAAA,KAAK,cAAc;gBACf,IAAI,CAAC,gBAAgB,EAAE;gBACvB;AACJ,YAAA,KAAK,mBAAmB;gBACpB,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC1C;AACJ,YAAA;gBACI;;IAEZ;IAEA,eAAe,CAAC,MAAc,EAAE,IAAS,EAAA;AACrC,QAAA,IAAI,CAAC,UAAU,EAAE,sBAAsB,EAAE,IAAI,CAAC;YAC1C,MAAM;AACN,YAAA,IAAI,EAAE,aAAa;YACnB,IAAI;AACJ,YAAA,IAAI,EAAC;AACR,SAAA,CAAC;IACN;AACA,IAAA,UAAU,CAAC,IAAS,EAAA;QAChB,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC;IAC9C;AAEA,IAAA,UAAU,CAAC,KAAU,EAAA;AACjB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,KAAK;AAC9B,QAAA,IAAG,KAAK,EAAE,OAAO,EAAE;YACf,IAAI,CAAC,WAAW,EAAE;QACtB;IACJ;AAEA,IAAA,WAAW,CAAC,KAAK,EAAA;AACb,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;IAChC;AAEA,IAAA,uBAAuB,CAAC,uBAAuB,EAAE,aAAa,EAAE,KAAK,EAAA;QACjE,MAAM,WAAW,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;YACrD,OAAO,IAAI,CAAC,IAAI;AACpB,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,IAAI,GAAG;AACT,YAAA,QAAQ,EAAE,mCAAmC;AAC7C,YAAA,KAAK,EAAE,oBAAoB;AAC3B,YAAA,OAAO,EAAE,CAAA,yDAAA,CAA2D;AACpE,YAAA,UAAU,EAAE,uGAAuG;AACnH,YAAA,UAAU,EAAE,WAAW;AACvB,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,WAAW,EAAE,6BAA6B;AAC1C,YAAA,QAAQ,EAAE,+BAA+B;AACzC,YAAA,cAAc,EAAE;SACnB;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACpD,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,SAAS,EAAE,KAAK;AACnB,SAAA,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AAC9C,YAAA,IAAI,MAAM,EAAE,SAAS,EAAE;AACnB,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,KAAK,CAAC;YAC7C;AACJ,QAAA,CAAC,CAAC;IACN;AArHS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,6KAarB,iBAAiB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAbpB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,sGCjCrC,sgCA2BC,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAe,uBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,WAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,cAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAqB,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDMY,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,cAGlB,KAAK,EAAA,QAAA,EAAA,sgCAAA,EAAA;;0BAeZ,MAAM;2BAAC,iBAAiB;;;ME9CpB,UAAU,CAAA;AAAvB,IAAA,WAAA,GAAA;QACI,IAAA,CAAA,IAAI,GAAG,EAAE;QACT,IAAA,CAAA,EAAE,GAAG,EAAE;QACP,IAAA,CAAA,MAAM,GAAG,EAAE;QACX,IAAA,CAAA,IAAI,GAAQ,EAAE;IAClB;AAAC;AAAA;;MCUY,qBAAqB,CAAA;IAS9B,WAAA,CACuC,WAA4B,EAC7B,UAA4B,EACtD,SAAwB,EACxB,cAA8B,EAC9B,iBAAoC,EAAA;QAJT,IAAA,CAAA,WAAW,GAAX,WAAW;QACZ,IAAA,CAAA,UAAU,GAAV,UAAU;QACpC,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QAbrB,IAAA,CAAA,WAAW,GAAU,EAAE;QAE/B,IAAA,CAAA,KAAK,GAAU,EAAE;QACjB,IAAA,CAAA,MAAM,GAAU,EAAE;QAClB,IAAA,CAAA,YAAY,GAAG,KAAK;QACpB,IAAA,CAAA,cAAc,GAAG,KAAK;QACtB,IAAA,CAAA,eAAe,GAAG,kBAAkB;IASpC;IAEA,MAAM,SAAS,CAAC,UAAkB,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,OAAO,CAAC,OAAO,EAAE;AACzC,QAAA,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YACpD,IAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,UAAU;gBACtC,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM;QAC3C;IACJ;AAEA,IAAA,IAAI,CAAC,QAAQ,EAAA;QACT,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,GAAQ,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACjE,QAAA,IAAI,IAAI;QACR,IAAI,QAAQ,EAAE;AACV,YAAA,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;QAC1E;aAAO;AACH,YAAA,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,CAAC;QAC5D;QAEA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,MAAW,KAAI;YACnC,MAAM,EAAE,GAAG,QAAQ,GAAG,QAAQ,CAAC,EAAE,IAAI,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,MAAM,EAAE,EAAE,CAAC;YACpE,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAI;gBACpF,OAAO,OAAO,CAAC,IAAI;AACvB,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,eAAoB,KAAI;gBACvE,IAAI,CAAC,eAAe,EAAE;AAClB,oBAAA,OAAO,MAAM;gBACjB;AACA,gBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,YAAA,EAAe,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA,CAAE,EACjD,CAAA,aAAA,EAAgB,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA,cAAA,EAAiB,QAAQ,CAAC,IAAI,CAAA,CAAE,CACnF;AACD,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,gBAAA,OAAO,MAAM;AACjB,YAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAI;AAChB,gBAAA,OAAO,KAAK;AAChB,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAI;YACd,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC;YAC3D,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,MAAA,EAAS,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAA,YAAA,CAAc,EACzD,YAAY,CACf;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,YAAA,MAAM,IAAI;AACd,QAAA,CAAC,CAAC;IACN;IAEA,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAA;AACrC,QAAA,MAAM,SAAS,GAAG,IAAI,UAAU,EAAE;AAClC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC;AACvC,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAC7B,QAAO,IAAI;AACP,gBAAA;oBACI,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;;AAE5C,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,SAAS;IACpB;+GA/ES,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAUlB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EACjB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAAvC,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAhB,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAwD,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAXpB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFlB,MAAM,EAAA,CAAA,CAAA;;4FAET,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAWQ,MAAM;2BAAC,iBAAiB;;0BACxB,MAAM;2BAAC,iBAAiB;;;AC1BjC;;;;;;;;;;;;;;AAcE;AAkCI,MAAO,uBAAwB,SAAQ,eAAe,CAAA;IAsBxD,WAAA,CACW,GAA0B,EACzB,SAAwB,EAChC,cAA8B,EACH,UAA4B,EACV,eAAgC,EACzC,WAA4B,EAC7C,MAAc,EACd,KAAqB,EACxC,QAAkB,EACV,iBAAoC,EAC5C,UAAqB,EAAA;AAErB,QAAA,KAAK,CAAC,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,CAAC;QAZ7F,IAAA,CAAA,GAAG,GAAH,GAAG;QACF,IAAA,CAAA,SAAS,GAAT,SAAS;QAG4B,IAAA,CAAA,eAAe,GAAf,eAAe;QACxB,IAAA,CAAA,WAAW,GAAX,WAAW;QAC5B,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,KAAK,GAAL,KAAK;QAEhB,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QA9BX,IAAA,CAAA,MAAM,GAAQ,EAAE;AACxB,QAAA,IAAA,CAAA,KAAK,GAAuB,IAAI,YAAY,EAAQ;QAE9D,IAAA,CAAA,OAAO,GAAU,EAAE;QACnB,IAAA,CAAA,SAAS,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,IAAA,CAAA,QAAQ,GAAG,QAAQ;QACnB,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,KAAK,GAAQ,EAAE;QACf,IAAA,CAAA,cAAc,GAAQ,EAAE;QACxB,IAAA,CAAA,kBAAkB,GAAG,EAAE;QACvB,IAAA,CAAA,sBAAsB,GAAG,EAAE;QAC3B,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,QAAQ,GAAQ,EAAE;QAClB,IAAA,CAAA,oBAAoB,GAAG,EAAE;QAEhB,IAAA,CAAA,UAAU,GAAG,cAAc;QAC3B,IAAA,CAAA,WAAW,GAAG,UAAU;QAwMjC,IAAA,CAAA,QAAQ,GAAQ,EAAE;IAvLlB;IAES,QAAQ,GAAA;QACb,KAAK,CAAC,QAAQ,EAAE;QAChB,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,OAAW,KAAI;AAC1D,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;AAC3B,QAAA,CAAC,CAAC;IACN;IAES,aAAa,GAAA;QACtB,KAAK,CAAC,aAAa,EAAE;AACjB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE;AAC3D,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE;QAC7B;QACA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY;QACtD,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AACxC,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC/C;IAEA,WAAW,GAAA;QACP,IAAI,CAAC,SAAS,EAAE;IACpB;AAEA,IAAA,IAAI,eAAe,GAAA;QACf,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;IAC9C;AAEA,IAAA,qBAAqB,CAAC,KAAK,EAAA;AACvB,QAAA,QAAO,KAAK,CAAC,IAAI;AACb,YAAA,KAAK,MAAM;AACP,gBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;gBAChB;AACJ,YAAA,KAAK,OAAO;gBACR,IAAI,CAAC,gBAAgB,EAAE;gBACvB;AACJ,YAAA,KAAK,aAAa;AACd,gBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI;gBAC1B;AACJ,YAAA,KAAK,QAAQ;gBACT,IAAI,CAAC,YAAY,EAAE;gBACnB;;IAEZ;AAEA,IAAA,oBAAoB,CAAC,MAAM,EAAA;AACvB,QAAA,QAAQ,MAAM,CAAC,EAAE;AACb,YAAA,KAAK,MAAM;gBACP,IAAI,CAAC,IAAI,EAAE;gBACX;AACJ,YAAA,KAAK,QAAQ;gBACT,IAAI,CAAC,YAAY,EAAE;gBACnB;;IAEZ;AAEA,IAAA,kBAAkB,CAAC,MAAM,EAAA;AACrB,QAAA,QAAQ,MAAM,CAAC,EAAE;AACb,YAAA,KAAK,KAAK;gBACN,IAAI,CAAC,cAAc,EAAE;gBACrB;AACJ,YAAA,KAAK,MAAM;gBACP,IAAI,CAAC,eAAe,EAAE;gBACtB;;IAEZ;IAEA,cAAc,GAAA;AACV,QAAA,MAAM,OAAO,GAAG,CAAA,UAAA,EAAa,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,QAAQ,GAAG,QAAQ,CAAA,aAAA,EAAgB,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA,CAAA,CAAG,GAAG,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,QAAQ,GAAG,EAAE,CAAA,EAAA,EAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAA,YAAA,EAAe,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG;AAEvS,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC;AACtC,QAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,WAAA,CAAa,EACb,CAAA,+BAAA,CAAiC,CACpC;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACzC;IAEA,eAAe,GAAA;AACX,QAAA,MAAM,OAAO,GAAG,CAAA,MAAA,EAAS,IAAI,CAAC,UAAU,CAAA;MAC1C,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,oBAAoB,GAAG,IAAI;;;AAG9B,oBAAA,EAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAA;kBAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG;AAEzC,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC;AACtC,QAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,WAAA,CAAa,EACb,CAAA,gCAAA,CAAkC,CACrC;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACzC;IAES,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,EAAE;QAC/B,IAAI,CAAC,SAAS,EAAE;IACpB;IAEA,SAAS,GAAA;QACL,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAS,KAAI;YAC7B,IAAI,IAAI,EAAE,SAAS;AAAE,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AACjD,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;QAClB,IAAI,IAAI,CAAC,YAAY;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;IAC1D;IAEA,MAAM,IAAI,CAAC,KAAW,EAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE;YAC9B;QACJ;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YACtB;QACJ;AACA,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;YAChE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AACtB,gBAAA,IAAI,CAAC,QAAQ,GAAG,MAAM;gBACtB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC5C;YACA,OAAO,MAAM,EAAE,EAAE;AACrB,QAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AAC1B,QAAA,CAAC,CAAC;QACF,IAAI,QAAQ,EAAE;AACV,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC7B,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;YAC/B;iBAAO;gBACH,IAAI,CAAC,gBAAgB,EAAE;YAC3B;QACJ;QAAC;IACL;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;QAChB,MAAM,MAAM,GAAG,EAAE;QACjB,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI;AAC1B,YAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QACvB;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC3D,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI;AAC5B,YAAA,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;QACzB;QACA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YACvB,IAAI,WAAW,GAAG,EAAE;YACpB,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;AAC5B,gBAAA,WAAW,IAAI,CAAA,IAAA,EAAO,KAAK,CAAA,KAAA,CAAO;AACtC,YAAA,CAAC,CAAC;AACF,YAAA,WAAW,GAAG,CAAA,IAAA,EAAO,WAAW,CAAA,KAAA,CAAO;AACvC,YAAA,MAAM,OAAO,GAAG,IAAI,YAAY,CAC5B,OAAO,EACP,SAAS,EACT,mBAAmB,EACnB,CAAA,uCAAA,EAA0C,WAAW,CAAA,CAAE,CAC1D;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;QACrC;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IAC/B;AAEA,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,sBAAsB,GAAG,kCAAkC,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA,CAAE,GAAG,EAAE,CAAC;IACvI;AAEA,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,MAAM,IAAI,GAAQ;AACd,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE;AAC/B,YAAA,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE;AACnC,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE;SACxB;AACD,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACpB,OAAO,IAAI,CAAC,QAAQ;IACxB;IAGA,IAAI,OAAO,CAAC,IAAI,EAAA;AACZ,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACxB;AAEA,IAAA,WAAW,CAAC,KAAK,EAAA;QACb,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;IAC3C;AAEA,IAAA,IAAI,YAAY,GAAA;AACZ,QAAA,MAAM,mBAAmB,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,yBAAyB,EAAE,yBAAyB,CAAC;QACxH,OAAO,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC3D;AAEA,IAAA,IAAI,iBAAiB,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,OAAO,sCAAsC;QACjD;AACA,QAAA,OAAO,EAAE;IACb;AA9OS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA+E,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAjG,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,EAAA,EAAA,KAAA,EA0BpB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EACjB,gBAAgB,aAChB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAApC,IAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAgI,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAhE,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGA5BpB,uBAAuB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAqBE,qBAAqB,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrE3D,onHAiFA,EAAA,MAAA,EAAA,CAAA,oYAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAhE,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA2C,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAuB,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,aAAA,EAAA,UAAA,EAAA,cAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,aAAA,EAAA,OAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,oBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAiB,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAe,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDjCa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,cAGpB,KAAK,EAAA,QAAA,EAAA,onHAAA,EAAA,MAAA,EAAA,CAAA,oYAAA,CAAA,EAAA;;0BA4BZ,MAAM;2BAAC,iBAAiB;;0BACxB,MAAM;2BAAC,gBAAgB;;0BACvB,MAAM;2BAAC,iBAAiB;;sBA1B5B;;sBACA;;sBAkBA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,cAAc,EAAE,EAAC,IAAI,EAAE,qBAAqB,EAAC;;;AErE5D;;;;;;;;;;;;;;AAcE;AAsBI,MAAO,wBAAyB,SAAQ,oBAAoB,CAAA;IAY9D,WAAA,CACY,SAAwB,EACN,QAAyB,EACnD,aAAqC,EACrC,kBAAsC,EACX,UAA4B,EACpC,MAAc,EAAA;QAEjC,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,CAAC;QAP9D,IAAA,CAAA,SAAS,GAAT,SAAS;QAKE,IAAA,CAAA,MAAM,GAAN,MAAM;AAhBrB,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,cAAc;QAEpC,IAAA,CAAA,YAAY,GAAG,gBAAgB;QAC/B,IAAA,CAAA,SAAS,GAAG,EAAE;AAEL,QAAA,IAAA,CAAA,SAAS,GAAG;AACjB,YAAA,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAC;AAChC,YAAA,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAC;SACrC;IAWD;IAEA,gBAAgB,GAAA;AAEZ,QAAA,MAAM,mBAAmB,GAAG;AACxB,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE;AACX,gBAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;AACpC,gBAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AAC9B,gBAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AAC9B,gBAAA,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;AAC5B,gBAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;AACtC,gBAAA,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE;AACrD;SACJ;AAED,QAAA,MAAM,8BAA8B,GAAG;AACnC,YAAA,UAAU,EAAE,UAAU;SACzB;AAED,QAAA,MAAM,eAAe,GAAG,CAAC,GAAG,KAAI;AAC5B,YAAA,MAAM,IAAI,GAAG,GAAG,EAAE,IAAI,IAAI,EAAE;YAC5B,IAAI,OAAO,GAAG,EAAE;AAChB,YAAA,IAAI,IAAI,CAAC,MAAM,IAAE,QAAQ,EAAE;gBACvB,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;YACpC;AAAO,iBAAA,IAAI,IAAI,CAAC,MAAM,IAAE,KAAK,EAAE;AAC3B,gBAAA,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC7C,oBAAA,IAAI;wBACA,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAE,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;oBAC7E;oBAAE,OAAM,CAAC,EAAE;wBACP,OAAO,GAAG,EAAE;oBAChB;gBACJ;YACJ;AAAO,iBAAA,IAAI,IAAI,CAAC,MAAM,IAAE,IAAI,EAAE;AAC1B,gBAAA,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACjD,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACnC,oBAAA,MAAM,WAAW,GAAG,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,GAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAC,IAAI,GAAG,KAAK;AACrF,oBAAA,OAAO,IAAI,EAAE,CAAC,IAAI,GAAG,WAAW;gBACpC;YACJ;AAAO,iBAAA,IAAI,IAAI,CAAC,MAAM,IAAE,SAAS,EAAE;AAC/B,gBAAA,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI;YAC/B;iBAAO;gBACH,OAAO,GAAG,cAAc;YAC5B;AACA,YAAA,OAAO,OAAO;AAClB,QAAA,CAAC;QAED,OAAO;AACH,YAAA;AACI,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,UAAU,EAAE,MAAM;AAClB,gBAAA,eAAe,EAAE,2BAA2B;gBAC5C,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;AACjD,gBAAA,YAAY,EAAE,sBAAsB;AACpC,gBAAA,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AAC/C,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;oBACA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;gBACrC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,UAAU,EAAE,MAAM;AAClB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AAC/C,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;oBACA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;gBACrC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,MAAM,EAAE,KAAK;AACb,gBAAA,KAAK,EAAE,GAAG;gBACV,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,UAAU,EAAE,SAAS;AACrB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,YAAY,EAAE,eAAe;AAC7B,gBAAA,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AAC/C,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;oBACA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;gBACrC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,MAAM,EAAE,KAAK;gBACb,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,UAAU,EAAE,YAAY;AACxB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,8BAA8B;gBACrD,cAAc,EAAE,IAAI,CAAC,kBAAkB;AACvC,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;AAC1B,aAAA;AACD,YAAA,IAAI,CAAC;SACR;IACL;IAEA,OAAO,CAAC,OAAqB,EAAE,IAAU,EAAA;;AAErC,QAAA,OAAO,KAAK,CAAC,YAAY,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI;AACjE,aAAA,IAAI,CAAC,CAAC,OAAY,KAAI;AACnB,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AACpC,QAAA,CAAC,CAAC;IACV;AAEQ,IAAA,WAAW,CAAC,OAAY,EAAA;QAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;;YAEzB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;QACjD;AACA,QAAA,OAAO,OAAO;IAClB;AAEQ,IAAA,gBAAgB,CAAC,OAAY,EAAA;QACjC,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;YAC5B,GAAG,CAAC,UAAU,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACrC,YAAA,OAAO,GAAG;AACd,QAAA,CAAC,CAAC;IACN;AAEO,IAAA,UAAU,CAAC,IAAU,EAAA;;IAE5B;+GAxKS,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAxF,aAAA,EAAA,EAAA,EAAA,KAAA,EAcrB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAAC,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,kBAAA,EAAA,EAAA,EAAA,KAAA,EAGhB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAjBpB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cAFrB,MAAM,EAAA,CAAA,CAAA;;4FAET,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAeQ,MAAM;2BAAC,gBAAgB;;0BAGvB,MAAM;2BAAC,iBAAiB;;;ACrDjC;;;;;;;;;;;;;;AAcE;AAmBI,MAAO,0BAA2B,SAAQ,iBAAiB,CAAA;IAM7D,WAAA,CACa,GAA6B,EACtC,aAAqC,EAC7B,QAAwB,EAChC,aAAmC,EACnC,UAAqB,EACc,UAA4B,EAAA;QAE/D,KAAK,CAAC,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC;QAPvD,IAAA,CAAA,GAAG,GAAH,GAAG;QAEJ,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAGmB,IAAA,CAAA,UAAU,GAAV,UAAU;QAXjD,IAAA,CAAA,KAAK,GAAG,gBAAgB;QAGxB,IAAA,CAAA,eAAe,GAAG,KAAK;IAWvB;IAES,QAAQ,GAAA;QACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;QAC7C,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;QACvC,KAAK,CAAC,QAAQ,EAAE;IACpB;AAEA,IAAA,mBAAmB,CAAC,MAAc,EAAA;QAC9B,QAAQ,MAAM;AACV,YAAA,KAAK,KAAK;AACN,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACJ,YAAA,KAAK,MAAM;AACP,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACJ,YAAA,KAAK,QAAQ;gBACT,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;oBAC9C,OAAO,GAAG,CAAC,QAAQ;AACvB,gBAAA,CAAC,CAAC;AACF,gBAAA,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,GAAG,gBAAgB,GAAG,eAAe;AAC3E,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,KAAK,CAAC;gBACzC;YACJ;;IAER;AAEA,IAAA,WAAW,CAAC,KAAU,EAAA;QAClB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;AAChD,QAAA,QAAO,KAAK,EAAE,MAAM;AAChB,YAAA,KAAK,WAAW;AAChB,YAAA,KAAK,YAAY;AACb,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC5B;AACJ,YAAA,KAAK,QAAQ;gBACT,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;gBACrC;AACJ,YAAA,KAAK,QAAQ;AACT,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACJ,YAAA,KAAK,QAAQ;AACT,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC3B;AACJ,YAAA,KAAK,cAAc;gBACf,IAAI,CAAC,gBAAgB,EAAE;gBACvB;AACJ,YAAA,KAAK,mBAAmB;gBACpB,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC1C;AACJ,YAAA;gBACI;;IAEZ;IAEA,eAAe,CAAC,MAAc,EAAE,IAAS,EAAA;AACrC,QAAA,IAAI,CAAC,UAAU,EAAE,sBAAsB,EAAE,IAAI,CAAC;YAC1C,MAAM;AACN,YAAA,IAAI,EAAE,eAAe;YACrB,IAAI;AACJ,YAAA,IAAI,EAAC;AACR,SAAA,CAAC;IACN;AACA,IAAA,UAAU,CAAC,IAAS,EAAA;QAChB,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,eAAe,CAAC;IAChD;AAEA,IAAA,UAAU,CAAC,KAAU,EAAA;AACjB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,KAAK;AAC9B,QAAA,IAAG,KAAK,EAAE,OAAO,EAAE;YACf,IAAI,CAAC,WAAW,EAAE;QACtB;IACJ;AAEA,IAAA,WAAW,CAAC,KAAK,EAAA;AACb,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;IAChC;AA1FS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,+KAYvB,iBAAiB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAZpB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,sGCjCvC,2gCA2BC,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAe,uBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,WAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,cAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAqB,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDMY,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBANtC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,cAGlB,KAAK,EAAA,QAAA,EAAA,2gCAAA,EAAA;;0BAcZ,MAAM;2BAAC,iBAAiB;;;ME7CpB,YAAY,CAAA;AAAzB,IAAA,WAAA,GAAA;QACI,IAAA,CAAA,IAAI,GAAG,EAAE;QAET,IAAA,CAAA,MAAM,GAAG,EAAE;QACX,IAAA,CAAA,QAAQ,GAAW,OAAO;QAC1B,IAAA,CAAA,cAAc,GAAU,EAAE;QAC1B,IAAA,CAAA,OAAO,GAAU,EAAE;QACnB,IAAA,CAAA,YAAY,GAAU,EAAE;QACxB,IAAA,CAAA,gBAAgB,GAAU,EAAE;AAC5B,QAAA,IAAA,CAAA,SAAS,GAAU,CAAC;AAChB,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,kBAAkB,EAAE;AACvB,aAAA,CAAC;AACF,QAAA,IAAA,CAAA,OAAO,GAAQ;AACX,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,iBAAiB,EAAE;SACtB;QACD,IAAA,CAAA,YAAY,GAAG,KAAK;QACpB,IAAA,CAAA,cAAc,GAAG,KAAK;QACtB,IAAA,CAAA,cAAc,GAAW,CAAC;QAC1B,IAAA,CAAA,IAAI,GAAQ,EAAE;IAClB;AAAC;AAAA;;MCVY,uBAAuB,CAAA;IAMhC,WAAA,CACuC,WAA4B,EAC7B,UAA4B,EACtD,SAAwB,EACxB,cAA8B,EAC9B,iBAAoC,EAAA;QAJT,IAAA,CAAA,WAAW,GAAX,WAAW;QACZ,IAAA,CAAA,UAAU,GAAV,UAAU;QACpC,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QAT7B,IAAA,CAAA,KAAK,GAAU,EAAE;QACjB,IAAA,CAAA,MAAM,GAAU,EAAE;QAClB,IAAA,CAAA,YAAY,GAAG,KAAK;IASpB;AAEA,IAAA,IAAI,CAAC,QAAQ,EAAA;QACT,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,GAAQ,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACjE,QAAA,IAAI,IAAI;QACR,IAAI,QAAQ,EAAE;AACV,YAAA,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,gBAAgB,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;QAC5E;aAAO;AACH,YAAA,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,CAAC;QAC9D;QAEA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,MAAW,KAAI;YACnC,MAAM,EAAE,GAAG,QAAQ,GAAG,QAAQ,CAAC,EAAE,IAAI,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,MAAM,EAAE,EAAE,CAAC;YACpE,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,gBAAgB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAI;gBACtF,OAAO,OAAO,CAAC,IAAI;AACvB,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,eAAoB,KAAI;gBACvE,IAAI,CAAC,eAAe,EAAE;AAClB,oBAAA,OAAO,MAAM;gBACjB;AACA,gBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,cAAA,EAAiB,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA,CAAE,EACnD,CAAA,aAAA,EAAgB,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA,gBAAA,EAAmB,QAAQ,CAAC,IAAI,CAAA,CAAE,CACrF;AACD,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,gBAAA,OAAO,MAAM;AACjB,YAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAI;AAChB,gBAAA,OAAO,KAAK;AAChB,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAI;YACd,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC;YAC3D,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,MAAA,EAAS,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAA,cAAA,CAAgB,EAC3D,YAAY,CACf;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,YAAA,MAAM,IAAI;AACd,QAAA,CAAC,CAAC;IACN;IAEA,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAA;AACrC,QAAA,MAAM,SAAS,GAAG,IAAI,YAAY,EAAE;AACpC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC;AACvC,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAC7B,QAAO,IAAI;AACP,gBAAA;oBACI,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;;AAE5C,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,SAAS;IACpB;+GApES,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAOpB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EACjB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAAvC,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAhB,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAwD,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AARpB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cAFpB,MAAM,EAAA,CAAA,CAAA;;4FAET,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAQQ,MAAM;2BAAC,iBAAiB;;0BACxB,MAAM;2BAAC,iBAAiB;;;ACvBjC;;;;;;;;;;;;;;AAcE;AAgCI,MAAO,yBAA0B,SAAQ,eAAe,CAAA;IA+C1D,WAAA,CACW,GAA4B,EAC3B,SAAwB,EAChC,cAA8B,EACH,UAA4B,EACV,eAAgC,EACzC,WAA4B,EAC7C,MAAc,EACd,KAAqB,EACxC,QAAkB,EACV,iBAAoC,EAC5C,UAAqB,EAAA;AAErB,QAAA,KAAK,CAAC,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,CAAC;QAZ7F,IAAA,CAAA,GAAG,GAAH,GAAG;QACF,IAAA,CAAA,SAAS,GAAT,SAAS;QAG4B,IAAA,CAAA,eAAe,GAAf,eAAe;QACxB,IAAA,CAAA,WAAW,GAAX,WAAW;QAC5B,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,KAAK,GAAL,KAAK;QAEhB,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QAvDX,IAAA,CAAA,MAAM,GAAQ,EAAE;AACxB,QAAA,IAAA,CAAA,KAAK,GAAuB,IAAI,YAAY,EAAQ;QAE9D,IAAA,CAAA,OAAO,GAAU,EAAE;QACnB,IAAA,CAAA,SAAS,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,IAAA,CAAA,QAAQ,GAAG,QAAQ;QACnB,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,KAAK,GAAQ,EAAE;QACf,IAAA,CAAA,kBAAkB,GAAG,EAAE;QACvB,IAAA,CAAA,sBAAsB,GAAG,EAAE;QAC3B,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,QAAQ,GAAQ,EAAE;QAClB,IAAA,CAAA,gBAAgB,GAAG,EAAE;QACrB,IAAA,CAAA,iBAAiB,GAAG,EAAE;AACtB,QAAA,IAAA,CAAA,iBAAiB,GAAG;AAChB,YAAA;AACI,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,kBAAkB,EAAE;AACvB;SACJ;AAED,QAAA,IAAA,CAAA,OAAO,GAAG;AACN,YAAA,EAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAC;AAClC,YAAA,EAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAC;AAC1B,YAAA,EAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAC;AAC9B,YAAA,EAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAC;AAC9B,YAAA,EAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAC;AAClC,YAAA,EAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,eAAe,EAAC;SAClD;AAED,QAAA,IAAA,CAAA,WAAW,GAAG;YACV,OAAO,EAAE,EAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAC;YAC7F,GAAG,EAAE,EAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAC;YACrF,KAAK,EAAE,EAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAC;YACzF,KAAK,EAAE,EAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAC;YACzF,OAAO,EAAE,EAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAC;YAC7F,aAAa,EAAE,EAAC,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAC;SAC5G;QAEQ,IAAA,CAAA,UAAU,GAAG,gBAAgB;QAC7B,IAAA,CAAA,WAAW,GAAG,YAAY;QA4WnC,IAAA,CAAA,QAAQ,GAAQ,EAAE;QA5Vd,IAAI,CAAC,oBAAoB,EAAE;QAC3B,IAAI,CAAC,yBAAyB,EAAE;IACpC;IAES,QAAQ,GAAA;QACb,KAAK,CAAC,QAAQ,EAAE;QAChB,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,OAAW,KAAI;AAC1D,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;AAC3B,QAAA,CAAC,CAAC;IACN;IAES,aAAa,GAAA;QACtB,KAAK,CAAC,aAAa,EAAE;AACjB,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE;YACjE,IAAI,CAAC,qBAAqB,EAAE;QAChC;QACA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,KAAK,EAAE;AAChC,YAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,IAAG;AAClE,gBAAA,OAAO,OAAO,CAAC,KAAK,CAAE,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;AAC5D,YAAA,CAAC,CAAC;QACN;QACA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,eAAe,EAAE;YAC1C,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE;QAC1D;QACA,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AACxC,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC/C;AAEA,IAAA,iBAAiB,CAAC,OAAO,EAAA;QACrB,MAAM,KAAK,GAAG,qDAAqD;QACnE,IAAI,GAAG,EAAE,GAAG;AACZ,QAAA,IAAI;YACA,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;YACpC,IAAI,OAAO,EAAE;AACT,gBAAA,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;AAChB,gBAAA,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;YACpB;QACJ;AAAE,QAAA,OAAM,CAAC,EAAE,EAAC;AACZ,QAAA,OAAO,EAAC,GAAG,EAAE,GAAG,EAAC;IACrB;IAEA,qBAAqB,GAAA;QACjB,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;YAC9C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM;YACtC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,IAAI;YAC5C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,EAAE;YAErF,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC5B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,IAAI;YACnD;iBAAO;gBACH,IAAI,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;oBAC7B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE;oBACtC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE;oBACtC;gBACJ;AACA,gBAAA,MAAM,EAAC,GAAG,EAAE,GAAG,EAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC7D,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;oBAC9B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,IAAI;gBACnD;qBAAO;AACH,oBAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,EAAE;AAC7C,oBAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,EAAE;gBACjD;YACJ;AACJ,QAAA,CAAC,CAAC;IACN;IAEA,uBAAuB,GAAA;QACnB,MAAM,gBAAgB,GAAG,EAAE;QAC3B,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,GAAG,KAAI;AAClC,YAAA,IAAI,EAAE,CAAC,OAAO,EAAE;gBACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;AAC1C,gBAAA,gBAAgB,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAC,CAAC;YAC9D;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,gBAAgB;IAC3B;AAEA,IAAA,gBAAgB,CAAC,EAAE,EAAA;QACf,IAAI,QAAQ,GAAG,EAAE;AACjB,QAAA,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE;YAChB,IAAI,OAAO,GAAG,EAAE;YAChB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AAClB,gBAAA,OAAO,GAAG,CAAA,EAAA,EAAK,EAAE,CAAC,GAAG,EAAE;YAC3B;YACA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AAClB,gBAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACnB,oBAAA,OAAO,IAAI,CAAA,GAAA,EAAM,EAAE,CAAC,GAAG,EAAE;gBAC7B;qBAAO;AACH,oBAAA,OAAO,GAAG,CAAA,EAAA,EAAK,EAAE,CAAC,GAAG,EAAE;gBAC3B;YACJ;AACA,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACnB,gBAAA,QAAQ,GAAG,CAAC,OAAO,CAAC;YACxB;QACJ;aAAO;AACH,YAAA,QAAQ,GAAG,EAAE,CAAC,QAAQ;QAC1B;AACA,QAAA,OAAO,QAAQ;IACnB;IAEA,WAAW,GAAA;QACP,IAAI,CAAC,SAAS,EAAE;IACpB;IAEA,yBAAyB,GAAA;QACrB,IAAI,CAAC,iBAAiB,CAAC,+BAA+B,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,KAAI;AACxE,YAAA,IAAI,CAAC,gBAAgB,GAAG,UAAU;AACtC,QAAA,CAAC,CAAC;IACN;IAEA,oBAAoB,GAAA;QAChB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACpG,YAAA,MAAM,OAAO,GAAG,MAAM,EAAE,IAAI,IAAI,EAAE;AAClC,YAAA,OAAO,CAAC,IAAI,CAAC,EAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAC,CAAC;AAC/C,YAAA,IAAI,CAAC,iBAAiB,GAAG,OAAO;AACpC,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAI;YACd,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC;AAC3D,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,iCAAA,CAAmC,EACnC,YAAY,CACf;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,YAAA,MAAM,IAAI;AACd,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,qBAAqB,CAAC,KAAK,EAAA;AACvB,QAAA,QAAO,KAAK,CAAC,IAAI;AACb,YAAA,KAAK,MAAM;AACP,gBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;gBAChB;AACJ,YAAA,KAAK,OAAO;gBACR,IAAI,CAAC,gBAAgB,EAAE;gBACvB;AACJ,YAAA,KAAK,aAAa;gBACd,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,IAAI,EAAE;AAC/B,oBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;wBACzB,IAAI,CAAC,QAAQ,CAAC,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,EAAE;oBACnE;yBAAO;wBACH,IAAI,CAAC,qBAAqB,EAAE;oBAChC;gBACJ;qBAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,eAAe,EAAE;AACjD,oBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;wBACzB,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB;oBACpD;yBAAO;wBACH,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE;oBAC1D;gBACJ;AACA,gBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI;gBAC1B;AACJ,YAAA,KAAK,QAAQ;gBACT,IAAI,CAAC,YAAY,EAAE;gBACnB;;IAEZ;AAEA,IAAA,oBAAoB,CAAC,MAAM,EAAA;AACvB,QAAA,QAAQ,MAAM,CAAC,EAAE;AACb,YAAA,KAAK,MAAM;gBACP,IAAI,CAAC,IAAI,EAAE;gBACX;AACJ,YAAA,KAAK,QAAQ;gBACT,IAAI,CAAC,YAAY,EAAE;gBACnB;;IAEZ;AAEA,IAAA,iBAAiB,CAAC,KAAK,EAAA;QACnB,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC3C;IAEA,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CACvB;AACI,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,kBAAkB,EAAE;AACvB,SAAA,CACJ;IACL;AAEA,IAAA,kBAAkB,CAAC,MAAM,EAAA;AACrB,QAAA,QAAQ,MAAM,CAAC,EAAE;AACb,YAAA,KAAK,KAAK;gBACN,IAAI,CAAC,cAAc,EAAE;gBACrB;AACJ,YAAA,KAAK,MAAM;gBACP,IAAI,CAAC,eAAe,EAAE;gBACtB;;IAEZ;IAEA,cAAc,GAAA;AACV,QAAA,MAAM,OAAO,GAAG,CAAA,UAAA,EAAa,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,QAAQ,GAAG,QAAQ,CAAA,eAAA,EAAkB,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA,CAAA,CAAG,GAAG,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,QAAQ,GAAG,EAAE,CAAA,EAAA,EAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAA,YAAA,EAAe,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG;AAEzS,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC;AACtC,QAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,WAAA,CAAa,EACb,CAAA,+BAAA,CAAiC,CACpC;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACzC;IAEA,eAAe,GAAA;AACX,QAAA,MAAM,OAAO,GAAG,CAAA,MAAA,EAAS,IAAI,CAAC,UAAU,CAAA;MAC1C,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,oBAAoB,GAAG,IAAI;;;AAG9B,oBAAA,EAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAA;kBAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG;AAEzC,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC;AACtC,QAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,WAAA,CAAa,EACb,CAAA,gCAAA,CAAkC,CACrC;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACzC;IAES,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,EAAE;QAC/B,IAAI,CAAC,SAAS,EAAE;IACpB;IAEA,SAAS,GAAA;QACL,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAS,KAAI;YAC7B,IAAI,IAAI,EAAE,SAAS;AAAE,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AACjD,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;QAClB,IAAI,IAAI,CAAC,YAAY;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;IAC1D;IAEA,MAAM,IAAI,CAAC,KAAW,EAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE;YAC9B;QACJ;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YACtB;QACJ;QAEA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,IAAI,EAAE;AAC/B,YAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE;gBAC5B,IAAI,CAAC,QAAQ,CAAC,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,EAAE;YACnE;iBAAO;gBACH,IAAI,CAAC,qBAAqB,EAAE;YAChC;QACJ;QACA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,eAAe,EAAE;AAC1C,YAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE;gBAC5B,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB;YACpD;QACJ;AACA,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;YAChE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AACtB,gBAAA,IAAI,CAAC,QAAQ,GAAG,MAAM;gBACtB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC5C;YACA,OAAO,MAAM,EAAE,EAAE;AACrB,QAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AAC1B,QAAA,CAAC,CAAC;QACF,IAAI,QAAQ,EAAE;AACV,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC7B,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;YAC/B;iBAAO;gBACH,IAAI,CAAC,gBAAgB,EAAE;YAC3B;QACJ;QAAC;IACL;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;QAChB,MAAM,MAAM,GAAG,EAAE;QACjB,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC5B,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI;AAC1B,YAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QACvB;AACA,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;AACrE,YAAA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,IAAI;AAClC,YAAA,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC;QAChC;QACA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YACvB,IAAI,WAAW,GAAG,EAAE;YACpB,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;AAC5B,gBAAA,WAAW,IAAI,CAAA,IAAA,EAAO,KAAK,CAAA,KAAA,CAAO;AACtC,YAAA,CAAC,CAAC;AACF,YAAA,WAAW,GAAG,CAAA,IAAA,EAAO,WAAW,CAAA,KAAA,CAAO;AACvC,YAAA,MAAM,OAAO,GAAG,IAAI,YAAY,CAC5B,OAAO,EACP,SAAS,EACT,mBAAmB,EACnB,CAAA,uCAAA,EAA0C,WAAW,CAAA,CAAE,CAC1D;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;QACrC;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IAC/B;AAEA,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,sBAAsB,GAAG,oCAAoC,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA,CAAE,GAAG,EAAE,CAAC;IACzI;AAEA,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,MAAM,IAAI,GAAQ;AACd,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE;AAC/B,YAAA,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE;AACnC,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE;SACxB;AACD,QAAA,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM;AACxB,YAAA,KAAK,KAAK;gBACN,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY;gBAC9C;AACJ,YAAA,KAAK,IAAI;AACL,gBAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,EAAE;AACvD,gBAAA,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;gBACxC;AACJ,YAAA,KAAK,QAAQ;gBACT,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO;gBACpC;AACJ,YAAA,KAAK,KAAK;gBACN,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY;gBAC9C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc;gBAClD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc;gBAClD;AACJ,YAAA,KAAK,eAAe;AAChB,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB;gBACvC;AACJ,YAAA,KAAK,SAAS;gBACV,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO;gBACpC;;AAER,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACpB,OAAO,IAAI,CAAC,QAAQ;IACxB;IAGA,IAAI,OAAO,CAAC,IAAI,EAAA;AACZ,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACxB;AAEA,IAAA,QAAQ,CAAC,EAAE,EAAA;AACP,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,OAAO;IAChE;AAEA,IAAA,eAAe,CAAC,IAAI,EAAA;QAChB,QAAQ,IAAI;AACR,YAAA,KAAK,MAAM;gBACP,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY;gBACxD;AACJ,YAAA,KAAK,QAAQ;gBACT,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc;gBAC5D;;IAEZ;AAEA,IAAA,WAAW,CAAC,KAAK,EAAA;QACb,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;IAC3C;AAEA,IAAA,gBAAgB,CAAC,KAAK,EAAA;QAClB,KAAK,CAAC,eAAe,EAAE;IAC3B;AAEA,IAAA,aAAa,CAAC,KAAK,EAAA;IAEnB;AAEA,IAAA,kBAAkB,CAAC,KAAK,EAAA;IAExB;AA3bS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAgF,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAAlG,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,EAAA,EAAA,KAAA,EAmDtB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EACjB,gBAAgB,aAChB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAApC,IAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAgI,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAhE,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AArDpB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,gKC9CtC,qz8BAkjBA,EAAA,MAAA,EAAA,CAAA,qkIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAhE,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA2C,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAlB,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA6G,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,aAAA,EAAA,UAAA,EAAA,cAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,aAAA,EAAA,OAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,oBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,cAAA,EAAA,eAAA,EAAA,YAAA,EAAA,WAAA,EAAA,cAAA,EAAA,aAAA,EAAA,+BAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,8BAAA,EAAA,+BAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAlE,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAmE,qBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,aAAA,EAAA,YAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,aAAA,EAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,mCAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oCAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDpgBa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,cAGjB,KAAK,EAAA,QAAA,EAAA,qz8BAAA,EAAA,MAAA,EAAA,CAAA,qkIAAA,CAAA,EAAA;;0BAqDZ,MAAM;2BAAC,iBAAiB;;0BACxB,MAAM;2BAAC,gBAAgB;;0BACvB,MAAM;2BAAC,iBAAiB;;sBAnD5B;;sBACA;;;MEjDQ,OAAO,CAAA;AAApB,IAAA,WAAA,GAAA;QACI,IAAA,CAAA,IAAI,GAAG,EAAE;QACT,IAAA,CAAA,IAAI,GAAQ,EAAE;IAalB;AAAC;;ACfD;;;;;;;;;;;;;;AAcE;AAsBI,MAAO,mBAAoB,SAAQ,oBAAoB,CAAA;IAuBzD,WAAA,CACY,SAAwB,EACN,QAAyB,EACnD,aAAqC,EACrC,kBAAsC,EACX,UAA4B,EACpC,MAAc,EAAA;QAEjC,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,CAAC;QAP9D,IAAA,CAAA,SAAS,GAAT,SAAS;QAKE,IAAA,CAAA,MAAM,GAAN,MAAM;AA3BpB,QAAA,IAAA,CAAA,cAAc,GAAQ;AAC3B,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,KAAK,EAAE;SACV;AAEO,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,cAAc;QAEpC,IAAA,CAAA,YAAY,GAAG,UAAU;QACzB,IAAA,CAAA,cAAc,GAAQ,EAAE;QACxB,IAAA,CAAA,SAAS,GAAG,EAAE;AAEL,QAAA,IAAA,CAAA,SAAS,GAAG;AACjB,YAAA,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAC;AAChC,YAAA,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAC;SACrC;IAWD;IAEA,gBAAgB,GAAA;AAEZ,QAAA,MAAM,oBAAoB,GAAG,CAAC,GAAG,KAAI;YACjC,IAAI,OAAO,GAAG,EAAE;AAChB,YAAA,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,KAAI;gBAC9C,OAAO,IAAI,CAAC,CAAC,KAAK,GAAC,CAAC,IAAI,GAAG,GAAG,EAAE,IAAI,MAAM,CAAC,IAAI;AACnD,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,OAAO;AAClB,QAAA,CAAC;AACD,QAAA,MAAM,8BAA8B,GAAG;AACnC,YAAA,UAAU,EAAE,UAAU;SACzB;AACD,QAAA,MAAM,yBAAyB,GAAG;AAC9B,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE;gBACX,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;gBAC7C,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;gBAClD,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;AACrD,aAAA;YACD,gBAAgB,EAAE,MAAK;gBACnB,OAAO,yBAAyB,CAAC,aAAa;YAClD;SACH;QACD,OAAO;AACH,YAAA;AACI,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,UAAU,EAAE,IAAI;AAChB,gBAAA,eAAe,EAAE,2BAA2B;gBAC5C,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;AACjD,gBAAA,YAAY,EAAE,sBAAsB;AACpC,gBAAA,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AAC/C,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;oBACA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;gBACrC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE,KAAK;gBACb,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,cAAc;AACrB,gBAAA,KAAK,EAAE,cAAc;AACrB,gBAAA,UAAU,EAAE,cAAc;AAC1B,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,YAAY,EAAE,sBAAsB;gBACpC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE,QAAQ,EAAE,YAAY,EAAE;AAC7E,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;oBACA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;gBACrC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,MAAM,EAAE,KAAK;gBACb,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,KAAK,EAAE,YAAY;AACnB,gBAAA,UAAU,EAAE,YAAY;AACxB,gBAAA,eAAe,EAAE,2BAA2B;gBAC5C,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;AACjD,gBAAA,YAAY,EAAE,sBAAsB;gBACpC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE,QAAQ,EAAE,YAAY,EAAE;AAC7E,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;oBACA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;gBACrC,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,aAAa;AACpB,gBAAA,KAAK,EAAE,aAAa;AACpB,gBAAA,UAAU,EAAE,cAAc;AAC1B,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,cAAc,EAAE,oBAAoB;AACpC,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;AAC1B,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,UAAU,EAAE,MAAM;AAClB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,yBAAyB;AAChD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;AAC1B,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,UAAU,EAAE,WAAW;AACvB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;AAC1B,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,UAAU,EAAE,YAAY;AACxB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,8BAA8B;gBACrD,cAAc,EAAE,IAAI,CAAC,kBAAkB;AACvC,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;AAC1B;SACJ;IACL;IAEA,OAAO,CAAC,OAAqB,EAAE,IAAU,EAAA;AACrC,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QACtB;;AAEA,QAAA,OAAO,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI;AAC3D,aAAA,IAAI,CAAC,CAAC,OAAY,KAAI;AACnB,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AACpC,QAAA,CAAC,CAAC;IACV;AAEQ,IAAA,WAAW,CAAC,OAAY,EAAA;QAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;;YAEzB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;QACjD;AACA,QAAA,OAAO,OAAO;IAClB;AAEQ,IAAA,gBAAgB,CAAC,OAAY,EAAA;QACjC,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;YAC5B,GAAG,CAAC,UAAU,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACrC,YAAA,OAAO,GAAG;AACd,QAAA,CAAC,CAAC;IACN;AAEO,IAAA,UAAU,CAAC,IAAU,EAAA;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;QAC1B,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,EAAE;AAC/B,YAAA,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC;QACxC;aAAO;AACH,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,OAAO,EAAE;QACvC;AACA,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;IAC7B;+GArMS,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAlI,aAAA,EAAA,EAAA,EAAA,KAAA,EAyBhB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAAC,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,kBAAA,EAAA,EAAA,EAAA,KAAA,EAGhB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AA5BpB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFhB,MAAM,EAAA,CAAA,CAAA;;4FAET,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BA0BQ,MAAM;2BAAC,gBAAgB;;0BAGvB,MAAM;2BAAC,iBAAiB;;;AChEjC;;;;;;;;;;;;;;AAcE;AAmBI,MAAO,qBAAsB,SAAQ,iBAAiB,CAAA;IAMxD,WAAA,CACa,GAAwB,EACjC,aAAqC,EAC7B,QAAwB,EAChC,aAAmC,EACnC,UAAqB,EACc,UAA4B,EAAA;QAE/D,KAAK,CAAC,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC;QAPvD,IAAA,CAAA,GAAG,GAAH,GAAG;QAEJ,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAGmB,IAAA,CAAA,UAAU,GAAV,UAAU;QAXjD,IAAA,CAAA,KAAK,GAAG,UAAU;QAGlB,IAAA,CAAA,eAAe,GAAG,KAAK;IAWvB;IAES,QAAQ,GAAA;QACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;QAC7C,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;QACvC,KAAK,CAAC,QAAQ,EAAE;IACpB;AAEA,IAAA,mBAAmB,CAAC,MAAc,EAAA;QAC9B,QAAQ,MAAM;AACV,YAAA,KAAK,KAAK;AACN,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACJ,YAAA,KAAK,MAAM;AACP,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACJ,YAAA,KAAK,QAAQ;gBACT,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;oBAC9C,OAAO,GAAG,CAAC,QAAQ;AACvB,gBAAA,CAAC,CAAC;AACF,gBAAA,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,GAAG,UAAU,GAAG,UAAU;AAChE,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,KAAK,CAAC;gBACzC;YACJ;;IAER;AAEA,IAAA,WAAW,CAAC,KAAU,EAAA;QAClB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;AAChD,QAAA,QAAO,KAAK,EAAE,MAAM;AAChB,YAAA,KAAK,WAAW;AAChB,YAAA,KAAK,YAAY;AACb,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC5B;AACJ,YAAA,KAAK,QAAQ;gBACT,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;gBACrC;AACJ,YAAA,KAAK,QAAQ;AACT,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACJ,YAAA,KAAK,QAAQ;AACT,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC3B;AACJ,YAAA,KAAK,cAAc;gBACf,IAAI,CAAC,gBAAgB,EAAE;gBACvB;AACJ,YAAA,KAAK,mBAAmB;gBACpB,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC1C;AACJ,YAAA;gBACI;;IAEZ;IAEA,eAAe,CAAC,MAAc,EAAE,IAAS,EAAA;AACrC,QAAA,IAAI,CAAC,UAAU,EAAE,sBAAsB,EAAE,IAAI,CAAC;YAC1C,MAAM;AACN,YAAA,IAAI,EAAE,SAAS;YACf,IAAI;AACJ,YAAA,IAAI,EAAC;AACR,SAAA,CAAC;IACN;IACS,cAAc,CAAC,aAAa,EAAE,KAAK,EAAA;QACxC,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;YAC5C,OAAO;gBACH,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,EAAE;gBACzC,EAAE,EAAE,IAAI,CAAC;aACZ;AACL,QAAA,CAAC,CAAC;AACF,QAAA,KAAK,CAAC,cAAc,CAAC,YAAY,EAAE,KAAK,CAAC;IAC7C;AAEA,IAAA,UAAU,CAAC,IAAS,EAAA;QAChB,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC;IAC3C;AAEA,IAAA,UAAU,CAAC,KAAU,EAAA;AACjB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,KAAK;AAC9B,QAAA,IAAG,KAAK,EAAE,OAAO,EAAE;YACf,IAAI,CAAC,WAAW,EAAE;QACtB;IACJ;AAEA,IAAA,WAAW,CAAC,KAAK,EAAA;AACb,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;IAChC;AApGS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,0KAYlB,iBAAiB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAZpB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,gGCjClC,oiCA+BA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAe,uBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,WAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,cAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAqB,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDEa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,cAGZ,KAAK,EAAA,QAAA,EAAA,oiCAAA,EAAA;;0BAcZ,MAAM;2BAAC,iBAAiB;;;MEhCpB,kBAAkB,CAAA;AAO3B,IAAA,WAAA,CACqC,eAAgC,EAC9B,WAA4B,EACvD,cAA8B,EACJ,UAA4B,EAAA;QAH7B,IAAA,CAAA,eAAe,GAAf,eAAe;QACb,IAAA,CAAA,WAAW,GAAX,WAAW;QACtC,IAAA,CAAA,cAAc,GAAd,cAAc;QACY,IAAA,CAAA,UAAU,GAAV,UAAU;QAThD,IAAA,CAAA,oBAAoB,GAAQ,EAAE;QAC9B,IAAA,CAAA,uBAAuB,GAAQ,EAAE;QACjC,IAAA,CAAA,kBAAkB,GAAQ,EAAE;QAC5B,IAAA,CAAA,sBAAsB,GAAQ,EAAE;IAO7B;AAEH,IAAA,IAAI,CAAC,QAAQ,EAAA;QACT,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,GAAQ,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC9D,QAAA,MAAM,GAAG,GAAG,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AACnH,QAAA,OAAO,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,MAAW,KAAI;YACrE,MAAM,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,QAAQ,CAAC,EAAE;YAC1C,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,KAAI;gBACvF,OAAO,UAAU,CAAC,IAAI;AAC1B,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,eAAoB,KAAI;AACvE,gBAAA,MAAM,SAAS,GAAG;AACd,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;iBAC1B;AACD,gBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,YAAA,EAAe,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA,CAAE,EACjD,CAAA,aAAA,EAAgB,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA,cAAA,EAAiB,QAAQ,CAAC,IAAI,CAAA,CAAE,CACnF;AACD,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,gBAAA,OAAO,SAAS;AACpB,YAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAI;AAChB,gBAAA,OAAO,KAAK;AAChB,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAI;YACd,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC;YAC3D,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,MAAA,EAAS,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAA,YAAA,CAAc,EACzD,YAAY,CACf;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,YAAA,MAAM,IAAI;AACd,QAAA,CAAC,CAAC;IACN;IAEA,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAA;AAClC,QAAA,MAAM,SAAS,GAAG,IAAI,OAAO,EAAE;AAC/B,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC;AACvC,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAC7B,QAAO,IAAI;AACP,gBAAA;oBACI,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;;AAE5C,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,SAAS;IACpB;AAEA,IAAA,eAAe,CAAC,GAAG,EAAA;AACf,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC;AAClC,QAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,WAAA,CAAa,EACb,CAAA,gCAAA,CAAkC,CACrC;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACzC;AAzES,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAQf,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAChB,iBAAiB,wCAEjB,iBAAiB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAXpB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFf,MAAM,EAAA,CAAA,CAAA;;4FAET,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BASQ,MAAM;2BAAC,gBAAgB;;0BACvB,MAAM;2BAAC,iBAAiB;;0BAExB,MAAM;2BAAC,iBAAiB;;;ACgB3B,MAAO,oBAAqB,SAAQ,eAAe,CAAA;AA0BvD,IAAA,WAAA,CACiD,eAAgC,EACtE,GAAuB,EACM,WAA4B,EAChE,cAA8B,EACH,UAA4B,EACpC,MAAc,EACd,KAAqB,EACxC,QAAkB,EAAA;AAEpB,QAAA,KAAK,CAAC,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,CAAC;QATzC,IAAA,CAAA,eAAe,GAAf,eAAe;QACrD,IAAA,CAAA,GAAG,GAAH,GAAG;QAC0B,IAAA,CAAA,WAAW,GAAX,WAAW;QAG5B,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,KAAK,GAAL,KAAK;QAhCnB,IAAA,CAAA,wBAAwB,GAAU,EAAE;AACnC,QAAA,IAAA,CAAA,KAAK,GAAsB,IAAI,YAAY,EAAO;QACnD,IAAA,CAAA,YAAY,GAAG,KAAK;QAEpB,IAAA,CAAA,UAAU,GAAG,UAAU;QACvB,IAAA,CAAA,WAAW,GAAG,OAAO;QAE9B,IAAA,CAAA,MAAM,GAAGnC,QAAM;QAEf,IAAA,CAAA,kBAAkB,GAAQ,EAAE;QAC5B,IAAA,CAAA,QAAQ,GAAG,QAAQ;QACnB,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,eAAe,GAAG,KAAK;AACvB,QAAA,IAAA,CAAA,YAAY,GAAQ;AAClB,YAAA,EAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS;SAChC;QAED,IAAA,CAAA,qBAAqB,GAAG,EAAE;QAC1B,IAAA,CAAA,yBAAyB,GAAG,EAAE;QAC9B,IAAA,CAAA,wBAAwB,GAAG,EAAE;QAC7B,IAAA,CAAA,4BAA4B,GAAG,EAAE;QAEjC,IAAA,CAAA,QAAQ,GAAQ,EAAE;QAyJlB,IAAA,CAAA,QAAQ,GAAG,EAAE;IA5Ib;IAES,QAAQ,GAAA;QACf,KAAK,CAAC,QAAQ,EAAE;AAChB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,OAAW,KAAI;AAC5D,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;QACzB,CAAC,CAAC,CACH;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AACjD,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB;YACF;AACA,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;YACpB,IAAI,CAAC,sBAAsB,EAAE;QAC/B,CAAC,CAAC,CACH;IACH;IAES,aAAa,GAAA;QACpB,KAAK,CAAC,aAAa,EAAE;QACrB,IAAI,CAAC,sBAAsB,EAAE;IAC/B;IAEA,sBAAsB,GAAA;QACpB,IAAI,CAAC,qBAAqB,EAAE;QAC5B,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,4BAA4B,EAAE;IACrC;IAEA,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;QAC3B,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;YACtF,IAAI,CAAC,kBAAkB,GAAG,MAAM,EAAE,IAAI,IAAI,EAAE;AAC9C,QAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC9B,QAAA,CAAC,CAAC;IACJ;IAEA,wBAAwB,GAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;AAC9B,YAAA,IAAI,CAAC,qBAAqB,GAAG,EAAE;YAC/B;QACF;AACA,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;AACpE,YAAA,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC;YAC9B,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI;YAC/C,IAAI,CAAC,IAAI,GAAG,WAAW,GAAG,IAAI,CAAC,EAAE;AACjC,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;IACJ;IAEA,4BAA4B,GAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;AAClC,YAAA,IAAI,CAAC,yBAAyB,GAAG,EAAE;YACnC;QACF;AACA,QAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;AAC5E,YAAA,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC;YAC9B,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI;YACnD,IAAI,CAAC,IAAI,GAAG,oBAAoB,GAAG,IAAI,CAAC,EAAE;AAC1C,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;IACJ;IAEA,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAA;QAClC,MAAM,cAAc,GAAG,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC;QAChE,MAAM,CAAC,aAAa,CAAC,WAAW,GAAG,cAAc,CAAC,EAAE,CAAC;IACvD;IAEA,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAA;QACrC,MAAM,cAAc,GAAG,IAAI,CAAC,4BAA4B,CAAC,UAAU,CAAC;QACpE,MAAM,CAAC,aAAa,CAAC,oBAAoB,GAAG,cAAc,CAAC,EAAE,CAAC;IAChE;AAEA,IAAA,uBAAuB,CAAC,KAAK,EAAA;AAC3B,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACtE,KAAK,CAAC,cAAc,EAAE;IACxB;AAEA,IAAA,sBAAsB,CAAC,KAAK,EAAA;AAC1B,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,qBAAqB,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3E,KAAK,CAAC,cAAc,EAAE;IACxB;AAEA,IAAA,qBAAqB,CAAC,KAAK,EAAA;AACzB,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;QACxE,KAAK,CAAC,cAAc,EAAE;IACxB;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;IACjC;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC7C;AAEA,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;IACzF;AAEA,IAAA,qBAAqB,CAAC,MAAM,EAAA;AAC1B,QAAA,QAAO,MAAM,CAAC,IAAI;AAChB,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,IAAI,EAAE;gBACX;AACF,YAAA,KAAK,OAAO;gBACV,IAAI,CAAC,SAAS,EAAE;gBAChB;AACF,YAAA,KAAK,aAAa;AAChB,gBAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI;gBAC3B;;IAEN;AAEA,IAAA,MAAM,IAAI,CAAC,KAAM,IAAG;AAEpB,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,sBAAsB,GAAG,8BAA8B,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA,CAAE,GAAG,EAAE,CAAC;IACjI;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,MAAM,IAAI,GAAQ;AACZ,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE;AAC/B,YAAA,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,EAAE;AACrC,YAAA,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,cAAc,IAAI,EAAE;AAClD,YAAA,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB;AAClD,YAAA,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW;AACtC,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,GAAG;AAC/B,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI;SACjC;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,EAAC,GAAG,EAAE,IAAI,EAAC;QAC3D;AACA,QAAA,OAAO,IAAI;IACb;IAGA,IAAI,OAAO,CAAC,IAAI,EAAA;AACd,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACtB;IAEA,cAAc,CAAC,KAAK,GAAG,SAAS,EAAA;AAC9B,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,KAAK;YAC9B;QACF;QACA,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ;IAClD;IAEA,iBAAiB,GAAA;QACf,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW;IACxD;IAEA,KAAK,GAAA;IACL;AAnMW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EA2BnB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAA+H,kBAAA,EAAA,EAAA,EAAA,KAAA,EAEhB,iBAAiB,wCAEjB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAA7I,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAJ,IAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA/BlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EARlB;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,YAAY;AACrB,gBAAA,QAAQ,EAAE;AACb;AACJ,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrCL,0sMA4IA,EAAA,MAAA,EAAA,CAAA,67DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAkJ,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,aAAA,EAAA,UAAA,EAAA,cAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAxF,2BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,aAAA,EAAA,OAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,oBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,OAAA,EAAA,aAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,aAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA8F,iBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDpGa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAZhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAAA,SAAA,EAGlB;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,YAAY;AACrB,4BAAA,QAAQ,EAAE;AACb;AACJ,qBAAA,EAAA,UAAA,EACW,KAAK,EAAA,QAAA,EAAA,0sMAAA,EAAA,MAAA,EAAA,CAAA,67DAAA,CAAA,EAAA;;0BA6Bd,MAAM;2BAAC,gBAAgB;;0BAEvB,MAAM;2BAAC,iBAAiB;;0BAExB,MAAM;2BAAC,iBAAiB;;sBA9B5B;;sBACA;;sBACA;;;ME3CU,UAAU,CAAA;AAAvB,IAAA,WAAA,GAAA;QACI,IAAA,CAAA,IAAI,GAAG,EAAE;QACT,IAAA,CAAA,IAAI,GAAQ,EAAE;IAclB;AAAC;;AChBD;;;;;;;;;;;;;;AAcE;AAsBI,MAAO,sBAAuB,SAAQ,oBAAoB,CAAA;IAuB5D,WAAA,CACY,SAAwB,EACN,QAAyB,EACnD,aAAqC,EACrC,kBAAsC,EACX,UAA4B,EACpC,MAAc,EAAA;QAEjC,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,CAAC;QAP9D,IAAA,CAAA,SAAS,GAAT,SAAS;QAKE,IAAA,CAAA,MAAM,GAAN,MAAM;AA3BpB,QAAA,IAAA,CAAA,cAAc,GAAQ;AAC3B,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,QAAQ,EAAE,SAAS;AACnB,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,KAAK,EAAE;SACV;AAEO,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,cAAc;QAEpC,IAAA,CAAA,YAAY,GAAG,cAAc;QAC7B,IAAA,CAAA,cAAc,GAAQ,EAAE;QACxB,IAAA,CAAA,SAAS,GAAG,EAAE;AAEL,QAAA,IAAA,CAAA,SAAS,GAAG;AACjB,YAAA,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAC;AAChC,YAAA,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAC;SACrC;IAWD;IAEA,gBAAgB,GAAA;AAEZ,QAAA,MAAM,oBAAoB,GAAG,CAAC,GAAG,KAAI;YACjC,IAAI,OAAO,GAAG,EAAE;AAChB,YAAA,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,KAAI;gBAC9C,OAAO,IAAI,CAAC,CAAC,KAAK,GAAC,CAAC,IAAI,GAAG,GAAG,EAAE,IAAI,MAAM,CAAC,IAAI;AACnD,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,OAAO;AAClB,QAAA,CAAC;AACD,QAAA,MAAM,8BAA8B,GAAG;AACnC,YAAA,UAAU,EAAE,UAAU;SACzB;QAED,OAAO;AACH,YAAA;AACI,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,UAAU,EAAE,IAAI;AAChB,gBAAA,eAAe,EAAE,2BAA2B;gBAC5C,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;AACjD,gBAAA,YAAY,EAAE,sBAAsB;AACpC,gBAAA,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AAC/C,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;AACvB,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;oBACA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;gBACrC,CAAC;AACJ,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,eAAe;AACtB,gBAAA,KAAK,EAAE,eAAe;AACtB,gBAAA,UAAU,EAAE,eAAe;AAC3B,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,YAAY,EAAE,sBAAsB;gBACpC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE;AACvE,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;oBACA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC;gBACjD,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,KAAK,EAAE,aAAa;AACpB,gBAAA,UAAU,EAAE,aAAa;AACzB,gBAAA,eAAe,EAAE,2BAA2B;gBAC5C,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;AACjD,gBAAA,YAAY,EAAE,sBAAsB;gBACpC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE;AACvE,gBAAA,aAAa,EAAE,CAAC,IAAI,KAAI;AACpB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;wBACxB;oBACJ;oBACA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC;gBACjD,CAAC;AACD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,UAAU,EAAE,YAAY;gBACxB,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;AACjD,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;AAC1B,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,eAAe;AACtB,gBAAA,KAAK,EAAE,eAAe;AACtB,gBAAA,UAAU,EAAE,cAAc;AAC1B,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;AACvB,gBAAA,IAAI,EAAE;AACT,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,eAAe;AACtB,gBAAA,KAAK,EAAE,eAAe;AACtB,gBAAA,UAAU,EAAE,cAAc;AAC1B,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;AACvB,gBAAA,IAAI,EAAE;AACT,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,cAAc;AACrB,gBAAA,KAAK,EAAE,cAAc;AACrB,gBAAA,UAAU,EAAE,eAAe;AAC3B,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,8BAA8B;gBACrD,cAAc,EAAE,IAAI,CAAC,kBAAkB;AACvC,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;AAC1B,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,UAAU,EAAE,YAAY;AACxB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,qBAAqB,EAAE,8BAA8B;gBACrD,cAAc,EAAE,IAAI,CAAC,kBAAkB;AACvC,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;AACvB,gBAAA,IAAI,EAAE;AACT,aAAA;SACJ;IACL;AAEO,IAAA,gBAAgB,CAAC,MAAM,GAAG,EAAE,EAAE,QAAS,EAAA;AAC1C,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE;YACjB,MAAM,GAAG,QAAQ;QACrB;AACA,QAAA,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC,QAAQ;QAC9C,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA,WAAA,EAAc,MAAM,CAAA,CAAE,CAAC;IACtD;IAEA,OAAO,CAAC,OAAqB,EAAE,IAAU,EAAA;AACrC,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QACtB;;AAEA,QAAA,OAAO,KAAK,CAAC,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI;AAC/D,aAAA,IAAI,CAAC,CAAC,OAAY,KAAI;AACnB,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AACpC,QAAA,CAAC,CAAC;IACV;AAEQ,IAAA,WAAW,CAAC,OAAY,EAAA;QAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;;YAEzB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;QACjD;AACA,QAAA,OAAO,OAAO;IAClB;AAEQ,IAAA,gBAAgB,CAAC,OAAY,EAAA;QACjC,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;YAC5B,GAAG,CAAC,UAAU,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACrC,YAAA,OAAO,GAAG;AACd,QAAA,CAAC,CAAC;IACN;AAEO,IAAA,UAAU,CAAC,IAAU,EAAA;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,aAAa;QAC9B,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,EAAE;AAC/B,YAAA,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC;QACxC;aAAO;AACH,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,UAAU,EAAE;QAC1C;AACA,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;IAC7B;+GA9MS,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAArI,aAAA,EAAA,EAAA,EAAA,KAAA,EAyBnB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAAC,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,kBAAA,EAAA,EAAA,EAAA,KAAA,EAGhB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AA5BpB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cAFnB,MAAM,EAAA,CAAA,CAAA;;4FAET,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BA0BQ,MAAM;2BAAC,gBAAgB;;0BAGvB,MAAM;2BAAC,iBAAiB;;;AChEjC;;;;;;;;;;;;;;AAcE;AAkBI,MAAO,wBAAyB,SAAQ,iBAAiB,CAAA;IAM3D,WAAA,CACa,GAA2B,EACpC,aAAqC,EAC7B,QAAwB,EAChC,aAAmC,EACnC,UAAqB,EACc,UAA4B,EAAA;QAE/D,KAAK,CAAC,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC;QAPvD,IAAA,CAAA,GAAG,GAAH,GAAG;QAEJ,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAGmB,IAAA,CAAA,UAAU,GAAV,UAAU;QAXjD,IAAA,CAAA,KAAK,GAAG,cAAc;QAGtB,IAAA,CAAA,eAAe,GAAG,KAAK;IAWvB;IAES,QAAQ,GAAA;QACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;QAC7C,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;QACvC,KAAK,CAAC,QAAQ,EAAE;IACpB;AAEA,IAAA,mBAAmB,CAAC,MAAc,EAAA;QAC9B,QAAQ,MAAM;AACV,YAAA,KAAK,KAAK;AACN,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACJ,YAAA,KAAK,MAAM;AACP,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACJ,YAAA,KAAK,QAAQ;gBACT,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;oBAC9C,OAAO,GAAG,CAAC,QAAQ;AACvB,gBAAA,CAAC,CAAC;AACF,gBAAA,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,GAAG,aAAa,GAAG,cAAc;AACvE,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,KAAK,CAAC;gBACzC;YACJ;;IAER;AAEA,IAAA,WAAW,CAAC,KAAU,EAAA;QAClB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;AAChD,QAAA,QAAO,KAAK,EAAE,MAAM;AAChB,YAAA,KAAK,WAAW;AAChB,YAAA,KAAK,YAAY;AACb,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC5B;AACJ,YAAA,KAAK,QAAQ;gBACT,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;gBACrC;AACJ,YAAA,KAAK,QAAQ;AACT,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB;AACJ,YAAA,KAAK,QAAQ;AACT,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC3B;AACJ,YAAA,KAAK,cAAc;gBACf,IAAI,CAAC,gBAAgB,EAAE;gBACvB;AACJ,YAAA,KAAK,mBAAmB;gBACpB,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC1C;AACJ,YAAA;gBACI;;IAEZ;IAEA,eAAe,CAAC,MAAc,EAAE,IAAS,EAAA;AACrC,QAAA,IAAI,CAAC,UAAU,EAAE,sBAAsB,EAAE,IAAI,CAAC;YAC1C,MAAM;AACN,YAAA,IAAI,EAAE,aAAa;YACnB,IAAI;AACJ,YAAA,IAAI,EAAC;AACR,SAAA,CAAC;IACN;IACS,cAAc,CAAC,aAAa,EAAE,KAAK,EAAA;QACxC,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;YAC5C,OAAO;gBACH,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,EAAE;gBACzC,EAAE,EAAE,IAAI,CAAC;aACZ;AACL,QAAA,CAAC,CAAC;AACF,QAAA,KAAK,CAAC,cAAc,CAAC,YAAY,EAAE,KAAK,CAAC;IAC7C;AAEA,IAAA,UAAU,CAAC,IAAS,EAAA;QAChB,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAC1C;AAEA,IAAA,UAAU,CAAC,KAAU,EAAA;AACjB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,KAAK;AAC9B,QAAA,IAAG,KAAK,EAAE,OAAO,EAAE;YACf,IAAI,CAAC,WAAW,EAAE;QACtB;IACJ;AAEA,IAAA,WAAW,CAAC,KAAK,EAAA;AACb,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;IAChC;AApGS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,6KAYrB,iBAAiB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAZpB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,oGChCrC,ghCA8BA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAe,uBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,WAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,cAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAqB,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDEa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,cAGhB,KAAK,EAAA,QAAA,EAAA,ghCAAA,EAAA;;0BAcZ,MAAM;2BAAC,iBAAiB;;;ME/BpB,qBAAqB,CAAA;AAO9B,IAAA,WAAA,CACqC,eAAgC,EAC9B,WAA4B,EACvD,cAA8B,EACJ,UAA4B,EAAA;QAH7B,IAAA,CAAA,eAAe,GAAf,eAAe;QACb,IAAA,CAAA,WAAW,GAAX,WAAW;QACtC,IAAA,CAAA,cAAc,GAAd,cAAc;QACY,IAAA,CAAA,UAAU,GAAV,UAAU;QAThD,IAAA,CAAA,oBAAoB,GAAQ,EAAE;QAC9B,IAAA,CAAA,uBAAuB,GAAQ,EAAE;QACjC,IAAA,CAAA,kBAAkB,GAAQ,EAAE;QAC5B,IAAA,CAAA,sBAAsB,GAAQ,EAAE;IAO7B;AAEH,IAAA,IAAI,CAAC,QAAQ,EAAA;QACT,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,GAAQ,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACjE,QAAA,MAAM,GAAG,GAAG,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AACnH,QAAA,OAAO,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,MAAW,KAAI;YACxE,MAAM,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,QAAQ,CAAC,EAAE;YAC1C,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,iBAAiB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,KAAI;gBAC1F,OAAO,UAAU,CAAC,IAAI;AAC1B,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,eAAoB,KAAI;AACvE,gBAAA,MAAM,SAAS,GAAG;AACd,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;iBAC1B;AACD,gBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,eAAA,EAAkB,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA,CAAE,EACpD,CAAA,aAAA,EAAgB,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA,iBAAA,EAAoB,QAAQ,CAAC,IAAI,CAAA,CAAE,CACtF;AACD,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,gBAAA,OAAO,SAAS;AACpB,YAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAI;AAChB,gBAAA,OAAO,KAAK;AAChB,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAI;YACd,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC;YAC3D,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,MAAA,EAAS,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAA,eAAA,CAAiB,EAC5D,YAAY,CACf;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,YAAA,MAAM,IAAI;AACd,QAAA,CAAC,CAAC;IACN;IAEA,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAA;AACrC,QAAA,MAAM,SAAS,GAAG,IAAI,UAAU,EAAE;AAClC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC;AACvC,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAC7B,QAAO,IAAI;AACP,gBAAA;oBACI,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;;AAE5C,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,SAAS;IACpB;IAEA,eAAe,GAAA;AACX,QAAA,MAAM,MAAM,GAAG;AACX,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE;SACV;AACD,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AAC1E,YAAA,OAAO,CAAC,EAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;AAC7D,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,eAAe,CAAC,GAAG,EAAA;AACf,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC;AAClC,QAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,WAAA,CAAa,EACb,CAAA,gCAAA,CAAkC,CACrC;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACzC;AAEA,IAAA,qBAAqB,CAAC,EAAE,EAAA;QACpB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,iBAAiB,EAAE,EAAE,EAAE,UAAU,EAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AAChH,YAAA,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,IAAI;AACrC,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;gBAC9D,OAAO,GAAG,CAAC,IAAI;AACnB,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,uBAAuB,CAAC,EAAE,EAAA;QACtB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,iBAAiB,EAAE,EAAE,EAAE,YAAY,EAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AAClH,YAAA,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,IAAI;AACvC,YAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;gBACpE,OAAO,MAAM,CAAC,IAAI;AACtB,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,aAAa,CAAC,EAAE,EAAA;AACZ,QAAA,MAAM,GAAG,GAAQ,CAAA,iBAAA,EAAoB,EAAE,EAAE;QACzC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;IACrC;AA/GS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAQlB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAChB,iBAAiB,wCAEjB,iBAAiB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAXpB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFlB,MAAM,EAAA,CAAA,CAAA;;4FAET,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BASQ,MAAM;2BAAC,gBAAgB;;0BACvB,MAAM;2BAAC,iBAAiB;;0BAExB,MAAM;2BAAC,iBAAiB;;;ACiB3B,MAAO,uBAAwB,SAAQ,eAAe,CAAA;AAwB1D,IAAA,WAAA,CACiD,eAAgC,EACtE,GAA0B,EACG,WAA4B,EAChE,cAA8B,EACH,UAA4B,EACpC,MAAc,EACd,KAAqB,EACxC,QAAkB,EAAA;AAEpB,QAAA,KAAK,CAAC,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,CAAC;QATzC,IAAA,CAAA,eAAe,GAAf,eAAe;QACrD,IAAA,CAAA,GAAG,GAAH,GAAG;QAC0B,IAAA,CAAA,WAAW,GAAX,WAAW;QAG5B,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,KAAK,GAAL,KAAK;QA9BnB,IAAA,CAAA,wBAAwB,GAAU,EAAE;AACnC,QAAA,IAAA,CAAA,KAAK,GAAsB,IAAI,YAAY,EAAO;QACnD,IAAA,CAAA,YAAY,GAAG,KAAK;QAEpB,IAAA,CAAA,UAAU,GAAG,cAAc;QAC3B,IAAA,CAAA,WAAW,GAAG,UAAU;QAEjC,IAAA,CAAA,MAAM,GAAGnC,QAAM;QAEf,IAAA,CAAA,kBAAkB,GAAQ,EAAE;QAC5B,IAAA,CAAA,QAAQ,GAAG,QAAQ;QACnB,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,eAAe,GAAG,KAAK;AACvB,QAAA,IAAA,CAAA,YAAY,GAAQ;AAClB,YAAA,EAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS;SAChC;QAED,IAAA,CAAA,qBAAqB,GAAG,EAAE;QAC1B,IAAA,CAAA,yBAAyB,GAAG,EAAE;QAE9B,IAAA,CAAA,QAAQ,GAAQ,EAAE;QAsFlB,IAAA,CAAA,QAAQ,GAAG,EAAE;IAzEb;IAES,QAAQ,GAAA;QACf,KAAK,CAAC,QAAQ,EAAE;AAChB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,OAAW,KAAI;AAC5D,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;QACzB,CAAC,CAAC,CACH;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AACjD,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB;YACF;AACA,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAE;QAC5B,CAAC,CAAC,CACH;IACH;AAEA,IAAA,uBAAuB,CAAC,KAAK,EAAA;AAC3B,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC;QACvE,KAAK,CAAC,cAAc,EAAE;IACxB;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;IACjC;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC7C;AAEA,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;IACzF;AAEA,IAAA,qBAAqB,CAAC,MAAM,EAAA;AAC1B,QAAA,QAAO,MAAM,CAAC,IAAI;AAChB,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,IAAI,EAAE;gBACX;AACF,YAAA,KAAK,OAAO;gBACV,IAAI,CAAC,SAAS,EAAE;gBAChB;AACF,YAAA,KAAK,aAAa;AAChB,gBAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI;gBAC3B;;IAEN;AAEA,IAAA,MAAM,IAAI,CAAC,KAAM,IAAG;AAEpB,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,sBAAsB,GAAG,8BAA8B,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA,CAAE,GAAG,EAAE,CAAC;IACjI;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,MAAM,IAAI,GAAQ;AACZ,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE;AAC/B,YAAA,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,EAAE;AACrC,YAAA,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,cAAc,IAAI,EAAE;AAClD,YAAA,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB;AAClD,YAAA,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW;AACtC,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,GAAG;AAC/B,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI;SACjC;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,EAAC,GAAG,EAAE,IAAI,EAAC;QAC3D;AACA,QAAA,OAAO,IAAI;IACb;IAGA,IAAI,OAAO,CAAC,IAAI,EAAA;AACd,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACtB;IAEA,KAAK,GAAA;IACL;AAlHW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAyBtB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAAkI,qBAAA,EAAA,EAAA,EAAA,KAAA,EAEhB,iBAAiB,wCAEjB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAAhJ,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAJ,IAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA7BlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EARrB;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,YAAY;AACrB,gBAAA,QAAQ,EAAE;AACb;AACJ,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtCL,+hHAqFA,EAAA,MAAA,EAAA,CAAA,+kEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAkJ,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,aAAA,EAAA,UAAA,EAAA,cAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAxF,2BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,aAAA,EAAA,OAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,oBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA2F,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FD5Ca,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAZnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAAA,SAAA,EAGlB;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,YAAY;AACrB,4BAAA,QAAQ,EAAE;AACb;AACJ,qBAAA,EAAA,UAAA,EACW,KAAK,EAAA,QAAA,EAAA,+hHAAA,EAAA,MAAA,EAAA,CAAA,+kEAAA,CAAA,EAAA;;0BA2Bd,MAAM;2BAAC,gBAAgB;;0BAEvB,MAAM;2BAAC,iBAAiB;;0BAExB,MAAM;2BAAC,iBAAiB;;sBA5B5B;;sBACA;;sBACA;;;ME5BU,iBAAiB,CAAA;AAC1B,IAAA,WAAA,CACY,YAA0B,EACC,YAA+B,EAC1D,cAA8B,EAC9B,MAAc,EACd,KAAqB,EACM,WAA4B,EAC7B,eAAqC,EAAA;QAN/D,IAAA,CAAA,YAAY,GAAZ,YAAY;QACe,IAAA,CAAA,YAAY,GAAZ,YAAY;QACvC,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,KAAK,GAAL,KAAK;QACsB,IAAA,CAAA,WAAW,GAAX,WAAW;QACZ,IAAA,CAAA,eAAe,GAAf,eAAe;IAIrD;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI;YACA,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,uBAAuB,CAAC;YAClE,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,6BAA6B,CAAC;YACrE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;AAC5C,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,eAAe,CAAC;AAC5E,YAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AACvB,gBAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,WAAW,CAAC;gBACxC,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,KAAI;oBAC1D,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;wBACzC,IAAI,MAAM,EAAE;;AAER,4BAAA,IAAI,KAAK;AACT,4BAAA,IAAI,SAAS,KAAK,IAAI,EAAE;AACpB,gCAAA,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;4BAC1C;iCAAO;AACH,gCAAA,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE;4BAC9C;4BACA,MAAM,MAAM,GAAG,iBAAiB;;;AAGhC,4BAAA,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,2BAA2B,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,sBAAsB;AACrH,4BAAA,YAAY,CAAC,UAAU,CAAC,2BAA2B,CAAC;4BACpD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,sBAAsB,GAAG,GAAG;4BAC1D,IAAI,KAAK,GAAG,IAAI;4BAChB,IAAI,MAAM,GAAG,KAAK;AAClB,4BAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;gCAEzB,KAAK,GAAG,KAAK;gCACb,MAAM,GAAG,IAAI;4BACjB;4BACA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC;AACpD,4BAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;;;AAGpD,4BAAA,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,MAAK;gCAClE,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC;AACtG,4BAAA,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACf,gCAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;oCACzB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,EAAE;AAClC,wCAAA,WAAW,EAAE;AACT,4CAAA,cAAc,EAAE,SAAS;AACzB,4CAAA,mBAAmB,EAAE;AACxB;AACJ,qCAAA,CAAC;gCACN;AACJ,4BAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAI;AACf,gCAAA,IAAI,KAAK,EAAE,YAAY,EAAE;;;oCAGrB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC;oCAChC;gCACJ;gCACA,IAAI,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC;AAC1D,gCAAA,IAAI,KAAK,CAAC,UAAU,EAAE;oCAClB,YAAY,GAAG,KAAK,CAAC,UAAU,GAAG,IAAI,GAAG,YAAY;gCACzD;AACA,gCAAA,IAAI,KAAK,CAAC,MAAM,EAAE;oCACd,YAAY,GAAG,KAAK,CAAC,MAAM,GAAG,GAAG,GAAG,YAAY;gCACpD;AACA,gCAAA,YAAY,GAAG,kEAAkE,GAAG,YAAY;AAChG,gCAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,aAAa,EACb,oCAAoC,GAAG,YAAY,CACtD;AACD,gCAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,gCAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;oCACzB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,EAAE;AAClC,wCAAA,WAAW,EAAE;AACT,4CAAA,cAAc,EAAE,QAAQ;AACxB,4CAAA,0BAA0B,EAAE,YAAY;AACxC,4CAAA,0BAA0B,EAAE,uBAAuB;AACnD,4CAAA,mBAAmB,EAAE;AACxB;AACJ,qCAAA,CAAC;gCACN;qCAAO;oCACH,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC;gCACpC;AACJ,4BAAA,CAAC,CAAC;wBACN;6BAAO;AACH,4BAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,WAAA,CAAa,EACb,kCAAkC,CACrC;AACD,4BAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;4BACrC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,EAAE;AAC7B,gCAAA,WAAW,EAAE;AACT,oCAAA,cAAc,EAAE,QAAQ;AACxB,oCAAA,0BAA0B,EAAE,oEAAoE;AAChG,oCAAA,0BAA0B,EAAE,sBAAsB;AACrD;AACJ,6BAAA,CAAC;wBACN;AACJ,oBAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAI;wBACf,MAAM,YAAY,GAAG,CAAA,EAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,iBAAiB,GAAG,EAAE,CAAA,CAAE;AACxG,wBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,aAAa,EACb,oCAAoC,GAAG,YAAY,CACtD;AACD,wBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,wBAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;4BACzB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,EAAE;AAClC,gCAAA,WAAW,EAAE;AACT,oCAAA,cAAc,EAAE,QAAQ;AACxB,oCAAA,0BAA0B,EAAE,YAAY;AACxC,oCAAA,0BAA0B,EAAE,sBAAsB;AACrD;AACJ,6BAAA,CAAC;wBACN;AACJ,oBAAA,CAAC,CAAC;AACN,gBAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAI;oBACf,MAAM,YAAY,GAAG,CAAA,EAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,iBAAiB,GAAG,EAAE,CAAA,CAAE;AACxG,oBAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,aAAa,EACb,oCAAoC,GAAG,YAAY,CACtD;AACD,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,oBAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;wBACzB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,EAAE;AAClC,4BAAA,WAAW,EAAE;AACT,gCAAA,cAAc,EAAE,QAAQ;AACxB,gCAAA,0BAA0B,EAAE,YAAY;AACxC,gCAAA,0BAA0B,EAAE,sBAAsB;AACrD;AACJ,yBAAA,CAAC;oBACN;AACJ,gBAAA,CAAC,CAAC;YACN;QACJ;QAAE,OAAO,CAAC,EAAE;YACR,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC;QACpC;IACJ;AAzJS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAlK,IAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAGd,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAAU,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAM,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAIjB,iBAAiB,aACjB,gBAAgB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AARnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,yEAHhB,oEAAoE,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAmJ,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAGrE,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAL7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,QAAQ,EAAE,oEAAoE;AAC9E,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAIQ,MAAM;2BAAC,iBAAiB;;0BAIxB,MAAM;2BAAC,iBAAiB;;0BACxB,MAAM;2BAAC,gBAAgB;;;MCtBnB,iBAAiB,CAAA;AAA9B,IAAA,WAAA,GAAA;QACE,IAAA,CAAA,KAAK,GAAG,CAAC;QACT,IAAA,CAAA,KAAK,GAAW,EAAE;QAClB,IAAA,CAAA,KAAK,GAAoE,EAAE;IAC7E;AAAC;AAAA;MAQY,sBAAsB,CAAA;AASjC,IAAA,WAAA,GAAA;QAPA,IAAA,CAAA,MAAM,GAAQ,EAAE;QAEP,IAAA,CAAA,KAAK,GAAG,EAAE;QACV,IAAA,CAAA,KAAK,GAAwB,EAAE;QAC/B,IAAA,CAAA,gBAAgB,GAAG,CAAC;QACnB,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAiB;IAEpC;AAEf,IAAA,mBAAmB,CAAC,KAAK,EAAA;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;AACtC,QAAA,IAAI,IAAI,EAAE,KAAK,KAAK,UAAU,IAAI,QAAQ,EAAE,KAAK,KAAK,UAAU,EAAE;AAChE,YAAA,OAAO,IAAI;QACb;AACA,QAAA,OAAO,KAAK;IACd;+GAlBW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,sNCdnC,osCA8BA,EAAA,MAAA,EAAA,CAAA,u3FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAnK,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDhBa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,cAGlB,KAAK,EAAA,QAAA,EAAA,osCAAA,EAAA,MAAA,EAAA,CAAA,u3FAAA,CAAA,EAAA;;sBAMlB;;sBACA;;sBACA;;sBACA;;;MEjBU,kBAAkB,CAAA;AAA/B,IAAA,WAAA,GAAA;QACE,IAAA,CAAA,KAAK,GAAG,CAAC;QACT,IAAA,CAAA,KAAK,GAAW,EAAE;IACpB;AAAC;AAAA;MAQY,uBAAuB,CAAA;AAiBlC,IAAA,WAAA,GAAA;QAfA,IAAA,CAAA,MAAM,GAAQ,EAAE;QAEP,IAAA,CAAA,KAAK,GAAG,EAAE;QACV,IAAA,CAAA,KAAK,GAAyB,EAAE;QAChC,IAAA,CAAA,eAAe,GAAG,MAAM;QACxB,IAAA,CAAA,eAAe,GAAG,MAAM;QACxB,IAAA,CAAA,kBAAkB,GAAG,KAAK;QAC1B,IAAA,CAAA,aAAa,GAAG,EAAE;QAClB,IAAA,CAAA,eAAe,GAAG,IAAI;QACtB,IAAA,CAAA,gBAAgB,GAAG,CAAC;QACnB,IAAA,CAAA,sBAAsB,GAAG,IAAI,YAAiB;QAC9C,IAAA,CAAA,KAAK,GAAG,IAAI,YAAiB;QAC7B,IAAA,CAAA,IAAI,GAAG,IAAI,YAAiB;QAC5B,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY;IAEzB;IAEf,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;IACnB;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;IACnB;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;AACpD,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAChB;QACF;QACA,IAAI,CAAC,gBAAgB,EAAE;QACvB,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;AACvD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC1D;AAEA,IAAA,QAAQ,CAAC,OAAO,EAAA;AACd,QAAA,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,KAAK;QACrC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;AACvD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC1D;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,gBAAgB,EAAE;QACvB,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;AACvD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC1D;AAEA,IAAA,IAAI,mBAAmB,GAAA;QACrB,MAAM,YAAY,GAAG,KAAK;QAC1B,MAAM,WAAW,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;AAC9D,QAAA,MAAM,WAAW,GAAG,YAAY,GAAG,WAAW;QAC9C,OAAO,WAAW,GAAG,KAAK;IAC5B;+GAtDW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,idCfpC,0lEAkDA,EAAA,MAAA,EAAA,CAAA,44JAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDnCa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,cAGnB,KAAK,EAAA,QAAA,EAAA,0lEAAA,EAAA,MAAA,EAAA,CAAA,44JAAA,CAAA,EAAA;;sBAMlB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;MEtBU,iBAAiB,CAAA;AAU5B,IAAA,WAAA,GAAA;QARA,IAAA,CAAA,SAAS,GAAG,UAAU;QACtB,IAAA,CAAA,MAAM,GAAG,KAAK;QACd,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,WAAW,GAAG,IAAI;QAClB,IAAA,CAAA,iBAAiB,GAAG,KAAK;IAIV;IAEf,QAAQ,GAAA;QACN,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,MAAM;QACrD,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,KAAK;QAC1D,IAAI,CAAC,iBAAiB,GAAG,YAAY,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,IAAI;QACzE,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC;AACvD,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,KAAK,KAAK;QACxC,IAAI,CAAC,iBAAiB,EAAE;IAC1B;IAEA,IAAI,GAAA;AACF,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO;AAC3C,QAAA,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;AAClC,QAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE;IAC1B;IAEA,IAAI,GAAA;AACF,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,GAAG,KAAK,GAAG,IAAI;AACzC,QAAA,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC;IACxC;IAEA,WAAW,GAAA;AACT,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,GAAG,IAAI,GAAG,KAAK;AAClD,QAAA,YAAY,CAAC,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC;IAC/C;IAEA,iBAAiB,GAAA;AACf,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,KAAK;AAC5C,QAAA,YAAY,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC;QACzC,IAAI,CAAC,iBAAiB,EAAE;IAC1B;IAEA,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACrB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,IAAI,CAAC;QACvD;aAAO;YACL,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,MAAM,CAAC;QACzD;IACF;AAEA,IAAA,oBAAoB,CAAC,KAAU,EAAA;AAC7B,QAAA,YAAY,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC;AAC3C,QAAA,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC;IAChF;AAEA,IAAA,sBAAsB,CAAC,KAAU,EAAA;AAC/B,QAAA,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC;AAC7C,QAAA,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,KAAK,CAAC;IAClF;+GA3DW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,yECR9B,+3DA0CA,EAAA,MAAA,EAAA,CAAA,i4DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDlCa,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAN7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,cAGZ,KAAK,EAAA,QAAA,EAAA,+3DAAA,EAAA,MAAA,EAAA,CAAA,i4DAAA,CAAA,EAAA;;;MESR,gBAAgB,CAAA;AAS3B,IAAA,WAAA,CACuC,WAA4B,EAC7B,eAAqC,EAC/D,cAA8B,EAAA;QAFH,IAAA,CAAA,WAAW,GAAX,WAAW;QACZ,IAAA,CAAA,eAAe,GAAf,eAAe;QACzC,IAAA,CAAA,cAAc,GAAd,cAAc;QAX1B,IAAA,CAAA,SAAS,GAAG,SAAS;QACrB,IAAA,CAAA,eAAe,GAAG,EAAE;QACpB,IAAA,CAAA,WAAW,GAAG,EAAE;QAChB,IAAA,CAAA,eAAe,GAAG,EAAE;QACpB,IAAA,CAAA,sBAAsB,GAAG,KAAK;QAC9B,IAAA,CAAA,qBAAqB,GAAG,EAAE;QAQtB,IAAI,CAAC,yBAAyB,EAAE;AAChC,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,SAAS,CAAC,MAAK;YAC3E,IAAI,CAAC,yBAAyB,EAAE;AACpC,QAAA,CAAC,CAAC;IACN;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,oBAAoB,EAAE,WAAW,EAAE;IAC5C;IAEQ,yBAAyB,GAAA;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ;AAClE,QAAA,IAAI,CAAC,sBAAsB,GAAG,QAAQ,KAAK,MAAM;AACjD,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;AAC9B,cAAE;cACA,EAAE;IACZ;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAC/B,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,6BAA6B,EAC7B,gFAAgF,CACnF;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;YACrC;QACF;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YACpB;QACF;QACA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,MAAK;AACrG,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,SAAS,EACT,SAAS,EACT,CAAA,cAAA,CAAgB,EAChB,CAAA,gCAAA,CAAkC,CACrC;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,YAAA,IAAI,CAAC,eAAe,GAAG,EAAE;AACzB,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE;AACrB,YAAA,IAAI,CAAC,eAAe,GAAG,EAAE;AAC3B,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAI;YACjB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC;AACvD,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,uBAAuB,EACvB,CAAA,0BAAA,EAA6B,OAAO,CAAA,CAAE,CACzC;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACvC,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;QACN,IAAI,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;AAC/F,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,gBAAA,CAAkB,EAClB,CAAA,2EAAA,CAA6E,CAChF;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,YAAA,OAAO,KAAK;QACd;QACA,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,eAAe,EAAE;AAC7C,YAAA,MAAM,WAAW,GAAG,IAAI,YAAY,CAChC,OAAO,EACP,OAAO,EACP,CAAA,iBAAA,CAAmB,EACnB,CAAA,kEAAA,CAAoE,CACvE;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,YAAA,OAAO,KAAK;QACd;AACA,QAAA,OAAO,IAAI;IACb;+GA3FW,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAUf,iBAAiB,EAAA,EAAA,EAAA,KAAA,EACjB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAAwB,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAXjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,wECf7B,giDAmCA,EAAA,MAAA,EAAA,CAAA,+rDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDpBa,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,cAGX,KAAK,EAAA,QAAA,EAAA,giDAAA,EAAA,MAAA,EAAA,CAAA,+rDAAA,CAAA,EAAA;;0BAYd,MAAM;2BAAC,iBAAiB;;0BACxB,MAAM;2BAAC,gBAAgB;;;MElBjB,kBAAkB,CAAA;IAI7B,WAAA,CACqC,eAAgC,EAC3D,cAA8B,EAAA;QADH,IAAA,CAAA,eAAe,GAAf,eAAe;QAC1C,IAAA,CAAA,cAAc,GAAd,cAAc;;AAJhB,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,GAAG,EAAkB;IAKlD;AAEH;;AAEG;AACH,IAAA,sBAAsB,CAAC,IAAS,EAAE,GAAW,EAAE,GAAW,EAAA;AACxD,QAAA,MAAM,iBAAiB,GAAG,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,GAAG,EAAE;;AAGzC,QAAA,MAAM,WAAW,GAAG;YAClB,GAAG,IAAI,CAAC,IAAI;AACZ,YAAA,WAAW,EAAE;SACd;;AAGD,QAAA,IAAI,CAAC,IAAI,GAAG,WAAW;IACzB;AAEA;;AAEG;AACH,IAAA,MAAM,eAAe,CAAC,IAAS,EAAE,IAAY,EAAE,WAAiC,EAAA;QAC9E,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;AACrB,YAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC;QAC9C;AAEA,QAAA,IAAI;;AAEF,YAAA,MAAM,aAAa,GAAG;gBACpB,IAAI,EAAE,IAAI,CAAC;aACZ;;AAGD,YAAA,IAAI,IAAI,KAAK,SAAS,EAAE;;AAEtB,gBAAA,MAAM,UAAU,GAAG,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,WAAW,IAAI,aAAa;AAEjF,gBAAA,IAAI,UAAU,KAAK,gBAAgB,EAAE;AACnC,oBAAA,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,iBAAiB,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,CAAC;gBAC7E;qBAAO;AACL,oBAAA,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,cAAc,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,CAAC;gBAC1E;YACF;AAAO,iBAAA,IAAI,IAAI,KAAK,UAAU,EAAE;AAC9B,gBAAA,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,YAAY,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,CAAC;YACxE;iBAAO;AACL,gBAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,CAAA,CAAE,CAAC;YACjD;;AAGA,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE;AAC1B,gBAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;YAC5D;AAEA,YAAA,MAAM,cAAc,GAAG,IAAI,YAAY,CACrC,SAAS,EACT,gBAAgB,EAChB,gBAAgB,IAAI,CAAC,IAAI,CAAA,4BAAA,CAA8B,CACxD;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC;QAE1C;QAAE,OAAO,KAAK,EAAE;YACd,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,KAAK,CAAC;AAChE,YAAA,MAAM,YAAY,GAAG,IAAI,YAAY,CACnC,OAAO,EACP,aAAa,EACb,CAAA,yBAAA,EAA4B,YAAY,CAAA,CAAE,CAC3C;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC;AACtC,YAAA,MAAM,KAAK;QACb;IACF;AAEA;;AAEG;AACH,IAAA,MAAM,iBAAiB,CAAC,IAAS,EAAE,IAAY,EAAE,WAAiC,EAAA;QAChF,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;AACrB,YAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC;QAC9C;;;AAIA,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW;AAC5B,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO;QAC1B;aAAO;YACL,IAAI,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE;QAC/B;;QAGA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;;QAGtC,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC;IACrD;AAEA;;AAEG;AACH,IAAA,iBAAiB,CAAC,IAAS,EAAA;AACzB,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE;AAAE,YAAA,OAAO,KAAK;AAEnC,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AAC5D,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,EAAE,WAAW;;AAG9C,QAAA,IAAI,CAAC,gBAAgB,IAAI,eAAe,EAAE;AACxC,YAAA,OAAO,IAAI;QACb;;QAGA,OAAO,gBAAgB,KAAK,eAAe;IAC7C;AAEA;;AAEG;AACH,IAAA,qBAAqB,CAAC,IAAS,EAAA;AAC7B,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE;AAC7C,YAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;AACxC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;YAC5D;QACF;IACF;AAEA;;AAEG;AACH,IAAA,gBAAgB,CAAC,cAAsB,EAAA;AACrC,QAAA,IAAI,CAAC,cAAc;AAAE,YAAA,OAAO,IAAI;AAEhC,QAAA,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC;AAClD,QAAA,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC;AAC9B,QAAA,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC;QAE9B,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;AAC5B,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE;IACrB;AAEA;;AAEG;IACH,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;IAChC;AA1JW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,kBAKnB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAAQ,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AALhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFjB,MAAM,EAAA,CAAA,CAAA;;4FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;0BAMI,MAAM;2BAAC,iBAAiB;;;MCKhB,yBAAyB,CAAA;AACpC,IAAA,WAAA,GAAA,EAAe;AAEf;;AAEG;IACH,kBAAkB,CAChB,OAAY,EACZ,WAAkB,EAAA;;QAGlB,MAAM,cAAc,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,IAAI;QACnF,MAAM,uBAAuB,GAAG,OAAO,CAAC,UAAU,EAAE,EAAE,IAAI,OAAO,CAAC,YAAY;AAC9E,QAAA,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE;;QAGrC,IAAI,cAAc,GAAG,cAAc;;AAGnC,QAAA,IAAI,CAAC,cAAc,IAAI,uBAAuB,EAAE;AAC9C,YAAA,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,uBAAuB,CAAC;YAC1E,IAAI,UAAU,EAAE;;;AAGd,gBAAA,cAAc,GAAG,CAAC,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE;AAC9C,qBAAC,UAAU,CAAC,QAAQ,IAAI,OAAO,UAAU,CAAC,QAAQ,KAAK,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;oBAC9F,UAAU,CAAC,QAAQ,EAAE,EAAE;AACvB,oBAAA,UAAU,CAAC,UAAU;AACrB,oBAAA,IAAI;YACvB;QACF;;AAGA,QAAA,IAAI,CAAC,cAAc,IAAI,SAAS,EAAE;AAChC,YAAA,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,IACnC,CAAC,CAAC,SAAS,KAAK,SAAS;gBACzB,CAAC,CAAC,OAAO,KAAK,SAAS;AACvB,gBAAA,CAAC,CAAC,OAAO,EAAE,EAAE,KAAK,SAAS,CAC5B;YACD,IAAI,UAAU,EAAE;;;AAGd,gBAAA,cAAc,GAAG,CAAC,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE;AAC9C,qBAAC,UAAU,CAAC,QAAQ,IAAI,OAAO,UAAU,CAAC,QAAQ,KAAK,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;oBAC9F,UAAU,CAAC,QAAQ,EAAE,EAAE;AACvB,oBAAA,UAAU,CAAC,UAAU;AACrB,oBAAA,IAAI;YACvB;QACF;QAEA,OAAO,cAAc,IAAI,IAAI;IAC/B;AAEA;;;AAGG;IACH,gBAAgB,CACd,OAAY,EACZ,UAAiB,EACjB,iBAA0E,EAC1E,eAAwE,EACxE,WAAkB,EAAA;;QAGlB,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,IAAI,OAAO,CAAC,IAAI;QAErD,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACtC,YAAA,OAAO,IAAI;QACb;QAEA,MAAM,KAAK,GAAsB,EAAE;QACnC,MAAM,WAAW,GAAuB,EAAE;;AAG1C,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ;AACtB,YAAA,OAAO,CAAC,QAAQ;YAChB,OAAO,CAAC,MAAM,EAAE,EAAE;AAClB,YAAA,OAAO,CAAC,QAAQ;AAChB,YAAA,OAAO,CAAC,SAAS,EAAE,EAAE;QAEtC,IAAI,QAAQ,EAAE;AACZ,YAAA,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC;YAChE,IAAI,cAAc,EAAE;gBAClB,MAAM,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC1D,IAAI,SAAS,EAAE;oBACb,KAAK,CAAC,IAAI,CAAC;wBACT,EAAE,EAAE,cAAc,CAAC,EAAE;AACrB,wBAAA,IAAI,EAAE,cAAc,CAAC,IAAI,IAAI,QAAQ;AACrC,wBAAA,IAAI,EAAE,UAAU;wBAChB,GAAG,EAAE,SAAS,CAAC,GAAG;wBAClB,GAAG,EAAE,SAAS,CAAC;AAChB,qBAAA,CAAC;AACF,oBAAA,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;gBAClD;YACF;QACF;;AAGA,QAAA,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI;AACjD,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,IAAI,QAAQ;YACxC,MAAM,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;YAEzC,IAAI,GAAG,EAAE;gBACP,KAAK,CAAC,IAAI,CAAC;AACT,oBAAA,EAAE,EAAE,QAAQ;AACZ,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,IAAI,EAAE,SAAS;oBACf,GAAG,EAAE,GAAG,CAAC,GAAG;oBACZ,GAAG,EAAE,GAAG,CAAC;AACV,iBAAA,CAAC;AACF,gBAAA,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YACtC;QACF;;QAGA,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC;QAEpE,IAAI,cAAc,EAAE;AAClB,YAAA,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,cAAc,CAAC;YACpE,IAAI,YAAY,EAAE;gBAChB,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;gBACtD,IAAI,OAAO,EAAE;oBACX,KAAK,CAAC,IAAI,CAAC;wBACT,EAAE,EAAE,YAAY,CAAC,EAAE;AACnB,wBAAA,IAAI,EAAE,YAAY,CAAC,IAAI,IAAI,MAAM;AACjC,wBAAA,IAAI,EAAE,UAAU;wBAChB,GAAG,EAAE,OAAO,CAAC,GAAG;wBAChB,GAAG,EAAE,OAAO,CAAC;AACd,qBAAA,CAAC;AACF,oBAAA,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC9C;YACF;QACF;;AAGA,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACpB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE;IAC/B;AAEA;;AAEG;IACH,oBAAoB,CAClB,OAAY,EACZ,gBAA6B,EAAA;QAE7B,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,IAAI,OAAO,CAAC,IAAI;QAErD,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACtC,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,IAAS,KAAI;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI;AACjD,YAAA,OAAO,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC;AACvC,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;IACH,mBAAmB,CACjB,OAAY,EACZ,gBAA6B,EAAA;QAE7B,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,IAAI,OAAO,CAAC,IAAI;QAErD,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACtC,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,IAAS,KAAI;YAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI;AACjD,YAAA,OAAO,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC;AACvC,QAAA,CAAC,CAAC;IACJ;AAEA;;;AAGG;IACH,0BAA0B,CACxB,WAAwB,EACxB,gBAA6B,EAAA;QAE7B,MAAM,aAAa,GAAsB,EAAE;QAC3C,MAAM,mBAAmB,GAAuB,EAAE;AAElD,QAAA,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;;AAE/B,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;AAC7D,gBAAA,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,gBAAA,mBAAmB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAChD;AACF,QAAA,CAAC,CAAC;QAEF,OAAO;AACL,YAAA,KAAK,EAAE,aAAa;AACpB,YAAA,WAAW,EAAE;SACd;IACH;AAEA;;AAEG;AACH,IAAA,uBAAuB,CACrB,OAAY,EACZ,iBAA8B,EAC9B,iBAA0B,EAAA;AAE1B,QAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE;;QAG5C,IAAI,iBAAiB,EAAE;YACrB,IAAI,CAAC,gBAAgB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE;AACjE,gBAAA,OAAO,KAAK;YACd;QACF;AAEA,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;AACH,IAAA,mCAAmC,CAAC,QAAe,EAAA;AACjD,QAAA,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU;AAC1C,QAAA,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAG;YACzB,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,IAAI,OAAO,CAAC,SAAS;YAC1D,IAAI,SAAS,EAAE;AACb,gBAAA,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC;YACjC;AACF,QAAA,CAAC,CAAC;QACF,OAAO,gBAAgB,CAAC,IAAI;IAC9B;+GA/OW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cAFxB,MAAM,EAAA,CAAA,CAAA;;4FAEP,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCkBY,yBAAyB,CAAA;AACpC;;;;;;;;;AASG;AACH,IAAA,oBAAoB,CAClB,OAAY,EACZ,eAAiC,EACjC,iBAAmC,EACnC,OAAc,EACd,UAAiB,EACjB,KAAA,GAAe,EAAE,EAAA;;AAGjB,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,IAAI,OAAO,CAAC,IAAI,IAAI,EAAE;AAC9D,QAAA,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC;QAClE,MAAM,eAAe,GAAuB,EAAE;QAC9C,MAAM,WAAW,GAAa,EAAE;QAChC,MAAM,SAAS,GAAa,EAAE;QAC9B,MAAM,WAAW,GAAa,EAAE;QAChC,MAAM,gBAAgB,GAAa,EAAE;;QAGrC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE,EAAE;AAC9H,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,MAAM,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE;;AAGvD,QAAA,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC;AAChE,QAAA,MAAM,UAAU,GAAG,cAAc,EAAE,IAAI,IAAI,gBAAgB;AAE3D,QAAA,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,MAAM,CAAC;AAC5D,QAAA,MAAM,QAAQ,GAAG,YAAY,EAAE,IAAI,IAAI,cAAc;;QAGrD,MAAM,cAAc,GAAG,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC;QACtD,IAAI,CAAC,cAAc,EAAE;AACnB,YAAA,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC;QACnC;aAAO;;AAEL,YAAA,eAAe,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;AAC9D,YAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AACxB,YAAA,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;QAC9B;;AAGA,QAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;AAChC,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;AACnD,YAAA,MAAM,UAAU,GAAG,MAAM,EAAE,IAAI,IAAI,QAAQ;YAC3C,MAAM,cAAc,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;YACpD,IAAI,cAAc,EAAE;AAClB,gBAAA,eAAe,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;AAC9D,gBAAA,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AACrC,gBAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AACxB,gBAAA,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;YAC7B;iBAAO;AACL,gBAAA,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC;YACnC;QACF;;QAGA,MAAM,YAAY,GAAG,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC;QAClD,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC;QACjC;aAAO;;AAEL,YAAA,eAAe,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;AAC1D,YAAA,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;AACtB,YAAA,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;QAC9B;;;QAIA,MAAM,WAAW,GAAiB,EAAE;QACpC,MAAM,YAAY,GAAa,EAAE;QACjC,MAAM,UAAU,GAAa,EAAE;QAC/B,MAAM,YAAY,GAAa,EAAE;QACjC,MAAM,kBAAkB,GAAc,EAAE;;AAGxC,QAAA,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;AAC7B,QAAA,UAAU,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;AAC/B,QAAA,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;AAC7B,QAAA,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC;;AAGzC,QAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;AAChC,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;AACnD,YAAA,MAAM,UAAU,GAAG,MAAM,EAAE,IAAI,IAAI,QAAQ;YAC3C,MAAM,cAAc,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;YAEpD,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,UAAU,CAAC;AACrD,YAAA,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;AACzB,YAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AAC5B,YAAA,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC;QAC3C;;AAGA,QAAA,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC3B,QAAA,UAAU,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;AAC7B,QAAA,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;AAC7B,QAAA,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC;;;AAIvC,QAAA,MAAM,wBAAwB,GAAG,IAAI,GAAG,EAAkB;QAC1D,IAAI,mBAAmB,GAAG,CAAC;;AAG3B,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,EAAe;AACxC,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,IAAI,IAAI,CAAC,EAAE;gBAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;QAC3C;;;;;;QAOA,MAAM,gBAAgB,GAAU,OAAO,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;AAGzD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAChD,YAAA,MAAM,eAAe,GAAG,kBAAkB,CAAC,CAAC,CAAC;YAC7C,MAAM,aAAa,GAAG,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC;AAC/C,YAAA,MAAM,SAAS,GAAG,eAAe,IAAI,aAAa;;AAGlD,YAAA,IAAI,SAA6B;YACjC,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1F,gBAAA,IAAI,YAAiB;;;AAIrB,gBAAA,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,oBAAA,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC;AACxB,oBAAA,MAAM,WAAW,GAAG,gBAAgB,CAAC,SAAS,CAAC;AAC/C,oBAAA,MAAM,aAAa,GAAG,CAAC,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,GAAG,WAAW,EAAE,EAAE;AACvF,oBAAA,YAAY,GAAG,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,SAAS;gBACzE;;;gBAIA,IAAI,CAAC,YAAY,EAAE;AACjB,oBAAA,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC;oBAC5B,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;AAC9B,oBAAA,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,IAAG;AAC/B,wBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;AAC1E,wBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;AACtE,wBAAA,OAAO,CAAC,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,IAAI,MAAM,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,IAAI,CAAC;AACrF,oBAAA,CAAC,CAAC;gBACJ;gBAEA,IAAI,YAAY,EAAE;oBAChB,MAAM,UAAU,GAAG,YAAY,CAAC,aAAa,IAAI,YAAY,CAAC,OAAO,IAAI,CAAC;oBAC1E,MAAM,UAAU,GAAG,YAAY,CAAC,WAAW,IAAI,YAAY,CAAC,OAAO,IAAI,CAAC;oBACxE,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE;wBACpC,SAAS,GAAG,CAAC,UAAU,GAAG,UAAU,IAAI,CAAC,GAAG,SAAS;oBACvD;gBACF;YACF;YAEA,WAAW,CAAC,IAAI,CAAC;AACf,gBAAA,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;AACrB,gBAAA,EAAE,EAAE,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC;AACvB,gBAAA,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AACrB,gBAAA,IAAI,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;AACvB,gBAAA,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;AACzB,gBAAA,MAAM,EAAE,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC;AAC3B,gBAAA,SAAS,EAAE,SAAS;AACpB,gBAAA,eAAe,EAAE,eAAe;AAChC,gBAAA,aAAa,EAAE,aAAa;gBAC5B;AACD,aAAA,CAAC;;YAGF,IAAI,SAAS,EAAE;AACb,gBAAA,wBAAwB,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC,CAAC;AACpD,gBAAA,mBAAmB,EAAE;YACvB;QACF;;QAGA,MAAM,cAAc,GAAU,EAAE;AAChC,QAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;AAChC,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;YACnD,MAAM,cAAc,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;YAEpD,IAAI,MAAM,EAAE;gBACV,cAAc,CAAC,IAAI,CAAC;oBAClB,EAAE,EAAE,MAAM,CAAC,EAAE;oBACb,IAAI,EAAE,cAAc,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,QAAQ;AACrD,oBAAA,IAAI,EAAE,SAAS;oBACf,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,QAAQ,IAAI,KAAK;AACvD,oBAAA,SAAS,EAAE;AACZ,iBAAA,CAAC;YACJ;iBAAO;;gBAEL,cAAc,CAAC,IAAI,CAAC;AAClB,oBAAA,EAAE,EAAE,QAAQ;AACZ,oBAAA,IAAI,EAAE,cAAc,EAAE,IAAI,IAAI,QAAQ;AACtC,oBAAA,IAAI,EAAE,SAAS;AACf,oBAAA,SAAS,EAAE,KAAK;AAChB,oBAAA,SAAS,EAAE;AACZ,iBAAA,CAAC;YACJ;QACF;QAEA,OAAO;YACL,SAAS;YACT,eAAe;YACf,WAAW;YACX,SAAS;YACT,WAAW;YACX,WAAW;YACX,cAAc;YACd,QAAQ;YACR,UAAU;YACV,MAAM;YACN,QAAQ;AACR,YAAA,sBAAsB,EAAE,gBAAgB,CAAC,MAAM,KAAK,CAAC;YACrD,gBAAgB;YAChB;SACD;IACH;AAEA;;;;;;AAMG;AACH,IAAA,sBAAsB,CACpB,OAAY,EACZ,eAAiC,EACjC,iBAAmC,EAAA;AAEnC,QAAA,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,IAAI,OAAO,CAAC,IAAI,IAAI,EAAE;QAC3D,MAAM,eAAe,GAAuB,EAAE;;QAG9C,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE,EAAE;AAC9H,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,MAAM,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE;;QAGvD,MAAM,cAAc,GAAG,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC;QACtD,IAAI,CAAC,cAAc,EAAE;AACnB,YAAA,OAAO,IAAI;QACb;AACA,QAAA,eAAe,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;;AAG9D,QAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;YAChC,MAAM,cAAc,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;YACpD,IAAI,cAAc,EAAE;AAClB,gBAAA,eAAe,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;YAChE;QACF;;QAGA,MAAM,YAAY,GAAG,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC;QAClD,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,OAAO,IAAI;QACb;AACA,QAAA,eAAe,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;AAE1D,QAAA,OAAO,eAAe,CAAC,MAAM,IAAI,CAAC,GAAG,eAAe,GAAG,IAAI;IAC7D;+GAjRW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cAFxB,MAAM,EAAA,CAAA,CAAA;;4FAEP,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MC7BY,oBAAoB,CAAA;AAC/B;;;;;;;;AAQG;IACH,sBAAsB,CACpB,UAAiB,EACjB,QAAe,EACf,WAAkB,EAClB,sBAA6B,EAC7B,uBAA8B,EAAA;AAE9B,QAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU;;AAGrC,QAAA,IAAI,uBAAuB,CAAC,MAAM,KAAK,CAAC,IAAI,sBAAsB,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/E,YAAA,UAAU,CAAC,OAAO,CAAC,QAAQ,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC5D,YAAA,OAAO,WAAW;QACpB;AAEA,QAAA,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;AACzE,QAAA,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;;AAG3E,QAAA,IAAI,uBAAuB,CAAC,MAAM,GAAG,CAAC,EAAE;AACtC,YAAA,uBAAuB,CAAC,OAAO,CAAC,QAAQ,IAAG;AACzC,gBAAA,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC9B,YAAA,CAAC,CAAC;QACJ;;AAGA,QAAA,IAAI,sBAAsB,CAAC,MAAM,GAAG,CAAC,EAAE;;AAErC,YAAA,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAG;AACzB,gBAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE;gBAC5C,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,QAAQ;;gBAGlE,MAAM,cAAc,GAAG,kBAAkB,CAAC,GAAG,CAAC,gBAAgB,CAAC;AAC/D,gBAAA,MAAM,eAAe,GAAG,mBAAmB,CAAC,IAAI,KAAK,CAAC,IAAI,mBAAmB,CAAC,GAAG,CAAC,eAAe,CAAC;AAElG,gBAAA,IAAI,cAAc,IAAI,eAAe,IAAI,eAAe,EAAE;AACxD,oBAAA,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC;gBAClC;AACF,YAAA,CAAC,CAAC;;AAGF,YAAA,WAAW,CAAC,OAAO,CAAC,UAAU,IAAG;gBAC/B,MAAM,mBAAmB,GAAG,UAAU,CAAC,SAAS,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE;AAC1E,gBAAA,IAAI,kBAAkB,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE;oBAC/C,MAAM,iBAAiB,GAAG,UAAU,CAAC,QAAQ,EAAE,EAAE,IAAI,UAAU,CAAC,UAAU;oBAC1E,IAAI,iBAAiB,EAAE;AACrB,wBAAA,WAAW,CAAC,GAAG,CAAC,iBAAiB,CAAC;oBACpC;gBACF;AACF,YAAA,CAAC,CAAC;;;AAIF,YAAA,IAAI,uBAAuB,CAAC,MAAM,KAAK,CAAC,EAAE;AACxC,gBAAA,UAAU,CAAC,OAAO,CAAC,QAAQ,IAAG;oBAC5B,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,IAAG;wBAC9C,MAAM,mBAAmB,GAAG,UAAU,CAAC,SAAS,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE;AAC1E,wBAAA,OAAO,kBAAkB,CAAC,GAAG,CAAC,mBAAmB,CAAC;AACpD,oBAAA,CAAC,CAAC;oBACF,IAAI,SAAS,EAAE;AACb,wBAAA,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC9B;AACF,gBAAA,CAAC,CAAC;YACJ;QACF;AAEA,QAAA,OAAO,WAAW;IACpB;AAEA;;;;;;;;;AASG;IACH,oBAAoB,CAClB,UAAiB,EACjB,QAAe,EACf,WAAkB,EAClB,eAAiC,EACjC,sBAA6B,EAC7B,uBAA8B,EAAA;AAE9B,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU;;AAGnC,QAAA,IAAI,sBAAsB,CAAC,MAAM,KAAK,CAAC,IAAI,uBAAuB,CAAC,MAAM,KAAK,CAAC,EAAE;YAC/E,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACnE,YAAA,OAAO,SAAS;QAClB;AAEA,QAAA,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;AACzE,QAAA,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;;AAG3E,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,sBAAsB,CACrD,UAAU,EACV,QAAQ,EACR,WAAW,EACX,sBAAsB,EACtB,uBAAuB,CACxB;;AAGD,QAAA,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAG;AACzB,YAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE;YAC5C,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,QAAQ;;AAGlE,YAAA,MAAM,cAAc,GAAG,kBAAkB,CAAC,IAAI,KAAK,CAAC,IAAI,kBAAkB,CAAC,GAAG,CAAC,gBAAgB,CAAC;AAChG,YAAA,MAAM,eAAe,GAAG,mBAAmB,CAAC,IAAI,KAAK,CAAC,IAAI,mBAAmB,CAAC,GAAG,CAAC,eAAe,CAAC;;YAGlG,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,IAAI,OAAO,CAAC,IAAI;;AAGrD,YAAA,IAAI,cAAc,IAAI,eAAe,IAAI,SAAS,EAAE;AAClD,gBAAA,SAAS,CAAC,OAAO,CAAC,CAAC,IAAS,KAAI;oBAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI;oBACjD,IAAI,QAAQ,EAAE;AACZ,wBAAA,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;oBACzB;AACF,gBAAA,CAAC,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,kBAAkB,CAAC,IAAI,GAAG,CAAC,EAAE;AAC/B,YAAA,WAAW,CAAC,OAAO,CAAC,UAAU,IAAG;gBAC/B,MAAM,mBAAmB,GAAG,UAAU,CAAC,SAAS,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE;AAC1E,gBAAA,IAAI,kBAAkB,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE;AAC/C,oBAAA,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC;gBACpC;AACF,YAAA,CAAC,CAAC;QACJ;;AAGA,QAAA,UAAU,CAAC,OAAO,CAAC,QAAQ,IAAG;YAC5B,IAAI,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;;AAExC,gBAAA,IAAI,QAAQ,CAAC,kBAAkB,EAAE;oBAC/B,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,QAAgB,KAAI;AACvD,wBAAA,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;AACzB,oBAAA,CAAC,CAAC;gBACJ;;AAEA,gBAAA,IAAI,QAAQ,CAAC,qBAAqB,EAAE;oBAClC,QAAQ,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,UAAe,KAAI;wBACzD,MAAM,QAAQ,GAAG,UAAU,CAAC,EAAE,IAAI,UAAU,CAAC,QAAQ;wBACrD,IAAI,QAAQ,EAAE;AACZ,4BAAA,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;wBACzB;AACF,oBAAA,CAAC,CAAC;gBACJ;YACF;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,SAAS;IAClB;+GA7KW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAFnB,MAAM,EAAA,CAAA,CAAA;;4FAEP,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACID;;;AAGG;MAIU,gBAAgB,CAAA;AA2B3B,IAAA,WAAA,CACU,kBAAsC,EACtC,cAA8B,EAC9B,UAAqB,EAAA;QAFrB,IAAA,CAAA,kBAAkB,GAAlB,kBAAkB;QAClB,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,UAAU,GAAV,UAAU;;QA5BpB,IAAA,CAAA,eAAe,GAAU,EAAE;QAC3B,IAAA,CAAA,aAAa,GAAU,EAAE;;AAGzB,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,GAAG,EAAe;AAC3C,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,GAAG,EAAe;;QAGzC,IAAA,CAAA,sBAAsB,GAAQ,IAAI;;QAGlC,IAAA,CAAA,cAAc,GAAQ,IAAI;;AAG1B,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,GAAG,EAAU;;AAGpC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAuE;AACvG,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,YAAY,EAA4C;AACjF,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,YAAY,EAAyD;;QAGtF,IAAA,CAAA,kBAAkB,GAAwB,IAAI;QAC9C,IAAA,CAAA,SAAS,GAA6B,IAAI;IAM/C;AAEH;;;;;;AAMG;AACH,IAAA,gBAAgB,CAAC,IAAY,EAAE,UAAmB,EAAE,QAAgB,IAAI,EAAA;;;AAGtE,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AACnD,QAAA,IAAI,OAAe;QAEnB,IAAI,UAAU,EAAE;YACd,OAAO,GAAG,IAAI,KAAK;kBACf,CAAA,EAAG,OAAO,CAAA,yCAAA;AACZ,kBAAE,CAAA,EAAG,OAAO,CAAA,uCAAA,CAAyC;QACzD;aAAO;YACL,OAAO,GAAG,IAAI,KAAK;kBACf,CAAA,EAAG,OAAO,CAAA,gCAAA;AACZ,kBAAE,CAAA,EAAG,OAAO,CAAA,8BAAA,CAAgC;QAChD;;QAGA,MAAM,QAAQ,GAAqB,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC;QAC3D,MAAM,UAAU,GAAqB,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC;QAC7D,MAAM,WAAW,GAAqB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC;AACtD,QAAA,MAAM,aAAa,GAAqB,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC;QACjE,MAAM,UAAU,GAAqB,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC;QAE7D,OAAO,CAAC,CAAC,IAAI,CAAC;YACZ,OAAO;AACP,YAAA,aAAa,EAAE,OAAO;YACtB,SAAS,EAAE,CAAA,EAAG,OAAO,CAAA,2DAAA,CAA6D;YAClF,QAAQ;YACR,UAAU;YACV,WAAW;YACX,aAAa;YACb;AACD,SAAA,CAAC;IACJ;AAEA;;;;;;;;;AASG;IACH,UAAU,CACR,IAAW,EACX,IAAY,EACZ,YAAiB,EACjB,GAAQ,EACR,eAAiC,EACjC,iBAAmC,EAAA;;AAGnC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC;QAErD,MAAM,OAAO,GAAG,EAAE;AAElB,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;;AAEvB,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;YAEpF,IAAI,CAAC,WAAW,EAAE;;gBAEhB;YACF;AAEA,YAAA,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,WAAW;;AAGhC,YAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACtB,gBAAA,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;YAC7D;AAAO,iBAAA,IAAI,IAAI,KAAK,UAAU,EAAE;AAC9B,gBAAA,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;YAC/D;YAEA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;gBAClC,IAAI;gBACJ,SAAS,EAAE,KAAK;AACjB,aAAA,CAAC;;AAGD,YAAA,MAAc,CAAC,SAAS,GAAG,IAAI;AAC/B,YAAA,MAAc,CAAC,SAAS,GAAG,IAAI;;AAGhC,YAAA,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,IAAI,CAAC;;YAGnD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAM,KAAI;;AAE5B,gBAAA,CAAC,CAAC,aAAa,CAAC,eAAe,EAAE;;AAGjC,gBAAA,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,EAAE;AAExC,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACtB,oBAAA,IAAI,EAAE,IAAI;AACV,oBAAA,IAAI,EAAE,IAAI;AACV,oBAAA,QAAQ,EAAE,EAAE,GAAG,EAAE,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,GAAG;AAC3D,iBAAA,CAAC;AACJ,YAAA,CAAC,CAAC;;YAGF,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,KAAU,KAAI;AACtC,gBAAA,KAAK,CAAC,aAAa,CAAC,cAAc,EAAE;AACpC,gBAAA,KAAK,CAAC,aAAa,CAAC,eAAe,EAAE;AACrC,gBAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,iBAAiB,CAAC;AACzF,gBAAA,OAAO,KAAK;AACd,YAAA,CAAC,CAAC;;YAGF,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,KAAU,KAAI;gBAClC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE;AAC1C,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;oBAC3B,IAAI;oBACJ,GAAG,EAAE,SAAS,CAAC,GAAG;oBAClB,GAAG,EAAE,SAAS,CAAC,GAAG;oBAClB;AACD,iBAAA,CAAC;;gBAGF,UAAU,CAAC,MAAK;AACd,oBAAA,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,EAAE;oBACzC,IAAI,aAAa,IAAI,IAAI,CAAC,sBAAsB,KAAK,MAAM,EAAE;AAC3D,wBAAA,MAAM,QAAQ,GAAG,IAAI,KAAK,UAAU,GAAG,kCAAkC,GAAG,gCAAgC;AAC5G,wBAAA,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;oBACvC;gBACF,CAAC,EAAE,GAAG,CAAC;;AAGP,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACtB,oBAAA,IAAI,EAAE,IAAI;AACV,oBAAA,IAAI,EAAE,IAAI;AACV,oBAAA,QAAQ,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG;AACnD,iBAAA,CAAC;AACJ,YAAA,CAAC,CAAC;;AAGF,YAAA,IAAI,IAAI,KAAK,UAAU,EAAE;gBACvB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;YAC9C;AAAO,iBAAA,IAAI,IAAI,KAAK,SAAS,EAAE;gBAC7B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;YAC5C;;YAGA,IAAI,YAAY,EAAE;AAChB,gBAAA,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC/B;iBAAO;AACL,gBAAA,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;YACnB;AAEA,YAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;QACtB;;AAGA,QAAA,IAAI,IAAI,KAAK,UAAU,EAAE;AACvB,YAAA,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,OAAO,CAAC;QAC9D;aAAO;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,OAAO,CAAC;QAC1D;AAEA,QAAA,OAAO,OAAO;IAChB;AAEA;;;;;;;AAOG;AACH,IAAA,kBAAkB,CAAC,MAAc,EAAE,QAAgB,EAAE,oBAAyB,EAAE,kBAAuB,EAAA;;AAErG,QAAA,IAAI,QAAQ,KAAK,UAAU,IAAI,oBAAoB,EAAE;AACnD,YAAA,MAAM,OAAO,GAAG,oBAAoB,CAAC,SAAS,EAAE;AAChD,YAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;gBAC5B,IAAK,MAAc,CAAC,SAAS,EAAE,EAAE,KAAK,MAAM,EAAE;AAC5C,oBAAA,OAAO,MAAM;gBACf;YACF;QACF;;AAGA,QAAA,IAAI,QAAQ,KAAK,SAAS,IAAI,kBAAkB,EAAE;AAChD,YAAA,MAAM,OAAO,GAAG,kBAAkB,CAAC,SAAS,EAAE;AAC9C,YAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;gBAC5B,IAAK,MAAc,CAAC,SAAS,EAAE,EAAE,KAAK,MAAM,EAAE;AAC5C,oBAAA,OAAO,MAAM;gBACf;YACF;QACF;AAEA,QAAA,OAAO,IAAI;IACb;AAEA;;;;AAIG;IACH,gBAAgB,CAAC,MAAW,EAAE,UAAmB,EAAA;AAC/C,QAAA,IAAI,CAAC,MAAM;YAAE;AAEb,QAAA,MAAM,QAAQ,GAAI,MAAc,CAAC,SAAS;AAC1C,QAAA,MAAM,MAAM,GAAI,MAAc,CAAC,SAAS,EAAE,EAAE;;;AAI5C,QAAA,MAAM,eAAe,GAAG,MAAM,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC;AACnE,QAAA,MAAM,KAAK,GAAG,CAAC,UAAU,IAAI,eAAe,IAAI,GAAG,GAAG,IAAI;AAC1D,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC;AAElE,QAAA,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;IACzB;AAEA;;;;;;AAMG;IACH,kBAAkB,CAAC,cAAmB,EAAE,OAAA,GAAkB,GAAG,EAAE,oBAAyB,EAAE,kBAAuB,EAAA;;QAE/G,IAAI,oBAAoB,EAAE;AACxB,YAAA,MAAM,eAAe,GAAG,oBAAoB,CAAC,SAAS,EAAE;AACxD,YAAA,eAAe,CAAC,OAAO,CAAC,CAAC,MAAW,KAAI;AACtC,gBAAA,IAAI,MAAM,KAAK,cAAc,EAAE;AAC7B,oBAAA,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE;oBACnC,IAAI,OAAO,EAAE;wBACX,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE;oBAC5C;gBACF;AACF,YAAA,CAAC,CAAC;QACJ;;QAGA,IAAI,kBAAkB,EAAE;AACtB,YAAA,MAAM,aAAa,GAAG,kBAAkB,CAAC,SAAS,EAAE;AACpD,YAAA,aAAa,CAAC,OAAO,CAAC,CAAC,MAAW,KAAI;AACpC,gBAAA,IAAI,MAAM,KAAK,cAAc,EAAE;AAC7B,oBAAA,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE;oBACnC,IAAI,OAAO,EAAE;wBACX,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE;oBAC5C;gBACF;AACF,YAAA,CAAC,CAAC;QACJ;IACF;AAEA;;;;AAIG;IACH,kBAAkB,CAAC,oBAAyB,EAAE,kBAAuB,EAAA;;QAEnE,IAAI,oBAAoB,EAAE;AACxB,YAAA,MAAM,eAAe,GAAG,oBAAoB,CAAC,SAAS,EAAE;AACxD,YAAA,eAAe,CAAC,OAAO,CAAC,CAAC,MAAW,KAAI;AACtC,gBAAA,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE;gBACnC,IAAI,OAAO,EAAE;AACX,oBAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG;gBAC7B;AACF,YAAA,CAAC,CAAC;QACJ;;QAGA,IAAI,kBAAkB,EAAE;AACtB,YAAA,MAAM,aAAa,GAAG,kBAAkB,CAAC,SAAS,EAAE;AACpD,YAAA,aAAa,CAAC,OAAO,CAAC,CAAC,MAAW,KAAI;AACpC,gBAAA,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE;gBACnC,IAAI,OAAO,EAAE;AACX,oBAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG;gBAC7B;AACF,YAAA,CAAC,CAAC;QACJ;IACF;AAEA;;;;;AAKG;AACH,IAAA,mBAAmB,CAAC,OAAgB,EAAE,oBAAyB,EAAE,kBAAuB,EAAA;AACtF,QAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,IAAG;;YAEvC,IAAI,oBAAoB,EAAE;AACxB,gBAAA,MAAM,eAAe,GAAG,oBAAoB,CAAC,SAAS,EAAE;AACxD,gBAAA,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE;oBACpC,IAAK,MAAc,CAAC,SAAS,EAAE,EAAE,KAAK,QAAQ,EAAE;AAC9C,wBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC;wBACpC;oBACF;gBACF;YACF;;YAGA,IAAI,kBAAkB,EAAE;AACtB,gBAAA,MAAM,aAAa,GAAG,kBAAkB,CAAC,SAAS,EAAE;AACpD,gBAAA,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE;oBAClC,IAAK,MAAc,CAAC,SAAS,EAAE,EAAE,KAAK,QAAQ,EAAE;AAC9C,wBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC;wBACpC;oBACF;gBACF;YACF;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;;;AAIG;IACH,mBAAmB,CAAC,oBAAyB,EAAE,kBAAuB,EAAA;AACpE,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC;AACjD,YAAA,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,EAAE,kBAAkB,CAAC;AACjE,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAC5B;IACF;AAEA;;;;;AAKG;AACH,IAAA,iBAAiB,CAAC,MAAW,EAAE,oBAAyB,EAAE,kBAAuB,EAAA;AAC/E,QAAA,IAAI,CAAC,cAAc,GAAG,MAAM;AAC5B,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC;QACnC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,GAAG,EAAE,oBAAoB,EAAE,kBAAkB,CAAC;IAChF;AAEA;;;;;;;;;AASG;AACH,IAAA,YAAY,CACV,MAAW,EACX,IAAY,EACZ,oBAAyB,EACzB,kBAAuB,EACvB,eAAiC,EACjC,iBAAmC,EACnC,MAAc,EAAA;;AAGd,QAAA,IAAI,IAAI,KAAK,UAAU,EAAE;AACvB,YAAA,oBAAoB,CAAC,WAAW,CAAC,MAAM,CAAC;AACxC,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,KAAK,MAAM,CAAC;AAC5E,YAAA,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC;QAClC;AAAO,aAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AAC7B,YAAA,kBAAkB,CAAC,WAAW,CAAC,MAAM,CAAC;AACtC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,KAAK,MAAM,CAAC;AACxE,YAAA,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC;QAChC;;AAGA,QAAA,IAAI,IAAI,CAAC,sBAAsB,KAAK,MAAM,EAAE;AAC1C,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;QACpC;IACF;AAEA;;;;;;;;AAQG;IACK,qBAAqB,CAC3B,KAAU,EACV,MAAW,EACX,IAAS,EACT,IAAY,EACZ,eAAiC,EACjC,iBAAmC,EAAA;;AAGnC,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAC3B,IAAI,CAAC,kBAAkB,EAAE;AACzB,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;QAChC;QAEA,MAAM,YAAY,GAAG,QAAQ,CAAC,cAAc,CAAC,qBAAqB,CAAC;QACnE,IAAI,YAAY,EAAE;YAChB,YAAY,CAAC,MAAM,EAAE;QACvB;;QAGA,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,QAAA,IAAI,CAAC,EAAE,GAAG,qBAAqB;AAC/B,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO;AAC7B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAA,EAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAA,EAAA,CAAI;AACpD,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAA,EAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAA,EAAA,CAAI;AACnD,QAAA,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,OAAO;AACpC,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,gBAAgB;AACpC,QAAA,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK;AAC/B,QAAA,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,4BAA4B;AACnD,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO;AAC7B,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,WAAW;;QAGhC,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC9C,QAAA,QAAQ,CAAC,WAAW,GAAG,kBAAkB;AACzC,QAAA,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,aAAa;AACtC,QAAA,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS;AACjC,QAAA,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM;AAC7B,QAAA,QAAQ,CAAC,KAAK,CAAC,UAAU,GAAG,4BAA4B;;AAGxD,QAAA,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,MAAK;AAC3C,YAAA,QAAQ,CAAC,KAAK,CAAC,eAAe,GAAG,SAAS;AAC5C,QAAA,CAAC,CAAC;AACF,QAAA,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,MAAK;AAC3C,YAAA,QAAQ,CAAC,KAAK,CAAC,eAAe,GAAG,aAAa;AAChD,QAAA,CAAC,CAAC;;QAGF,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,KAAI;YACvC,CAAC,CAAC,eAAe,EAAE;;YAGnB,IAAI,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,sBAAsB,KAAK,MAAM,EAAE;AACzE,gBAAA,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,OAAO,EAAE;;gBAE9C,MAAM,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC,UAAU,EAAE;gBAC5D,IAAI,WAAW,EAAE;AACf,oBAAA,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,kCAAkC,CAAC;AAChE,oBAAA,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,gCAAgC,CAAC;gBAChE;YACF;;AAGA,YAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,sBAAsB,GAAG,MAAM;;AAGpC,YAAA,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,EAAE;YACzC,IAAI,aAAa,EAAE;AACjB,gBAAA,MAAM,QAAQ,GAAG,IAAI,KAAK,UAAU,GAAG,kCAAkC,GAAG,gCAAgC;AAC5G,gBAAA,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;YACvC;;AAGA,YAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;gBAC3B,IAAI,CAAC,kBAAkB,EAAE;AACzB,gBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;YAChC;YACA,IAAI,CAAC,MAAM,EAAE;AACf,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;;QAG1B,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACpD,QAAA,cAAc,CAAC,WAAW,GAAG,oBAAoB;AACjD,QAAA,cAAc,CAAC,KAAK,CAAC,OAAO,GAAG,aAAa;AAC5C,QAAA,cAAc,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS;AACvC,QAAA,cAAc,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS;AACtC,QAAA,cAAc,CAAC,KAAK,CAAC,UAAU,GAAG,4BAA4B;AAC9D,QAAA,cAAc,CAAC,KAAK,CAAC,SAAS,GAAG,mBAAmB;;AAGpD,QAAA,cAAc,CAAC,gBAAgB,CAAC,YAAY,EAAE,MAAK;AACjD,YAAA,cAAc,CAAC,KAAK,CAAC,eAAe,GAAG,SAAS;AAClD,QAAA,CAAC,CAAC;AACF,QAAA,cAAc,CAAC,gBAAgB,CAAC,YAAY,EAAE,MAAK;AACjD,YAAA,cAAc,CAAC,KAAK,CAAC,eAAe,GAAG,aAAa;AACtD,QAAA,CAAC,CAAC;;QAGF,cAAc,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,KAAI;YAC7C,CAAC,CAAC,eAAe,EAAE;;AAGnB,YAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;gBAC3B,IAAI,CAAC,kBAAkB,EAAE;AACzB,gBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;YAChC;YACA,IAAI,CAAC,MAAM,EAAE;;AAGb,YAAA,MAAM,WAAW,GAAG;AAClB,gBAAA,QAAQ,EAAE,mBAAmB;AAC7B,gBAAA,KAAK,EAAE,oBAAoB;AAC3B,gBAAA,OAAO,EAAE,CAAA,iEAAA,EAAoE,IAAI,CAAC,IAAI,CAAA,qHAAA,CAAuH;AAC7M,gBAAA,YAAY,EAAE,aAAa;AAC3B,gBAAA,WAAW,EAAE,QAAQ;AACrB,gBAAA,cAAc,EAAE,IAAI;AACpB,gBAAA,QAAQ,EAAE,+BAA+B;aAC1C;YAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACtD,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,SAAS,EAAE,KAAK;AACjB,aAAA,CAAC;AAEF,YAAA,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC;AACrC,gBAAA,IAAI,EAAE,CAAC,MAAW,KAAI;AACpB,oBAAA,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE;wBACtB;oBACF;;AAGA,oBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;gBACtD;AACD,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;;AAGhC,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;;AAG/B,QAAA,MAAM,kBAAkB,GAAG,CAAC,CAAa,KAAI;YAC3C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAc,CAAC,EAAE;gBACpC,IAAI,CAAC,MAAM,EAAE;AACb,gBAAA,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,kBAAkB,CAAC;AACzD,gBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;YAChC;AACF,QAAA,CAAC;;QAGD,UAAU,CAAC,MAAK;AACd,YAAA,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,CAAC;QACxD,CAAC,EAAE,EAAE,CAAC;AAEN,QAAA,IAAI,CAAC,kBAAkB,GAAG,MAAK;YAC7B,IAAI,CAAC,MAAM,EAAE;AACb,YAAA,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,kBAAkB,CAAC;AAC3D,QAAA,CAAC;IACH;AAEA;;AAEG;IACH,6BAA6B,GAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAC/B,YAAA,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,OAAO,EAAE;;YAG9C,MAAM,aAAa,GAAG,IAAI,CAAC,sBAAsB,CAAC,UAAU,EAAE;YAC9D,IAAI,aAAa,EAAE;AACjB,gBAAA,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,kCAAkC,CAAC;AAClE,gBAAA,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,gCAAgC,CAAC;YAClE;AAEA,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;QACpC;IACF;AAEA;;AAEG;IACH,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;AACzB,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACvB,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE;AAC/B,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;AAC7B,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;AAClC,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;IAC/B;+GA1mBW,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA4I,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA1J,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAM,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA,CAAA;;4FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACTD;;;AAGG;MAIU,mBAAmB,CAAA;IAS9B,WAAA,CACU,yBAAoD,EACpD,yBAAoD,EAAA;QADpD,IAAA,CAAA,yBAAyB,GAAzB,yBAAyB;QACzB,IAAA,CAAA,yBAAyB,GAAzB,yBAAyB;;QATnC,IAAA,CAAA,YAAY,GAAU,EAAE;QACxB,IAAA,CAAA,kBAAkB,GAAU,EAAE;;AAG9B,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAO;AACrC,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,YAAY,EAAO;IAK5C;AAEH;;;;;;;AAOG;IACH,SAAS,CACP,GAAQ,EACR,KAAY,EACZ,eAAiC,EACjC,WAAkB,EAClB,YAAqB,EAAA;;AAGrB,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,IAAG;AAC/B,YAAA,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;AACvB,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;;AAGtB,QAAA,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU;AAC1C,QAAA,WAAW,CAAC,OAAO,CAAC,MAAM,IAAG;AAC3B,YAAA,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;AACjC,QAAA,CAAC,CAAC;QAEF,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;;AAE5B,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY;AACtC,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU;AAElC,YAAA,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU,EAAE;gBAChC;YACF;;YAGA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE;gBAClF;YACF;YAEA,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;AAE/C,YAAA,IAAI,IAAI,IAAI,IAAI,EAAE;;AAEhB,gBAAA,IAAI,SAAS,GAAG,SAAS,CAAC;gBAC1B,IAAI,WAAW,GAAG,GAAG;AAErB,gBAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,oBAAA,SAAS,GAAG,SAAS,CAAC;oBACtB,WAAW,GAAG,GAAG;gBACnB;AAAO,qBAAA,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE;;;AAGrC,oBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,EAAE,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;AAC1E,oBAAA,MAAM,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;;;;;AAMtC,oBAAA,MAAM,YAAY,GAAG,EAAE,CAAC;AACxB,oBAAA,MAAM,kBAAkB,GAAG,GAAG,CAAC;;AAG/B,oBAAA,IAAI,SAAS,GAAG,YAAY,EAAE;AAC5B,wBAAA,SAAS,GAAG,SAAS,CAAC;wBACtB,WAAW,GAAG,GAAG;oBACnB;AAAO,yBAAA,IAAI,SAAS,GAAG,kBAAkB,EAAE;AACzC,wBAAA,SAAS,GAAG,SAAS,CAAC;wBACtB,WAAW,GAAG,IAAI;oBACpB;yBAAO;AACL,wBAAA,SAAS,GAAG,SAAS,CAAC;wBACtB,WAAW,GAAG,GAAG;oBACnB;gBACF;gBAEA,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CACrB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAC5C;AACE,oBAAA,KAAK,EAAE,SAAS;AAChB,oBAAA,MAAM,EAAE,CAAC;AACT,oBAAA,OAAO,EAAE,WAAW;AACpB,oBAAA,YAAY,EAAE;AACf,iBAAA,CACF;;AAGD,gBAAA,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAK;AACpB,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACpB,wBAAA,IAAI,EAAE,IAAI;AACV,wBAAA,YAAY,EAAE,YAAY;AAC1B,wBAAA,UAAU,EAAE,UAAU;wBACtB,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AACtC,qBAAA,CAAC;AACJ,gBAAA,CAAC,CAAC;AAEF,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AACf,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9B;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,YAAY,CAAC;IAC/C;AAEA;;;;;;;AAOG;IACH,iBAAiB,CACf,GAAQ,EACR,KAAY,EACZ,iBAA8B,EAC9B,eAAiC,EACjC,YAAqB,EAAA;AAErB,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACrB,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY;AACtC,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU;AAElC,YAAA,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU,EAAE;gBAChC;YACF;;YAGA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE;gBACpF;YACF;YAEA,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;AAE/C,YAAA,IAAI,IAAI,IAAI,IAAI,EAAE;;AAEhB,gBAAA,IAAI,SAAS,GAAG,SAAS,CAAC;gBAC1B,IAAI,WAAW,GAAG,GAAG;AAErB,gBAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,oBAAA,SAAS,GAAG,SAAS,CAAC;oBACtB,WAAW,GAAG,GAAG;gBACnB;AAAO,qBAAA,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE;;;AAGrC,oBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,EAAE,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;AAC1E,oBAAA,MAAM,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;;;;;AAMtC,oBAAA,MAAM,YAAY,GAAG,EAAE,CAAC;AACxB,oBAAA,MAAM,kBAAkB,GAAG,GAAG,CAAC;;AAG/B,oBAAA,IAAI,SAAS,GAAG,YAAY,EAAE;AAC5B,wBAAA,SAAS,GAAG,SAAS,CAAC;wBACtB,WAAW,GAAG,GAAG;oBACnB;AAAO,yBAAA,IAAI,SAAS,GAAG,kBAAkB,EAAE;AACzC,wBAAA,SAAS,GAAG,SAAS,CAAC;wBACtB,WAAW,GAAG,IAAI;oBACpB;yBAAO;AACL,wBAAA,SAAS,GAAG,SAAS,CAAC;wBACtB,WAAW,GAAG,GAAG;oBACnB;gBACF;gBAEA,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CACrB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAC5C;AACE,oBAAA,KAAK,EAAE,SAAS;AAChB,oBAAA,MAAM,EAAE,CAAC;AACT,oBAAA,OAAO,EAAE,WAAW;AACpB,oBAAA,YAAY,EAAE;AACf,iBAAA,CACF;;AAGD,gBAAA,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAK;AACpB,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACpB,wBAAA,IAAI,EAAE,IAAI;AACV,wBAAA,YAAY,EAAE,YAAY;AAC1B,wBAAA,UAAU,EAAE,UAAU;wBACtB,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AACtC,qBAAA,CAAC;AACJ,gBAAA,CAAC,CAAC;gBAEF,IAAI,YAAY,EAAE;AAChB,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;gBACjB;AAEA,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9B;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;;;;;;;;;;;;;;;;AAiBG;IACH,kBAAkB,CAChB,GAAQ,EACR,QAAe,EACf,UAAiB,EACjB,iBAAmC,EACnC,eAAiC,EACjC,WAAkB,EAClB,WAAkB,EAClB,QAAe,EACf,yBAAgC,EAChC,8BAAqC,EACrC,sBAA2B,EAC3B,qBAA8B,EAC9B,wBAAiC,EACjC,2BAAuD,EAAA;;AAGvD,QAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,IAAG;AACrC,YAAA,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;AACvB,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;;QAG5B,2BAA2B,CAAC,KAAK,CAAC;;AAGlC,QAAA,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU;;AAG7C,QAAA,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU;AAC1C,QAAA,WAAW,CAAC,OAAO,CAAC,MAAM,IAAG;AAC3B,YAAA,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;AACjC,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU;AAC3C,QAAA,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAG;AACzB,YAAA,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AACnC,QAAA,CAAC,CAAC;AAEF,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;;AAE3B,YAAA,MAAM,iBAAiB,GAAG,yBAAyB,CAAC,MAAM,GAAG,CAAC,IAAI,8BAA8B,CAAC,MAAM,GAAG,CAAC;AAC3G,YAAA,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,uBAAuB,CAAC,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,EAAE;gBAC1G;YACF;;AAGA,YAAA,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,CAAC,EAAE;gBAClF;YACF;;AAGA,YAAA,MAAM,OAAO,GAAG,WAAW,CAAC;AAC5B,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,yBAAyB,CAAC,oBAAoB,CACzE,OAAO,EACP,eAAe,EACf,iBAAiB,EACjB,OAAO,EACP,UAAU,CACX;YAED,IAAI,CAAC,eAAe,EAAE;gBACpB;YACF;;YAGA,IAAI,eAAe,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC9C;YACF;AAEA,YAAA,MAAM,eAAe,GAAG,eAAe,CAAC,eAAe;AACvD,YAAA,MAAM,WAAW,GAAG,eAAe,CAAC,WAAW;AAC/C,YAAA,MAAM,SAAS,GAAG,eAAe,CAAC,SAAS;AAC3C,YAAA,MAAM,WAAW,GAAG,eAAe,CAAC,WAAW;AAC/C,YAAA,MAAM,wBAAwB,GAAG,eAAe,CAAC,wBAAwB;;AAGzE,YAAA,SAAS,CAAC,OAAO,CAAC,EAAE,IAAI,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;;AAGpD,YAAA,IAAI,eAAe,CAAC,MAAM,IAAI,CAAC,EAAE;AAC/B,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACnD,oBAAA,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC;oBAChC,MAAM,GAAG,GAAG,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC;;AAGlC,oBAAA,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS;;oBAGlI,MAAM,eAAe,GAAG,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;;oBAG5D,MAAM,qBAAqB,GAAG,sBAAsB;AACtB,wBAAA,sBAAsB,CAAC,SAAS,KAAK,OAAO,CAAC,EAAE;AAC/C,wBAAA,sBAAsB,CAAC,YAAY,KAAK,eAAe;;oBAGrF,MAAM,4BAA4B,GAAG,sBAAsB;AACtB,wBAAA,sBAAsB,CAAC,SAAS,KAAK,OAAO,CAAC,EAAE;AACpF,oBAAA,MAAM,qCAAqC,GAAG,4BAA4B,IAAI,CAAC,qBAAqB;;AAGpG,oBAAA,IAAI,SAAiB;AACrB,oBAAA,IAAI,UAAkB;AACtB,oBAAA,IAAI,WAAmB;AACvB,oBAAA,IAAI,aAAqB;oBAEzB,IAAI,qBAAqB,EAAE;;wBAEzB,SAAS,GAAG,kBAAkB;wBAC9B,UAAU,GAAG,CAAC;wBACd,WAAW,GAAG,GAAG;wBACjB,aAAa,GAAG,OAAO;oBACzB;yBAAO,IAAI,qCAAqC,EAAE;;wBAEhD,SAAS,GAAG,SAAS;wBACrB,UAAU,GAAG,GAAG;wBAChB,WAAW,GAAG,IAAI;wBAClB,aAAa,GAAG,OAAO;oBACzB;yBAAO;;wBAEL,SAAS,GAAG,kBAAkB;wBAC9B,UAAU,GAAG,CAAC;wBACd,WAAW,GAAG,GAAG;wBACjB,aAAa,GAAG,OAAO;oBACzB;;oBAGA,MAAM,UAAU,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;AAC1C,wBAAA,KAAK,EAAE,aAAa;AACpB,wBAAA,MAAM,EAAE,EAAE;AACV,wBAAA,OAAO,EAAE,CAAC;AACV,wBAAA,YAAY,EAAE,CAAC;AACf,wBAAA,IAAI,EAAE,aAAa;AACnB,wBAAA,WAAW,EAAE,IAAI;AACjB,wBAAA,SAAS,EAAE;AACZ,qBAAA,CAAC;AAEF,oBAAA,MAAM,WAAW,GAAQ;AACvB,wBAAA,KAAK,EAAE,SAAS;AAChB,wBAAA,MAAM,EAAE,UAAU;AAClB,wBAAA,OAAO,EAAE,WAAW;AACpB,wBAAA,YAAY,EAAE,CAAC;wBACf,IAAI,EAAE,aAAa;AACnB,wBAAA,SAAS,EAAE,aAAa;wBACxB,SAAS,EAAE,qBAAqB,GAAG,2CAA2C,GAAG,qBAAqB;wBACtG,WAAW,EAAE,KAAK;qBACnB;AAED,oBAAA,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,WAAW,CAAC;;AAGlD,oBAAA,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAK;;wBAE1B,MAAM,eAAe,GAAG,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;wBAC5D,MAAM,GAAG,GAAG,eAAe,CAAC,WAAW,CAAC,eAAe,CAAC;AAExD,wBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;AAC9B,4BAAA,OAAO,EAAE,OAAO;AAChB,4BAAA,OAAO,EAAE;gCACP,KAAK,EAAE,eAAe;AACtB,gCAAA,KAAK,EAAE,eAAe,CAAC,WAAW,CAAC,MAAM;gCACzC,IAAI,EAAE,GAAG,EAAE,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC;gCACjC,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC;gCACjC,MAAM,EAAE,GAAG,EAAE,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC;gCACnC,IAAI,EAAE,GAAG,EAAE,IAAI,IAAI,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC;gCACnC,QAAQ,EAAE,GAAG,EAAE,QAAQ,IAAI,WAAW,CAAC,CAAC,CAAC;gCACzC,MAAM,EAAE,GAAG,EAAE,MAAM,IAAI,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC;AACzC,gCAAA,SAAS,EAAE,GAAG,EAAE,SAAS,IAAI,IAAI;AACjC,gCAAA,eAAe,EAAE,GAAG,EAAE,eAAe,IAAI,IAAI;AAC7C,gCAAA,aAAa,EAAE,GAAG,EAAE,aAAa,IAAI;AACtC,6BAAA;4BACD,SAAS,EAAE,eAAe,CAAC,SAAS;AACpC,4BAAA,eAAe,EAAE,eAAe;AAChC,4BAAA,WAAW,EAAE,WAAW;AACxB,4BAAA,SAAS,EAAE,SAAS;AACpB,4BAAA,WAAW,EAAE,WAAW;4BACxB,WAAW,EAAE,eAAe,CAAC,WAAW;4BACxC,cAAc,EAAE,eAAe,CAAC,cAAc;AAC9C,4BAAA,wBAAwB,EAAE;AAC3B,yBAAA,CAAC;AACJ,oBAAA,CAAC,CAAC;;AAGF,oBAAA,IAAI,qBAAqB,IAAI,wBAAwB,EAAE;AACrD,wBAAA,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACtB,wBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAClB;;AAGA,oBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,oBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;gBACpC;YACF;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,mBAAmB;IAC5B;AAEA;;;;AAIG;IACH,qBAAqB,CAAC,GAAQ,EAAE,YAAqB,EAAA;AACnD,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,IAAG;YAC/B,IAAI,YAAY,EAAE;AAChB,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YACjB;iBAAO;AACL,gBAAA,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;YACvB;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;;;AAIG;IACH,8BAA8B,CAAC,GAAQ,EAAE,qBAA8B,EAAA;AACrE,QAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,IAAG;YACrC,IAAI,qBAAqB,EAAE;AACzB,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YACjB;iBAAO;AACL,gBAAA,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;YACvB;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;;AAGG;AACH,IAAA,aAAa,CAAC,GAAQ,EAAA;AACpB,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACxD,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,QAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC9D,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;IAC9B;AAEA;;;AAGG;AACH,IAAA,uBAAuB,CAAC,GAAQ,EAAA;AAC9B,QAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC9D,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;IAC9B;AAEA;;;AAGG;AACH,IAAA,iBAAiB,CAAC,GAAQ,EAAA;AACxB,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACxD,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;IACxB;+GAzeW,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAqJ,yBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,yBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA,CAAA;;4FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACRD;;;AAGG;MAIU,eAAe,CAAA;AA0E1B,IAAA,WAAA,GAAA;;AAxEQ,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC;AACxD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AACpD,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAC7D,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC;AACrD,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC;;AAGxD,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,GAAG,EAAoD;AAC9E,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,GAAG,EAAoD;;AAGhF,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,GAAG,EAAkB;;AAGxC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AACrD,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAA6F,IAAI,CAAC;AACvI,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAAM,IAAI,CAAC;AAChD,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,eAAe,CAAQ,EAAE,CAAC;QACpD,IAAA,CAAA,gBAAgB,GAAG,IAAI,eAAe,CAAS,EAAE,CAAC,CAAC;;AAGnD,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,eAAe,CAAM,IAAI,CAAC;AAClD,QAAA,IAAA,CAAA,wBAAwB,GAAG,IAAI,eAAe,CAAQ,EAAE,CAAC;AACzD,QAAA,IAAA,CAAA,wBAAwB,GAAG,IAAI,eAAe,CAAM,IAAI,CAAC;AACzD,QAAA,IAAA,CAAA,0BAA0B,GAAG,IAAI,eAAe,CAAM,IAAI,CAAC;AAC3D,QAAA,IAAA,CAAA,iCAAiC,GAAG,IAAI,eAAe,CAAQ,EAAE,CAAC;;AAGlE,QAAA,IAAA,CAAA,2BAA2B,GAAG,IAAI,eAAe,CAAQ,EAAE,CAAC;AAC5D,QAAA,IAAA,CAAA,gCAAgC,GAAG,IAAI,eAAe,CAAQ,EAAE,CAAC;AACjE,QAAA,IAAA,CAAA,4BAA4B,GAAG,IAAI,eAAe,CAAQ,EAAE,CAAC;AAC7D,QAAA,IAAA,CAAA,iCAAiC,GAAG,IAAI,eAAe,CAAQ,EAAE,CAAC;AAClE,QAAA,IAAA,CAAA,0BAA0B,GAAG,IAAI,eAAe,CAAQ,EAAE,CAAC;AAC3D,QAAA,IAAA,CAAA,0BAA0B,GAAG,IAAI,eAAe,CAAS,KAAK,CAAC;AAC/D,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;;AAGtD,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAC3D,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAC5D,QAAA,IAAA,CAAA,oCAAoC,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;;AAGlF,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE;AAC5D,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AAClD,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,CAAC,uBAAuB,CAAC,YAAY,EAAE;AACpE,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;AACtD,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE;AAE5D,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;AACpD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;AACpD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;AACpD,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE;AAC5D,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;AAEtD,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;AACxD,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,CAAC,wBAAwB,CAAC,YAAY,EAAE;AACtE,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,CAAC,wBAAwB,CAAC,YAAY,EAAE;AACtE,QAAA,IAAA,CAAA,yBAAyB,GAAG,IAAI,CAAC,0BAA0B,CAAC,YAAY,EAAE;AAC1E,QAAA,IAAA,CAAA,gCAAgC,GAAG,IAAI,CAAC,iCAAiC,CAAC,YAAY,EAAE;AAExF,QAAA,IAAA,CAAA,0BAA0B,GAAG,IAAI,CAAC,2BAA2B,CAAC,YAAY,EAAE;AAC5E,QAAA,IAAA,CAAA,+BAA+B,GAAG,IAAI,CAAC,gCAAgC,CAAC,YAAY,EAAE;AACtF,QAAA,IAAA,CAAA,2BAA2B,GAAG,IAAI,CAAC,4BAA4B,CAAC,YAAY,EAAE;AAC9E,QAAA,IAAA,CAAA,gCAAgC,GAAG,IAAI,CAAC,iCAAiC,CAAC,YAAY,EAAE;AACxF,QAAA,IAAA,CAAA,yBAAyB,GAAG,IAAI,CAAC,0BAA0B,CAAC,YAAY,EAAE;AAC1E,QAAA,IAAA,CAAA,yBAAyB,GAAG,IAAI,CAAC,0BAA0B,CAAC,YAAY,EAAE;AAC1E,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;AAEtD,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE;AAChE,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE;AAClE,QAAA,IAAA,CAAA,mCAAmC,GAAG,IAAI,CAAC,oCAAoC,CAAC,YAAY,EAAE;IAE/E;;AAGf,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK;IACvC;IAEA,IAAI,iBAAiB,CAAC,KAAc,EAAA;AAClC,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC;IACtC;IAEA,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,iBAAiB,GAAG,CAAC,IAAI,CAAC,iBAAiB;IAClD;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK;IAClC;IAEA,IAAI,YAAY,CAAC,KAAc,EAAA;AAC7B,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;IACjC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY;IACxC;AAEA,IAAA,IAAI,qBAAqB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,uBAAuB,CAAC,KAAK;IAC3C;IAEA,IAAI,qBAAqB,CAAC,KAAc,EAAA;AACtC,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC;IAC1C;IAEA,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,qBAAqB,GAAG,CAAC,IAAI,CAAC,qBAAqB;IAC1D;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK;IACpC;IAEA,IAAI,cAAc,CAAC,KAAc,EAAA;AAC/B,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;IACnC;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,cAAc;IAC5C;AAEA,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK;IACvC;IAEA,IAAI,iBAAiB,CAAC,KAAc,EAAA;AAClC,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC;IACtC;IAEA,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,iBAAiB,GAAG,CAAC,IAAI,CAAC,iBAAiB;IAClD;;AAGA,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,IAAI,CAAC,gBAAgB;IAC9B;IAEA,iBAAiB,CAAC,EAAU,EAAE,QAAkD,EAAA;QAC9E,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC;IACzC;AAEA,IAAA,oBAAoB,CAAC,EAAU,EAAA;AAC7B,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;IAClC;IAEA,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;IAC/B;AAEA,IAAA,IAAI,iBAAiB,GAAA;QACnB,OAAO,IAAI,CAAC,kBAAkB;IAChC;IAEA,mBAAmB,CAAC,EAAU,EAAE,QAAkD,EAAA;QAChF,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC;IAC3C;AAEA,IAAA,sBAAsB,CAAC,EAAU,EAAA;AAC/B,QAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;IACpC;IAEA,sBAAsB,GAAA;AACpB,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE;IACjC;;AAGA,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,YAAY;IAC1B;AAEA,IAAA,cAAc,CAAC,WAAgC,EAAA;AAC7C,QAAA,IAAI,CAAC,YAAY,GAAG,WAAW;IACjC;AAEA,IAAA,aAAa,CAAC,EAAU,EAAA;QACtB,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;IAClC;;AAGA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK;IACnC;IAEA,IAAI,aAAa,CAAC,KAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;IAClC;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK;IACnC;IAEA,IAAI,aAAa,CAAC,KAAiG,EAAA;AACjH,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;IAClC;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK;IACnC;IAEA,IAAI,aAAa,CAAC,KAAU,EAAA;AAC1B,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;IAClC;AAEA,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK;IACvC;IAEA,IAAI,iBAAiB,CAAC,KAAY,EAAA;AAChC,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC;IACtC;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK;IACpC;IAEA,IAAI,cAAc,CAAC,KAAa,EAAA;AAC9B,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;IACnC;IAEA,aAAa,CAAC,IAAyF,EAAE,IAAS,EAAA;AAChH,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;IAC3B;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;IAC3B;;AAGA,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK;IACrC;IAEA,IAAI,eAAe,CAAC,KAAU,EAAA;AAC5B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;IACpC;AAEA,IAAA,IAAI,sBAAsB,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,wBAAwB,CAAC,KAAK;IAC5C;IAEA,IAAI,sBAAsB,CAAC,KAAY,EAAA;AACrC,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3C;AAEA,IAAA,IAAI,sBAAsB,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,wBAAwB,CAAC,KAAK;IAC5C;IAEA,IAAI,sBAAsB,CAAC,KAAU,EAAA;AACnC,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3C;AAEA,IAAA,IAAI,wBAAwB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,0BAA0B,CAAC,KAAK;IAC9C;IAEA,IAAI,wBAAwB,CAAC,KAAU,EAAA;AACrC,QAAA,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7C;AAEA,IAAA,IAAI,+BAA+B,GAAA;AACjC,QAAA,OAAO,IAAI,CAAC,iCAAiC,CAAC,KAAK;IACrD;IAEA,IAAI,+BAA+B,CAAC,KAAY,EAAA;AAC9C,QAAA,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,KAAK,CAAC;IACpD;IAEA,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,sBAAsB,GAAG,EAAE;AAChC,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;IACpC;IAEA,6BAA6B,GAAA;AAC3B,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI;AACpC,QAAA,IAAI,CAAC,+BAA+B,GAAG,EAAE;IAC3C;IAEA,wBAAwB,GAAA;QACtB,OAAO,CAAC,EAAE,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,wBAAwB,CAAC;IAClE;;AAGA,IAAA,IAAI,yBAAyB,GAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,2BAA2B,CAAC,KAAK;IAC/C;IAEA,IAAI,yBAAyB,CAAC,KAAY,EAAA;AACxC,QAAA,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC;IAC9C;AAEA,IAAA,IAAI,8BAA8B,GAAA;AAChC,QAAA,OAAO,IAAI,CAAC,gCAAgC,CAAC,KAAK;IACpD;IAEA,IAAI,8BAA8B,CAAC,KAAY,EAAA;AAC7C,QAAA,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,KAAK,CAAC;IACnD;AAEA,IAAA,IAAI,0BAA0B,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,4BAA4B,CAAC,KAAK;IAChD;IAEA,IAAI,0BAA0B,CAAC,KAAY,EAAA;AACzC,QAAA,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/C;AAEA,IAAA,IAAI,+BAA+B,GAAA;AACjC,QAAA,OAAO,IAAI,CAAC,iCAAiC,CAAC,KAAK;IACrD;IAEA,IAAI,+BAA+B,CAAC,KAAY,EAAA;AAC9C,QAAA,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,KAAK,CAAC;IACpD;AAEA,IAAA,IAAI,wBAAwB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,0BAA0B,CAAC,KAAK;IAC9C;IAEA,IAAI,wBAAwB,CAAC,KAAY,EAAA;AACvC,QAAA,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7C;AAEA,IAAA,IAAI,wBAAwB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,0BAA0B,CAAC,KAAK;IAC9C;IAEA,IAAI,wBAAwB,CAAC,KAAa,EAAA;AACxC,QAAA,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7C;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK;IACpC;IAEA,IAAI,cAAc,CAAC,KAAc,EAAA;AAC/B,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;IACnC;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,yBAAyB,GAAG,EAAE;AACnC,QAAA,IAAI,CAAC,8BAA8B,GAAG,EAAE;AACxC,QAAA,IAAI,CAAC,0BAA0B,GAAG,EAAE;AACpC,QAAA,IAAI,CAAC,+BAA+B,GAAG,EAAE;AACzC,QAAA,IAAI,CAAC,wBAAwB,GAAG,EAAE;AAClC,QAAA,IAAI,CAAC,wBAAwB,GAAG,KAAK;AACrC,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;IAC7B;IAEA,gBAAgB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,yBAAyB,CAAC,MAAM,GAAG,CAAC;AACzC,YAAA,IAAI,CAAC,8BAA8B,CAAC,MAAM,GAAG,CAAC;AAC9C,YAAA,IAAI,CAAC,0BAA0B,CAAC,MAAM,GAAG,CAAC;AAC1C,YAAA,IAAI,CAAC,+BAA+B,CAAC,MAAM,GAAG,CAAC;AAC/C,YAAA,IAAI,CAAC,wBAAwB,CAAC,MAAM,GAAG,CAAC;AACxC,YAAA,IAAI,CAAC,wBAAwB,KAAK,KAAK;IAChD;;AAGA,IAAA,IAAI,mBAAmB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK;IACzC;IAEA,IAAI,mBAAmB,CAAC,KAAc,EAAA;AACpC,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC;IACxC;AAEA,IAAA,IAAI,oBAAoB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAK;IAC1C;IAEA,IAAI,oBAAoB,CAAC,KAAc,EAAA;AACrC,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC;IACzC;AAEA,IAAA,IAAI,kCAAkC,GAAA;AACpC,QAAA,OAAO,IAAI,CAAC,oCAAoC,CAAC,KAAK;IACxD;IAEA,IAAI,kCAAkC,CAAC,KAAc,EAAA;AACnD,QAAA,IAAI,CAAC,oCAAoC,CAAC,IAAI,CAAC,KAAK,CAAC;IACvD;IAEA,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;AAChC,QAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;AACjC,QAAA,IAAI,CAAC,kCAAkC,GAAG,KAAK;IACjD;;AAGA;;AAEG;IACH,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,QAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;AAClC,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;QAE7B,IAAI,CAAC,oBAAoB,EAAE;QAC3B,IAAI,CAAC,sBAAsB,EAAE;AAC7B,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;QAEzB,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;AAC3B,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE;QAExB,IAAI,CAAC,oBAAoB,EAAE;QAC3B,IAAI,CAAC,6BAA6B,EAAE;QAEpC,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,iBAAiB,EAAE;IAC1B;+GAvaW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFd,MAAM,EAAA,CAAA,CAAA;;4FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCDY,kBAAkB,CAAA;AAN/B,IAAA,WAAA,GAAA;QAOW,IAAA,CAAA,cAAc,GAAY,IAAI;QAC9B,IAAA,CAAA,iBAAiB,GAAY,IAAI;QACjC,IAAA,CAAA,YAAY,GAAY,KAAK;QAC7B,IAAA,CAAA,qBAAqB,GAAY,KAAK;QACtC,IAAA,CAAA,iBAAiB,GAAY,IAAI;QACjC,IAAA,CAAA,wBAAwB,GAAY,KAAK;AAExC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAQ;AACzC,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAAQ;AAC5C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAQ;AACvC,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,YAAY,EAAQ;AAChD,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAAQ;AACvD,IAAA;+GAbY,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,0hBCR/B,s9CAgDA,EAAA,MAAA,EAAA,CAAA,q3DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAtK,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDxCa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,cAGd,KAAK,EAAA,QAAA,EAAA,s9CAAA,EAAA,MAAA,EAAA,CAAA,q3DAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;;MEZU,0BAA0B,CAAA;AANvC,IAAA,WAAA,GAAA;QAOW,IAAA,CAAA,oBAAoB,GAAW,CAAC;QAChC,IAAA,CAAA,mBAAmB,GAAW,CAAC;QAC/B,IAAA,CAAA,iBAAiB,GAAW,CAAC;QAC7B,IAAA,CAAA,gBAAgB,GAAW,CAAC;QAC5B,IAAA,CAAA,aAAa,GAAW,CAAC;QACzB,IAAA,CAAA,0BAA0B,GAAW,CAAC;QACtC,IAAA,CAAA,mBAAmB,GAAW,CAAC;AAE9B,QAAA,IAAA,CAAA,4BAA4B,GAAG,IAAI,YAAY,EAAQ;AACvD,QAAA,IAAA,CAAA,8BAA8B,GAAG,IAAI,YAAY,EAAQ;AACzD,QAAA,IAAA,CAAA,yBAAyB,GAAG,IAAI,YAAY,EAAQ;AACpD,QAAA,IAAA,CAAA,2BAA2B,GAAG,IAAI,YAAY,EAAQ;AACtD,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,YAAY,EAAQ;AACjD,QAAA,IAAA,CAAA,qCAAqC,GAAG,IAAI,YAAY,EAAQ;AAS3E,IAAA;AAPC,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,mBAAmB;IAC7D;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,gBAAgB;IACvD;+GAtBW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,ixBCRvC,s4BAmBA,EAAA,MAAA,EAAA,CAAA,8rEAAA,CAAA,EAAA,CAAA,CAAA;;4FDXa,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBANtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,cAGvB,KAAK,EAAA,QAAA,EAAA,s4BAAA,EAAA,MAAA,EAAA,CAAA,8rEAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;MEdU,2BAA2B,CAAA;AA+CtC,IAAA,WAAA,CAAoB,GAAsB,EAAA;QAAtB,IAAA,CAAA,GAAG,GAAH,GAAG;QA9Cd,IAAA,CAAA,wBAAwB,GAAU,EAAE;QACpC,IAAA,CAAA,0BAA0B,GAAU,EAAE;QACtC,IAAA,CAAA,+BAA+B,GAAU,EAAE;QAC3C,IAAA,CAAA,yBAAyB,GAAU,EAAE;QACrC,IAAA,CAAA,8BAA8B,GAAU,EAAE;QAC1C,IAAA,CAAA,wBAAwB,GAAW,KAAK;QACxC,IAAA,CAAA,oBAAoB,GAAU,EAAE;QAChC,IAAA,CAAA,sBAAsB,GAAU,EAAE;QAClC,IAAA,CAAA,uBAAuB,GAAU,EAAE;QACnC,IAAA,CAAA,qBAAqB,GAAU,EAAE;QACjC,IAAA,CAAA,sBAAsB,GAAU,EAAE;QAClC,IAAA,CAAA,cAAc,GAAY,KAAK;QAC/B,IAAA,CAAA,wBAAwB,GAAY,KAAK;QACzC,IAAA,CAAA,0BAA0B,GAAY,KAAK;QAC3C,IAAA,CAAA,yBAAyB,GAAY,KAAK;QAC1C,IAAA,CAAA,kCAAkC,GAAY,KAAK;AAElD,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAAS;AAC/C,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,YAAY,EAAS;AACjD,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAS;AAChD,QAAA,IAAA,CAAA,6BAA6B,GAAG,IAAI,YAAY,EAAS;AACzD,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,YAAY,EAAS;AAC9C,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAS;AAChD,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAAS;AAC/C,QAAA,IAAA,CAAA,4BAA4B,GAAG,IAAI,YAAY,EAAS;AACxD,QAAA,IAAA,CAAA,2BAA2B,GAAG,IAAI,YAAY,EAAO;AACrD,QAAA,IAAA,CAAA,8BAA8B,GAAG,IAAI,YAAY,EAAO;AACxD,QAAA,IAAA,CAAA,6BAA6B,GAAG,IAAI,YAAY,EAAO;AACvD,QAAA,IAAA,CAAA,6BAA6B,GAAG,IAAI,YAAY,EAAO;AACvD,QAAA,IAAA,CAAA,4BAA4B,GAAG,IAAI,YAAY,EAAO;AACtD,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,YAAY,EAAO;AACjD,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,YAAY,EAAO;AAC/C,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAO;AAC9C,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAAS;AAC/C,QAAA,IAAA,CAAA,8BAA8B,GAAG,IAAI,YAAY,EAAS;AAC1D,QAAA,IAAA,CAAA,gCAAgC,GAAG,IAAI,YAAY,EAAS;AAC5D,QAAA,IAAA,CAAA,qCAAqC,GAAG,IAAI,YAAY,EAAS;AACjE,QAAA,IAAA,CAAA,+BAA+B,GAAG,IAAI,YAAY,EAAS;AAC3D,QAAA,IAAA,CAAA,oCAAoC,GAAG,IAAI,YAAY,EAAS;AAChE,QAAA,IAAA,CAAA,8BAA8B,GAAG,IAAI,YAAY,EAAU;IAOxB;AAE7C,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,gBAAgB,CAAC,EAAE;;AAE7B,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;QAC1B;IACF;+GAtDW,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,wwFCRxC,ihLAyEA,EAAA,MAAA,EAAA,CAAA,8wIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAgB,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,YAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAuJ,oBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,cAAA,EAAA,eAAA,EAAA,YAAA,EAAA,WAAA,EAAA,cAAA,EAAA,aAAA,EAAA,+BAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,8BAAA,EAAA,+BAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDjEa,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBANvC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,cAGxB,KAAK,EAAA,QAAA,EAAA,ihLAAA,EAAA,MAAA,EAAA,CAAA,8wIAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA,SAAS;uBAAC,sBAAsB;;sBAChC,SAAS;uBAAC,wBAAwB;;sBAClC,SAAS;uBAAC,uBAAuB;;sBACjC,SAAS;uBAAC,gCAAgC;;;MEnChC,oBAAoB,CAAA;AAqB/B,IAAA,WAAA,CAAoB,yBAAoD,EAAA;QAApD,IAAA,CAAA,yBAAyB,GAAzB,yBAAyB;QApBpC,IAAA,CAAA,UAAU,GAAQ,IAAI;QACtB,IAAA,CAAA,QAAQ,GAAU,EAAE;QACpB,IAAA,CAAA,eAAe,GAAQ,IAAI;QAC3B,IAAA,CAAA,sBAAsB,GAAU,EAAE;QAClC,IAAA,CAAA,oBAAoB,GAAkB,IAAI;QAC1C,IAAA,CAAA,aAAa,GAAU,EAAE;QACzB,IAAA,CAAA,UAAU,GAAU,EAAE;QACtB,IAAA,CAAA,cAAc,GAAU,EAAE;AAEzB,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAO;AACzC,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAA0C;AACjF,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAA6B;AACnE,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAA8B;AAClE,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAO;AAC9C,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,YAAY,EAAU;AACnD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAQ;;QAGhD,IAAA,CAAA,aAAa,GAAmB,EAAE;IAEyC;AAE3E,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE;YACvB,IAAI,CAAC,mBAAmB,EAAE;QAC5B;IACF;AAEA;;AAEG;AACH,IAAA,qBAAqB,CAAC,MAAW,EAAA;AAC/B,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,KAAK;;AAEzB,QAAA,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE;AAClC,YAAA,OAAO,MAAM,CAAC,SAAS,KAAK,IAAI;QAClC;;AAEA,QAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE;AACjC,YAAA,OAAO,MAAM,CAAC,QAAQ,KAAK,IAAI;QACjC;AACA,QAAA,OAAO,KAAK;IACd;AAEA;;AAEG;AACH,IAAA,yBAAyB,CAAC,IAAS,EAAA;AACjC,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB;AAAE,YAAA,OAAO,KAAK;AACjD,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;IACH,eAAe,CAAC,OAAY,EAAE,KAAkB,EAAA;QAC9C,IAAI,KAAK,EAAE;YACT,KAAK,CAAC,eAAe,EAAE;QACzB;AACA,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;IACpC;AAEA;;AAEG;IACH,oBAAoB,CAAC,OAAY,EAAE,KAAiB,EAAA;QAClD,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC;IACzC;AAEA;;AAEG;IACH,oBAAoB,CAAC,QAAgB,EAAE,UAAkB,EAAA;QACvD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;IAC1D;AAEA;;AAEG;IACH,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;AAC5B,YAAA,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI;AAC3B,YAAA,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE;AACxB,SAAA,CAAC;IACJ;AAEA;;AAEG;IACH,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AAC1B,YAAA,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI;AAC3B,YAAA,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE;AAC5B,SAAA,CAAC;IACJ;AAEA;;AAEG;IACH,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;IACzB;AAEA;;AAEG;AACH,IAAA,oBAAoB,CAAC,IAAY,EAAA;AAC/B,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;IACxC;AAEA;;AAEG;IACH,mBAAmB,GAAA;QACjB,IAAI,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;;AAGlC,QAAA,SAAS,CAAC,OAAO,CAAC,OAAO,IAAG;AAC1B,YAAA,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;gBACxB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;YACvD;AACA,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;gBACtB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;YACnD;AACF,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,UAAU,GAAG,IAAI,GAAG,EAAwB;AAElD,QAAA,SAAS,CAAC,OAAO,CAAC,OAAO,IAAG;YAC1B,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,IAAI,SAAS;YAClD,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,IAAI,iBAAiB;YAE9D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AAC9B,gBAAA,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE;oBACxB,WAAW;oBACX,SAAS;AACT,oBAAA,QAAQ,EAAE,EAAE;AACZ,oBAAA,QAAQ,EAAE;AACX,iBAAA,CAAC;YACJ;AAEA,YAAA,UAAU,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AACnD,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAC7D,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAC3C;IACH;AAEA;;AAEG;IACH,WAAW,CAAC,KAAmB,EAAE,KAAa,EAAA;QAC5C,IAAI,KAAK,EAAE;YACT,KAAK,CAAC,eAAe,EAAE;QACzB;AACA,QAAA,KAAK,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC,QAAQ;IAClC;AAEA;;AAEG;AACH,IAAA,UAAU,CAAC,KAAmB,EAAA;AAC5B,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE;AAC9B,YAAA,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,KAAK,KAAK,GAAG,MAAM,GAAG,KAAK;QACtE;aAAO;AACL,YAAA,KAAK,CAAC,MAAM,GAAG,SAAS;AACxB,YAAA,KAAK,CAAC,aAAa,GAAG,MAAM;QAC9B;IACF;AAEA;;AAEG;AACH,IAAA,aAAa,CAAC,QAAgB,EAAA;;AAE5B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;QAChE,IAAI,QAAQ,EAAE;;AAEZ,YAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,KAAK,QAAQ,GAAG,QAAQ,GAAG,UAAU;YACjE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,QAAQ,EAAE,IAAI,EAAE;QAClD;;AAGA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;QAC3D,IAAI,MAAM,EAAE;AACV,YAAA,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC1D;;QAGA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE;IAC7C;AAEA;;AAEG;AACK,IAAA,iBAAiB,CAAC,OAAY,EAAA;;;AAGpC,QAAA,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACvD,YAAA,OAAO,CAAC,QAAQ;YAChB,OAAO,CAAC,MAAM,EAAE,EAAE;AAClB,YAAA,OAAO,CAAC,QAAQ;YAChB,OAAO,CAAC,SAAS,EAAE,EAAE;AACrB,YAAA,IAAI;QAErB,IAAI,CAAC,QAAQ,EAAE;;;YAGb,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE;QAC1C;AAEA,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;IACrC;AAEA;;AAEG;AACK,IAAA,eAAe,CAAC,OAAY,EAAA;;AAElC,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC;;QAG5F,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AACnD,gBAAA,OAAO,CAAC,MAAM;gBACd,OAAO,CAAC,IAAI,EAAE,EAAE;AAChB,gBAAA,IAAI;QACf;QAEA,IAAI,CAAC,MAAM,EAAE;;YAEX,MAAM,uBAAuB,GAAG,OAAO,CAAC,UAAU,EAAE,EAAE,IAAI,OAAO,CAAC,YAAY;AAC9E,YAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,uBAAuB,CAAC;YAE1F,IAAI,kBAAkB,EAAE;;gBAEtB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,IAAI,kBAAkB,CAAC,MAAM,EAAE,EAAE;gBAC7E,IAAI,QAAQ,EAAE;;AAEZ,oBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;oBAC3D,IAAI,MAAM,EAAE;AACV,wBAAA,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC1D;oBACA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC3C;YACF;YAEA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE;QAC9C;AAEA,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;IACnC;AAEA;;AAEG;AACH,IAAA,aAAa,CAAC,OAAY,EAAA;QACxB,OAAO,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;IAC/D;AAEA;;AAEG;AACH,IAAA,WAAW,CAAC,OAAY,EAAA;QACtB,OAAO,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;IAC3D;AAEA;;AAEG;AACH,IAAA,iBAAiB,CAAC,KAAmB,EAAA;AACnC,QAAA,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;;AAEvC,YAAA,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE;AAC9B,gBAAA,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;AAClD,gBAAA,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;AAClD,gBAAA,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK;AAEjF,gBAAA,IAAI,WAAW,KAAK,CAAC,EAAE;AACrB,oBAAA,OAAO,WAAW;gBACpB;;AAGA,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;AACxD,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;AACxD,gBAAA,OAAO,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC;YACvC;;AAGA,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;AACxD,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;YACxD,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC;AAEpD,YAAA,IAAI,aAAa,KAAK,CAAC,EAAE;AACvB,gBAAA,OAAO,aAAa;YACtB;;AAGA,YAAA,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;AAClD,YAAA,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;YAClD,OAAO,KAAK,GAAG,KAAK;AACtB,QAAA,CAAC,CAAC;IACJ;+GAnTW,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAF,yBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,6qBClBjC,wzRA+LA,EAAA,MAAA,EAAA,CAAA,4poBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAApK,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FD7Ka,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,cAGhB,KAAK,EAAA,QAAA,EAAA,wzRAAA,EAAA,MAAA,EAAA,CAAA,4poBAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;ME1BU,kBAAkB,CAAA;AAN/B,IAAA,WAAA,GAAA;QAOW,IAAA,CAAA,QAAQ,GAAQ,IAAI;AACnB,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAO;AA2ClD,IAAA;AAzCC;;AAEG;AACH,IAAA,mBAAmB,CAAC,IAAY,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,SAAS;;QAE3B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IACvE;AAEA;;AAEG;AACH,IAAA,aAAa,CAAC,QAAgB,EAAA;QAC5B,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;QACzD;QAEA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;AACjC,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACtB,OAAO;AACL,gBAAA,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AAClB,gBAAA,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AACjB,gBAAA,IAAI,EAAE,KAAK,CAAC,CAAC;aACd;QACH;AAAO,aAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YAC7B,OAAO;AACL,gBAAA,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AAClB,gBAAA,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AACjB,gBAAA,IAAI,EAAE;aACP;QACH;AAEA,QAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;IAC5D;AAEA;;AAEG;AACH,IAAA,aAAa,CAAC,MAAW,EAAA;AACvB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;IACjC;+GA5CW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,0JCR/B,g/FA0EA,EAAA,MAAA,EAAA,CAAA,41HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDlEa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,cAGd,KAAK,EAAA,QAAA,EAAA,g/FAAA,EAAA,MAAA,EAAA,CAAA,41HAAA,CAAA,EAAA;;sBAGhB;;sBACA;;;MEDU,yBAAyB,CAAA;AANtC,IAAA,WAAA,GAAA;QAOW,IAAA,CAAA,WAAW,GAAiB,EAAE;QAC9B,IAAA,CAAA,oBAAoB,GAAkB,IAAI;AAEzC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAoC;AAK7E,IAAA;AAHC,IAAA,WAAW,CAAC,OAAsB,EAAA;;IAElC;+GARW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,uOCTtC,o9FAmEA,EAAA,MAAA,EAAA,CAAA,6gPAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FD1Da,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,cAGtB,KAAK,EAAA,QAAA,EAAA,o9FAAA,EAAA,MAAA,EAAA,CAAA,6gPAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBAEA;;;MEGU,wBAAwB,CAAA;AASnC,IAAA,WAAA,CAAoB,GAAsB,EAAA;QAAtB,IAAA,CAAA,GAAG,GAAH,GAAG;QARd,IAAA,CAAA,cAAc,GAAoB,EAAE;QACpC,IAAA,CAAA,gBAAgB,GAAkB,IAAI;AAErC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAA0C;AAC3E,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAA0C;QAExF,IAAA,CAAA,cAAc,GAAoB,EAAE;IAES;AAE7C,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,gBAAgB,CAAC,EAAE;;AAE7B,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE;AAEzE,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB;IACF;AAEA;;AAEG;IACH,iBAAiB,CAAC,MAAqB,EAAE,KAAY,EAAA;QACnD,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IAC/E;+GA1BW,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,kRChBrC,w4CAiCA,EAAA,MAAA,EAAA,CAAA,2gJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,OAAA,EAAA,CAAA,CAAA;;4FDjBa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAPpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAAA,UAAA,EAGrB,KAAK,EAAA,eAAA,EACA,uBAAuB,CAAC,OAAO,EAAA,QAAA,EAAA,w4CAAA,EAAA,MAAA,EAAA,CAAA,2gJAAA,CAAA,EAAA;;sBAG/C;;sBACA;;sBAEA;;sBACA;;;MEbU,qBAAqB,CAAA;AANlC,IAAA,WAAA,GAAA;QAOW,IAAA,CAAA,WAAW,GAAQ,IAAI;QACvB,IAAA,CAAA,oBAAoB,GAAkB,IAAI;QAC1C,IAAA,CAAA,gBAAgB,GAAkB,IAAI;QACtC,IAAA,CAAA,aAAa,GAAQ,IAAI;QACzB,IAAA,CAAA,iBAAiB,GAAW,EAAE;AAE7B,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAA6B;AAC3D,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAA0C;AAC3E,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAA0C;AAC1E,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAO;AACxC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAQ;AACxC,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAA8B;AAClE,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAA0C;AAkDzF,IAAA;AAhDC;;AAEG;AACH,IAAA,aAAa,CAAC,KAAgC,EAAA;AAC5C,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;IAC9B;AAEA;;AAEG;AACH,IAAA,gBAAgB,CAAC,KAA6C,EAAA;AAC5D,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;IACjC;AAEA;;AAEG;IACH,aAAa,CAAC,QAAgB,EAAE,UAAkB,EAAA;QAChD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;IACnD;AAEA;;AAEG;AACH,IAAA,cAAc,CAAC,OAAY,EAAA;AACzB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;IACnC;AAEA;;AAEG;IACH,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC3B;AAEA;;AAEG;AACH,IAAA,mBAAmB,CAAC,KAAiC,EAAA;AACnD,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;IACpC;AAEA;;AAEG;AACH,IAAA,mBAAmB,CAAC,KAA6C,EAAA;AAC/D,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;IACpC;+GA9DW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,+gBCRlC,uzKA8HA,EAAA,MAAA,EAAA,CAAA,qyLAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAwK,yBAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAzK,IAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDtHa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,cAGjB,KAAK,EAAA,QAAA,EAAA,uzKAAA,EAAA,MAAA,EAAA,CAAA,qyLAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;MEJU,wBAAwB,CAAA;AANrC,IAAA,WAAA,GAAA;QAOW,IAAA,CAAA,UAAU,GAAW,EAAE;QACvB,IAAA,CAAA,QAAQ,GAAU,EAAE;QACpB,IAAA,CAAA,WAAW,GAAW,CAAC;QACvB,IAAA,CAAA,QAAQ,GAAW,EAAE;QACrB,IAAA,CAAA,aAAa,GAAW,CAAC;QACzB,IAAA,CAAA,UAAU,GAAW,EAAE;QACvB,IAAA,CAAA,aAAa,GAAQ,IAAI;QACzB,IAAA,CAAA,eAAe,GAAU,EAAE;QAC3B,IAAA,CAAA,eAAe,GAAQ,IAAI;QAC3B,IAAA,CAAA,sBAAsB,GAAU,EAAE;QAClC,IAAA,CAAA,oBAAoB,GAAkB,IAAI;QAC1C,IAAA,CAAA,IAAI,GAAQ,IAAI;QAChB,IAAA,CAAA,aAAa,GAAU,EAAE;QACzB,IAAA,CAAA,UAAU,GAAU,EAAE;QACtB,IAAA,CAAA,cAAc,GAAoC,SAAS;AAE1D,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAU;AAC1C,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU;AACxC,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,YAAY,EAAmC;AAC3E,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAO;AACvC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAQ;AACxC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAO;AACzC,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAA0C;AACjF,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAA6B;AACnE,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAA8B;AAClE,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAO;AAC9C,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,YAAY,EAAU;AACnD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAA+C;AAC7E,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAAiD;QAE/F,IAAA,CAAA,UAAU,GAAW,EAAE;QACvB,IAAA,CAAA,aAAa,GAAmB,MAAM;;QAGtC,IAAA,CAAA,aAAa,GAAmB,EAAE;AAyVnC,IAAA;AAvVC,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,iBAAiB,CAAC,EAAE;YAC9B,IAAI,CAAC,mBAAmB,EAAE;QAC5B;IACF;AAEA;;AAEG;AACH,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC;IACtD;AAEA;;AAEG;AACH,IAAA,UAAU,CAAC,MAAc,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE;;AAE9B,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,KAAK,GAAG,MAAM,GAAG,KAAK;QACpE;aAAO;;AAEL,YAAA,IAAI,CAAC,UAAU,GAAG,MAAM;AACxB,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM,KAAK,oBAAoB,GAAG,MAAM,GAAG,KAAK;QACvE;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;IACnF;AAEA;;AAEG;AACH,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU;AAC7B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW;QAChC,MAAM,KAAK,GAAG,CAAC;QACf,MAAM,KAAK,GAAa,EAAE;QAC1B,MAAM,aAAa,GAAa,EAAE;AAElC,QAAA,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE;AACzF,YAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACf;AAEA,QAAA,IAAI,OAAO,GAAG,KAAK,GAAG,CAAC,EAAE;YACvB,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B;aAAO;AACL,YAAA,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;QACvB;AAEA,QAAA,aAAa,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QAE5B,IAAI,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,CAAC,EAAE;YAC/B,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;QAC/B;AAAO,aAAA,IAAI,KAAK,GAAG,CAAC,EAAE;AACpB,YAAA,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;QAC3B;AAEA,QAAA,OAAO,aAAa;IACtB;AAEA;;AAEG;AACH,IAAA,cAAc,CAAC,MAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;IACjC;AAEA;;AAEG;AACH,IAAA,sBAAsB,CAAC,MAAuC,EAAA;AAC5D,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC;IACzC;AAEA;;AAEG;AACH,IAAA,YAAY,CAAC,IAAY,EAAA;AACvB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B;AAEA;;AAEG;IACH,WAAW,CAAC,KAAgB,EAAE,MAAW,EAAA;;AAEvC,QAAA,IAAI,IAAI,CAAC,cAAc,KAAK,WAAW,EAAE;;;AAGvC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,KAAK,YAAY,GAAG,UAAU,GAAG,IAAI,CAAC,UAAU;AAChF,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAChE;IACF;AAEA;;AAEG;AACH,IAAA,aAAa,CAAC,MAAW,EAAA;AACvB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;IACjC;AAEA;;AAEG;IACH,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC3B;AAEA;;AAEG;AACH,IAAA,qBAAqB,CAAC,MAAW,EAAA;AAC/B,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,KAAK;AACzB,QAAA,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE;AAClC,YAAA,OAAO,MAAM,CAAC,SAAS,KAAK,IAAI;QAClC;AACA,QAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE;AACjC,YAAA,OAAO,MAAM,CAAC,QAAQ,KAAK,IAAI;QACjC;AACA,QAAA,OAAO,KAAK;IACd;AAEA;;AAEG;AACH,IAAA,yBAAyB,CAAC,IAAS,EAAA;AACjC,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB;AAAE,YAAA,OAAO,KAAK;AACjD,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;IACH,eAAe,CAAC,OAAY,EAAE,KAAkB,EAAA;QAC9C,IAAI,KAAK,EAAE;YACT,KAAK,CAAC,eAAe,EAAE;QACzB;AACA,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;IACpC;AAEA;;AAEG;IACH,oBAAoB,CAAC,OAAY,EAAE,KAAiB,EAAA;QAClD,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC;IACzC;AAEA;;AAEG;IACH,oBAAoB,CAAC,QAAgB,EAAE,UAAkB,EAAA;QACvD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;IAC1D;AAEA;;AAEG;IACH,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;AAC5B,YAAA,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI;AAC9B,YAAA,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE;AAC3B,SAAA,CAAC;IACJ;AAEA;;AAEG;IACH,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AAC1B,YAAA,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI;AAC9B,YAAA,EAAE,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE;AAC/B,SAAA,CAAC;IACJ;AAEA;;AAEG;IACH,oBAAoB,CAAC,IAAY,EAAE,KAAa,EAAA;QAC9C,IAAI,KAAK,EAAE;YACT,KAAK,CAAC,eAAe,EAAE;QACzB;AACA,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;IACxC;AAEA;;AAEG;IACH,mBAAmB,GAAA;QACjB,IAAI,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC;;AAGzC,QAAA,SAAS,CAAC,OAAO,CAAC,OAAO,IAAG;AAC1B,YAAA,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;gBACxB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;YACvD;AACA,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;gBACtB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;YACnD;AACF,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,UAAU,GAAG,IAAI,GAAG,EAAwB;AAElD,QAAA,SAAS,CAAC,OAAO,CAAC,OAAO,IAAG;YAC1B,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,IAAI,SAAS;YAClD,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,IAAI,iBAAiB;YAE9D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AAC9B,gBAAA,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE;oBACxB,WAAW;oBACX,SAAS;AACT,oBAAA,QAAQ,EAAE,EAAE;AACZ,oBAAA,QAAQ,EAAE;AACX,iBAAA,CAAC;YACJ;AAEA,YAAA,UAAU,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AACnD,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAC7D,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAC3C;IACH;AAEA;;AAEG;IACH,WAAW,CAAC,KAAmB,EAAE,KAAa,EAAA;QAC5C,IAAI,KAAK,EAAE;YACT,KAAK,CAAC,eAAe,EAAE;QACzB;AACA,QAAA,KAAK,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC,QAAQ;IAClC;AAEA;;AAEG;AACH,IAAA,iBAAiB,CAAC,KAAmB,EAAA;AACnC,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE;AAC9B,YAAA,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,KAAK,KAAK,GAAG,MAAM,GAAG,KAAK;QACtE;aAAO;AACL,YAAA,KAAK,CAAC,MAAM,GAAG,SAAS;AACxB,YAAA,KAAK,CAAC,aAAa,GAAG,MAAM;QAC9B;IACF;AAEA;;AAEG;AACH,IAAA,aAAa,CAAC,QAAgB,EAAA;;AAE5B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;QAChE,IAAI,QAAQ,EAAE;;AAEZ,YAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,KAAK,QAAQ,GAAG,QAAQ,GAAG,UAAU;YACjE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,QAAQ,EAAE,IAAI,EAAE;QAClD;;AAGA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;QAC3D,IAAI,MAAM,EAAE;AACV,YAAA,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC1D;;QAGA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE;IAC7C;AAEA;;AAEG;AACK,IAAA,iBAAiB,CAAC,OAAY,EAAA;;AAEpC,QAAA,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACvD,YAAA,OAAO,CAAC,QAAQ;YAChB,OAAO,CAAC,MAAM,EAAE,EAAE;AAClB,YAAA,SAAS;AAC1B,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;IACrC;AAEA;;AAEG;AACK,IAAA,eAAe,CAAC,OAAY,EAAA;;AAElC,QAAA,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AACnD,YAAA,OAAO,CAAC,MAAM;YACd,OAAO,CAAC,IAAI,EAAE,EAAE;AAChB,YAAA,SAAS;AACxB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;IACnC;AAEA;;AAEG;AACH,IAAA,aAAa,CAAC,OAAY,EAAA;QACxB,OAAO,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;IAC/D;AAEA;;AAEG;AACH,IAAA,WAAW,CAAC,OAAY,EAAA;QACtB,OAAO,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;IAC3D;AAEA;;AAEG;AACH,IAAA,iBAAiB,CAAC,KAAmB,EAAA;AACnC,QAAA,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;;AAEvC,YAAA,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE;AAC9B,gBAAA,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;AAClD,gBAAA,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;AAClD,gBAAA,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK;AAEjF,gBAAA,IAAI,WAAW,KAAK,CAAC,EAAE;AACrB,oBAAA,OAAO,WAAW;gBACpB;;AAGA,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;AACxD,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;AACxD,gBAAA,OAAO,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC;YACvC;;AAGA,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;AACxD,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;YACxD,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC;AAEpD,YAAA,IAAI,aAAa,KAAK,CAAC,EAAE;AACvB,gBAAA,OAAO,aAAa;YACtB;;AAGA,YAAA,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;AAClD,YAAA,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;YAClD,OAAO,KAAK,GAAG,KAAK;AACtB,QAAA,CAAC,CAAC;IACJ;+GA3XW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,okCCjBrC,qsfAsTA,EAAA,MAAA,EAAA,CAAA,ynjCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDrSa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,cAGrB,KAAK,EAAA,QAAA,EAAA,qsfAAA,EAAA,MAAA,EAAA,CAAA,ynjCAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;ME7BU,uBAAuB,CAAA;AANpC,IAAA,WAAA,GAAA;QAOW,IAAA,CAAA,aAAa,GAAQ,IAAI;QACzB,IAAA,CAAA,kBAAkB,GAAU,EAAE;QAC9B,IAAA,CAAA,eAAe,GAAU,EAAE;QAC3B,IAAA,CAAA,gBAAgB,GAAW,EAAE;QAC7B,IAAA,CAAA,aAAa,GAAW,EAAE;QAC1B,IAAA,CAAA,aAAa,GAAQ,IAAI;QACzB,IAAA,CAAA,WAAW,GAAW,EAAE;QACxB,IAAA,CAAA,eAAe,GAAU,EAAE;QAC3B,IAAA,CAAA,yBAAyB,GAAY,KAAK;QAC1C,IAAA,CAAA,eAAe,GAAQ,IAAI;QAC3B,IAAA,CAAA,sBAAsB,GAAU,EAAE;QAClC,IAAA,CAAA,oBAAoB,GAAkB,IAAI;QAC1C,IAAA,CAAA,aAAa,GAAU,EAAE;QACzB,IAAA,CAAA,UAAU,GAAU,EAAE;AAErB,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,YAAY,EAAU;AACpD,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAU;AACjD,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAAiD;AACrF,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAA+B;AAC/D,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAQ;AACxC,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAAQ;AAC9C,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAO;AACzC,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAA0C;AACjF,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAA8B;AAClE,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAO;AAC9C,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,YAAY,EAAU;;QAG7D,IAAA,CAAA,aAAa,GAAmB,EAAE;AA4OnC,IAAA;AA1OC,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,iBAAiB,CAAC,EAAE;YAC9B,IAAI,CAAC,mBAAmB,EAAE;QAC5B;IACF;AAEA;;AAEG;AACH,IAAA,wBAAwB,CAAC,MAAc,EAAA;AACrC,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC;IAC3C;AAEA;;AAEG;AACH,IAAA,qBAAqB,CAAC,MAAc,EAAA;AAClC,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;IACxC;AAEA;;AAEG;AACH,IAAA,WAAW,CAAC,KAAgB,EAAE,MAAW,EAAE,IAAY,EAAA;AACrD,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACtD;AAEA;;AAEG;IACH,aAAa,CAAC,MAAW,EAAE,IAAY,EAAA;QACrC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC3C;AAEA;;AAEG;IACH,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC3B;AAEA;;AAEG;IACH,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE;IACjC;AAEA;;AAEG;AACH,IAAA,qBAAqB,CAAC,MAAW,EAAA;AAC/B,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,KAAK;AACzB,QAAA,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE;AAClC,YAAA,OAAO,MAAM,CAAC,SAAS,KAAK,IAAI;QAClC;AACA,QAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE;AACjC,YAAA,OAAO,MAAM,CAAC,QAAQ,KAAK,IAAI;QACjC;AACA,QAAA,OAAO,KAAK;IACd;AAEA;;AAEG;IACH,eAAe,CAAC,OAAY,EAAE,KAAkB,EAAA;QAC9C,IAAI,KAAK,EAAE;YACT,KAAK,CAAC,eAAe,EAAE;QACzB;AACA,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;IACpC;AAEA;;AAEG;IACH,oBAAoB,CAAC,OAAY,EAAE,KAAiB,EAAA;QAClD,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC;IACzC;AAEA;;AAEG;IACH,oBAAoB,CAAC,QAAgB,EAAE,UAAkB,EAAA;QACvD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;IAC1D;AAEA;;AAEG;IACH,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;YAC1B,IAAI,EAAE,IAAI,CAAC,WAAW;AACtB,YAAA,EAAE,EAAE,IAAI,CAAC,aAAa,EAAE;AACzB,SAAA,CAAC;IACJ;AAEA;;AAEG;IACH,oBAAoB,CAAC,IAAY,EAAE,KAAa,EAAA;QAC9C,IAAI,KAAK,EAAE;YACT,KAAK,CAAC,eAAe,EAAE;QACzB;AACA,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;IACxC;AAEA;;AAEG;IACH,mBAAmB,GAAA;QACjB,IAAI,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC;;AAGzC,QAAA,MAAM,UAAU,GAAG,IAAI,GAAG,EAAwB;AAElD,QAAA,SAAS,CAAC,OAAO,CAAC,OAAO,IAAG;YAC1B,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,IAAI,SAAS;YAClD,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,IAAI,iBAAiB;YAE9D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AAC9B,gBAAA,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE;oBACxB,WAAW;oBACX,SAAS;AACT,oBAAA,QAAQ,EAAE,EAAE;AACZ,oBAAA,QAAQ,EAAE;AACX,iBAAA,CAAC;YACJ;AAEA,YAAA,UAAU,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AACnD,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAC7D,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAC3C;IACH;AAEA;;AAEG;IACH,WAAW,CAAC,KAAmB,EAAE,KAAa,EAAA;QAC5C,IAAI,KAAK,EAAE;YACT,KAAK,CAAC,eAAe,EAAE;QACzB;AACA,QAAA,KAAK,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC,QAAQ;IAClC;AAEA;;AAEG;AACH,IAAA,iBAAiB,CAAC,KAAmB,EAAA;AACnC,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE;AAC9B,YAAA,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,KAAK,KAAK,GAAG,MAAM,GAAG,KAAK;QACtE;aAAO;AACL,YAAA,KAAK,CAAC,MAAM,GAAG,SAAS;AACxB,YAAA,KAAK,CAAC,aAAa,GAAG,MAAM;QAC9B;IACF;AAEA;;AAEG;AACH,IAAA,aAAa,CAAC,QAAgB,EAAA;;AAE5B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;QAChE,IAAI,QAAQ,EAAE;;AAEZ,YAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,KAAK,QAAQ,GAAG,QAAQ,GAAG,UAAU;YACjE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,QAAQ,EAAE,IAAI,EAAE;QAClD;;AAGA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;QAC3D,IAAI,MAAM,EAAE;AACV,YAAA,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC1D;;QAGA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE;IAC7C;AAEA;;AAEG;AACH,IAAA,aAAa,CAAC,OAAY,EAAA;AACxB,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,SAAS;AAC9F,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;IACrC;AAEA;;AAEG;AACH,IAAA,WAAW,CAAC,OAAY,EAAA;AACtB,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,MAAM,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,SAAS;AACtF,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;IACnC;AAEA;;AAEG;AACH,IAAA,iBAAiB,CAAC,KAAmB,EAAA;AACnC,QAAA,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;;AAEvC,YAAA,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE;AAC9B,gBAAA,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;AAClD,gBAAA,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;AAClD,gBAAA,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK;AAEjF,gBAAA,IAAI,WAAW,KAAK,CAAC,EAAE;AACrB,oBAAA,OAAO,WAAW;gBACpB;;AAGA,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;AACxD,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;AACxD,gBAAA,OAAO,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC;YACvC;;AAGA,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;AACxD,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;YACxD,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC;AAEpD,YAAA,IAAI,aAAa,KAAK,CAAC,EAAE;AACvB,gBAAA,OAAO,aAAa;YACtB;;AAGA,YAAA,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;AAClD,YAAA,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;YAClD,OAAO,KAAK,GAAG,KAAK;AACtB,QAAA,CAAC,CAAC;IACJ;+GAxQW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,wlCCjBpC,6seA6TA,EAAA,MAAA,EAAA,CAAA,044BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FD5Sa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,cAGnB,KAAK,EAAA,QAAA,EAAA,6seAAA,EAAA,MAAA,EAAA,CAAA,044BAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;ME1BU,kCAAkC,CAAA;AAN/C,IAAA,WAAA,GAAA;QAOW,IAAA,CAAA,WAAW,GAAU,EAAE;QACvB,IAAA,CAAA,aAAa,GAAU,EAAE;QACzB,IAAA,CAAA,UAAU,GAAU,EAAE;QACtB,IAAA,CAAA,UAAU,GAAW,EAAE;QACvB,IAAA,CAAA,eAAe,GAAQ,IAAI;AAE1B,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAU;AAC1C,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAO;AACzC,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAO;QAExD,IAAA,CAAA,aAAa,GAAmB,EAAE;QAClC,IAAA,CAAA,aAAa,GAAW,CAAC;QACzB,IAAA,CAAA,cAAc,GAAQ,IAAI;AAsN3B,IAAA;AApNC,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,eAAe,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,EAAE;YACxG,IAAI,CAAC,mBAAmB,EAAE;QAC5B;IACF;AAEA;;AAEG;IACH,mBAAmB,GAAA;;QAEjB,IAAI,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;;AAGpC,QAAA,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAG;AACzB,YAAA,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;gBACxB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;YACvD;AACA,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;gBACtB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;YACnD;AACF,QAAA,CAAC,CAAC;;QAGF,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE;YAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;AACxD,YAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAG;gBACnC,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE;gBAC/C,OAAO,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;AACxD,YAAA,CAAC,CAAC;QACJ;;AAGA,QAAA,MAAM,UAAU,GAAG,IAAI,GAAG,EAAwB;AAElD,QAAA,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAG;YACzB,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,IAAI,SAAS;YAClD,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,IAAI,iBAAiB;YAE9D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AAC9B,gBAAA,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE;oBACxB,WAAW;oBACX,SAAS;AACT,oBAAA,QAAQ,EAAE,EAAE;AACZ,oBAAA,QAAQ,EAAE;AACX,iBAAA,CAAC;YACJ;AAEA,YAAA,UAAU,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AACnD,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAC7D,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAC3C;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM;IAC9C;AAEA;;AAEG;AACH,IAAA,cAAc,CAAC,MAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;IACjC;AAEA;;AAEG;IACH,cAAc,CAAC,OAAY,EAAE,KAAa,EAAA;QACxC,IAAI,KAAK,EAAE;YACT,KAAK,CAAC,eAAe,EAAE;QACzB;AACA,QAAA,IAAI,CAAC,cAAc,GAAG,OAAO;;AAE7B,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;IACpC;AAEA;;AAEG;IACH,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;IAC5B;AAEA;;AAEG;IACH,sBAAsB,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;QACrD;IACF;AAEA;;AAEG;IACH,WAAW,CAAC,KAAmB,EAAE,KAAa,EAAA;QAC5C,IAAI,KAAK,EAAE;YACT,KAAK,CAAC,eAAe,EAAE;QACzB;AACA,QAAA,KAAK,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC,QAAQ;IAClC;AAEA;;AAEG;AACH,IAAA,aAAa,CAAC,QAAgB,EAAA;;AAE5B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;QAChE,IAAI,QAAQ,EAAE;;AAEZ,YAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,KAAK,QAAQ,GAAG,QAAQ,GAAG,UAAU;YACjE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,QAAQ,EAAE,IAAI,EAAE;QAClD;;AAGA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;QAC3D,IAAI,MAAM,EAAE;AACV,YAAA,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC1D;;QAGA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE;IAC7C;AAEA;;AAEG;AACK,IAAA,iBAAiB,CAAC,OAAY,EAAA;;AAEpC,QAAA,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACvD,YAAA,OAAO,CAAC,QAAQ;YAChB,OAAO,CAAC,MAAM,EAAE,EAAE;AAClB,YAAA,SAAS;AAC1B,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;IACrC;AAEA;;AAEG;AACK,IAAA,eAAe,CAAC,OAAY,EAAA;;AAElC,QAAA,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AACnD,YAAA,OAAO,CAAC,MAAM;YACd,OAAO,CAAC,IAAI,EAAE,EAAE;AAChB,YAAA,SAAS;AACxB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;IACnC;AAEA;;AAEG;AACH,IAAA,aAAa,CAAC,OAAY,EAAA;QACxB,OAAO,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;IAC/D;AAEA;;AAEG;AACH,IAAA,WAAW,CAAC,OAAY,EAAA;QACtB,OAAO,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;IAC3D;AAEA;;AAEG;IACH,wBAAwB,GAAA;QACtB,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAClF;AAEA;;AAEG;AACH,IAAA,UAAU,CAAC,KAAmB,EAAA;AAC5B,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE;;AAE9B,YAAA,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,KAAK,KAAK,GAAG,MAAM,GAAG,KAAK;QACtE;aAAO;;AAEL,YAAA,KAAK,CAAC,MAAM,GAAG,SAAS;AACxB,YAAA,KAAK,CAAC,aAAa,GAAG,MAAM;QAC9B;IACF;AAEA;;AAEG;AACH,IAAA,iBAAiB,CAAC,KAAmB,EAAA;AACnC,QAAA,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;;AAEvC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;AACxD,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;YACxD,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC;AAEpD,YAAA,IAAI,aAAa,KAAK,CAAC,EAAE;AACvB,gBAAA,OAAO,aAAa;YACtB;;AAGA,YAAA,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;AAClD,YAAA,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;;AAGlD,YAAA,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,KAAK,SAAS,GAAG,KAAK,CAAC,aAAa,GAAG,MAAM;AAC3E,YAAA,IAAI,SAAS,KAAK,KAAK,EAAE;gBACvB,OAAO,KAAK,GAAG,KAAK;YACtB;iBAAO;gBACL,OAAO,KAAK,GAAG,KAAK;YACtB;AACF,QAAA,CAAC,CAAC;IACJ;+GAlOW,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kCAAkC,iZCjB/C,s2NA8JA,EAAA,MAAA,EAAA,CAAA,kocAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FD7Ia,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAN9C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kCAAkC,cAGhC,KAAK,EAAA,QAAA,EAAA,s2NAAA,EAAA,MAAA,EAAA,CAAA,kocAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;;MEhBU,2BAA2B,CAAA;AANxC,IAAA,WAAA,GAAA;QAOW,IAAA,CAAA,MAAM,GAAY,KAAK;QACvB,IAAA,CAAA,SAAS,GAA+F,IAAI;QAC5G,IAAA,CAAA,SAAS,GAAQ,IAAI;;QAGrB,IAAA,CAAA,iBAAiB,GAAU,EAAE;QAC7B,IAAA,CAAA,eAAe,GAAQ,IAAI;QAC3B,IAAA,CAAA,sBAAsB,GAAU,EAAE;QAClC,IAAA,CAAA,sBAAsB,GAAQ,IAAI;QAClC,IAAA,CAAA,oBAAoB,GAAkB,IAAI;QAC1C,IAAA,CAAA,oBAAoB,GAAQ,IAAI;QAChC,IAAA,CAAA,wBAAwB,GAAW,EAAE;;QAGrC,IAAA,CAAA,cAAc,GAAW,EAAE;QAC3B,IAAA,CAAA,gBAAgB,GAAW,EAAE;QAC7B,IAAA,CAAA,cAAc,GAAW,CAAC;QAC1B,IAAA,CAAA,kBAAkB,GAAW,EAAE;QAC/B,IAAA,CAAA,eAAe,GAAW,CAAC;QAC3B,IAAA,CAAA,kBAAkB,GAAU,EAAE;QAC9B,IAAA,CAAA,iBAAiB,GAAQ,IAAI;QAC7B,IAAA,CAAA,wBAAwB,GAAoC,SAAS;;QAGrE,IAAA,CAAA,2BAA2B,GAAU,EAAE;QACvC,IAAA,CAAA,wBAAwB,GAAU,EAAE;QACpC,IAAA,CAAA,yBAAyB,GAAW,EAAE;QACtC,IAAA,CAAA,sBAAsB,GAAW,EAAE;QACnC,IAAA,CAAA,sBAAsB,GAAQ,IAAI;QAClC,IAAA,CAAA,oBAAoB,GAAW,EAAE;QACjC,IAAA,CAAA,wBAAwB,GAAU,EAAE;QACpC,IAAA,CAAA,kCAAkC,GAAY,KAAK;QACnD,IAAA,CAAA,wBAAwB,GAAQ,IAAI;QACpC,IAAA,CAAA,+BAA+B,GAAU,EAAE;;QAG3C,IAAA,CAAA,WAAW,GAAU,EAAE;QACvB,IAAA,CAAA,aAAa,GAAU,EAAE;QACzB,IAAA,CAAA,UAAU,GAAU,EAAE;QACtB,IAAA,CAAA,cAAc,GAAU,EAAE;QAC1B,IAAA,CAAA,0BAA0B,GAAW,EAAE;;AAGtC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAQ;;AAGjC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAO;AACzC,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAA0C;AACjF,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAA6B;AACnE,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAA8B;AAClE,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAO;AAC9C,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,YAAY,EAAU;;AAGnD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAA6B;AAC3D,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAA0C;AAC3E,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAA0C;AAC1E,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAO;AACxC,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAQ;AAC/C,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAA0C;;AAG9E,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAO;;AAGvC,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,YAAY,EAAU;AACpD,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,YAAY,EAAU;AAClD,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,YAAY,EAA+C;AACvF,QAAA,IAAA,CAAA,+BAA+B,GAAG,IAAI,YAAY,EAAmC;AACrF,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,YAAY,EAAO;AACjD,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,YAAY,EAAQ;;AAGlD,QAAA,IAAA,CAAA,gCAAgC,GAAG,IAAI,YAAY,EAAU;AAC7D,QAAA,IAAA,CAAA,6BAA6B,GAAG,IAAI,YAAY,EAAU;AAC1D,QAAA,IAAA,CAAA,0BAA0B,GAAG,IAAI,YAAY,EAAiD;AAC9F,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,YAAY,EAA+B;AACxE,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,YAAY,EAAQ;AACjD,QAAA,IAAA,CAAA,4BAA4B,GAAG,IAAI,YAAY,EAAQ;;AAGvD,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,YAAY,EAAU;;AAG5D,QAAA,IAAA,CAAA,cAAc,GAAG,EAAE,CAAC;QACpB,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,aAAa,GAAG,EAAE;QAClB,IAAA,CAAA,aAAa,GAAG,EAAE;QAClB,IAAA,CAAA,MAAM,GAAG,CAAC;QACV,IAAA,CAAA,UAAU,GAAG,CAAC;;QAMd,IAAA,CAAA,IAAI,GAAG,IAAI;AAuLZ,IAAA;IArLC,QAAQ,GAAA;;QAEN,IAAI,CAAC,gBAAgB,EAAE;IACzB;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;;AAEhC,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE;YACrB,IAAI,CAAC,gBAAgB,EAAE;QACzB;IACF;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,qBAAqB,EAAE;IAC9B;AAEA;;AAEG;IACH,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE;AAC/B,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,KAAK,UAAU;AAAE,gBAAA,OAAO,iBAAiB;AACjE,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,KAAK,UAAU;AAAE,gBAAA,OAAO,gBAAgB;AAChE,YAAA,OAAO,eAAe;QACxB;AAAO,aAAA,IAAI,IAAI,CAAC,SAAS,KAAK,YAAY,EAAE;AAC1C,YAAA,IAAI,IAAI,CAAC,cAAc,KAAK,YAAY;AAAE,gBAAA,OAAO,iBAAiB;AAClE,YAAA,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS;AAAE,gBAAA,OAAO,eAAe;AAC7D,YAAA,IAAI,IAAI,CAAC,cAAc,KAAK,UAAU;AAAE,gBAAA,OAAO,gBAAgB;QACjE;AAAO,aAAA,IAAI,IAAI,CAAC,SAAS,KAAK,sBAAsB,EAAE;AACpD,YAAA,OAAO,gBAAgB;QACzB;AAAO,aAAA,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;AACvC,YAAA,OAAO,gBAAgB;QACzB;AAAO,aAAA,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE;;AAEpC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI;YACjC,IAAI,IAAI,EAAE;AACR,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,EAAE,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;AAC1E,gBAAA,MAAM,SAAS,GAAG,SAAS,GAAG,OAAO;gBACrC,MAAM,YAAY,GAAG,EAAE;gBACvB,MAAM,kBAAkB,GAAG,GAAG;AAE9B,gBAAA,IAAI,SAAS,GAAG,YAAY,EAAE;AAC5B,oBAAA,OAAO,kBAAkB;gBAC3B;AAAO,qBAAA,IAAI,SAAS,GAAG,kBAAkB,EAAE;AACzC,oBAAA,OAAO,sBAAsB;gBAC/B;qBAAO;AACL,oBAAA,OAAO,kBAAkB;gBAC3B;YACF;AACA,YAAA,OAAO,aAAa;QACtB;AAAO,aAAA,IAAI,IAAI,CAAC,SAAS,KAAK,WAAW,EAAE;AACzC,YAAA,OAAO,kBAAkB;QAC3B;AACA,QAAA,OAAO,EAAE;IACX;AAEA;;AAEG;IACH,aAAa,GAAA;AACX,QAAA,QAAQ,IAAI,CAAC,SAAS;AACpB,YAAA,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE;AACzC,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,aAAa;AACtB,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,gBAAgB;AACzB,YAAA,KAAK,WAAW;AACd,gBAAA,OAAO,oBAAoB;AAC7B,YAAA,KAAK,YAAY;AACf,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,wBAAwB,KAAK,SAAS,GAAG,SAAS;AACxD,oBAAA,IAAI,CAAC,wBAAwB,KAAK,WAAW,GAAG,WAAW,GAAG,KAAK;AACrF,gBAAA,IAAI,IAAI,CAAC,cAAc,KAAK,YAAY;oBAAE,OAAO,CAAA,EAAG,UAAU,CAAA,WAAA,CAAa;AAC3E,gBAAA,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS;oBAAE,OAAO,CAAA,EAAG,UAAU,CAAA,QAAA,CAAU;AACrE,gBAAA,IAAI,IAAI,CAAC,cAAc,KAAK,UAAU;AAAE,oBAAA,OAAO,cAAc;AAC7D,gBAAA,OAAO,EAAE;AACX,YAAA,KAAK,sBAAsB;AACzB,gBAAA,OAAO,iBAAiB;AAC1B,YAAA;AACE,gBAAA,OAAO,EAAE;;IAEf;AAEA;;AAEG;IACH,iBAAiB,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE;AAC/B,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,KAAK,UAAU;AAAE,gBAAA,OAAO,eAAe;AAC/D,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,KAAK,UAAU;AAAE,gBAAA,OAAO,eAAe;AAC/D,YAAA,OAAO,cAAc;QACvB;AAAO,aAAA,IAAI,IAAI,CAAC,SAAS,KAAK,YAAY,EAAE;;AAE1C,YAAA,IAAI,IAAI,CAAC,wBAAwB,KAAK,SAAS;AAAE,gBAAA,OAAO,eAAe;AACvE,YAAA,IAAI,IAAI,CAAC,wBAAwB,KAAK,WAAW;AAAE,gBAAA,OAAO,gBAAgB;;AAE1E,YAAA,IAAI,IAAI,CAAC,cAAc,KAAK,YAAY;AAAE,gBAAA,OAAO,eAAe;AAChE,YAAA,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS;AAAE,gBAAA,OAAO,cAAc;AAC5D,YAAA,IAAI,IAAI,CAAC,cAAc,KAAK,UAAU;AAAE,gBAAA,OAAO,eAAe;QAChE;AAAO,aAAA,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE;AACpC,YAAA,OAAO,cAAc;QACvB;AAAO,aAAA,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,sBAAsB,EAAE;AACpF,YAAA,OAAO,eAAe;QACxB;AAAO,aAAA,IAAI,IAAI,CAAC,SAAS,KAAK,WAAW,EAAE;AACzC,YAAA,OAAO,gBAAgB;QACzB;AACA,QAAA,OAAO,EAAE;IACX;AAEA;;AAEG;IACH,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;AAEA;;AAEG;AACH,IAAA,kBAAkB,CAAC,KAAiB,EAAA;QAClC,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO;AAC3B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc;;QAGrC,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAa,QAAQ,EAAE,WAAW;AACrE,aAAA,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AACtB,aAAA,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;;QAGxC,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAa,QAAQ,EAAE,SAAS;AACjE,aAAA,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACxC;AAEA;;AAEG;AACK,IAAA,WAAW,CAAC,KAAiB,EAAA;QACnC,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE;QAEtB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO;AAC1C,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC;AAC/E,QAAA,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO;AACjC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,GAAG,QAAQ;;QAG3C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QAE1F,IAAI,CAAC,gBAAgB,EAAE;IACzB;AAEA;;AAEG;AACK,IAAA,SAAS,CAAC,KAAiB,EAAA;AACjC,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;QACvB,IAAI,CAAC,qBAAqB,EAAE;IAC9B;AAEA;;AAEG;IACK,gBAAgB,GAAA;AACtB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,GAAG,CAAC;AACnD,QAAA,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,oBAAoB,EAAE,CAAA,EAAG,KAAK,CAAA,GAAA,CAAK,CAAC;IACjF;AAEA;;AAEG;IACK,qBAAqB,GAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAC9B,YAAA,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE;AACxC,YAAA,IAAI,CAAC,qBAAqB,GAAG,SAAS;QACxC;AACA,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,YAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE;AACtC,YAAA,IAAI,CAAC,mBAAmB,GAAG,SAAS;QACtC;IACF;+GAtRW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,+wFCVxC,q9NA0IA,EAAA,MAAA,EAAA,CAAA,s7MAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA0K,2BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,aAAA,EAAA,OAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,oBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,eAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,eAAA,EAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,2BAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,yBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kCAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,iBAAA,EAAA,sBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDhIa,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBANvC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,cAGxB,KAAK,EAAA,QAAA,EAAA,q9NAAA,EAAA,MAAA,EAAA,CAAA,s7MAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBAGA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAGA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAGA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAGA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAGA;;sBAGA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAGA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAGA;;sBAGA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAGA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAGA;;;ME9DU,kBAAkB,CAAA;IAmH7B,WAAA,CACqC,eAAgC,EACjC,eAAgC,EAC1D,MAAc,EACd,KAAqB,EACrB,cAA8B,EAC9B,UAAqB,EACrB,kBAAsC,EACtC,cAA8B,EAC9B,yBAAoD,EACpD,yBAAoD,EACpD,oBAA0C,EAC3C,gBAAkC,EAClC,mBAAwC,EACxC,eAAgC,EAAA;QAbJ,IAAA,CAAA,eAAe,GAAf,eAAe;QAChB,IAAA,CAAA,eAAe,GAAf,eAAe;QACzC,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,kBAAkB,GAAlB,kBAAkB;QAClB,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,yBAAyB,GAAzB,yBAAyB;QACzB,IAAA,CAAA,yBAAyB,GAAzB,yBAAyB;QACzB,IAAA,CAAA,oBAAoB,GAApB,oBAAoB;QACrB,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,mBAAmB,GAAnB,mBAAmB;QACnB,IAAA,CAAA,eAAe,GAAf,eAAe;QA7HxB,IAAA,CAAA,SAAS,GAAG,WAAW;QACvB,IAAA,CAAA,eAAe,GAAG,CAAC;QACnB,IAAA,CAAA,aAAa,GAAG,CAAC;QACjB,IAAA,CAAA,YAAY,GAAG,CAAC;QAChB,IAAA,CAAA,gBAAgB,GAAG,CAAC;QACpB,IAAA,CAAA,oBAAoB,GAAG,CAAC;QACxB,IAAA,CAAA,aAAa,GAAG,CAAC;QACjB,IAAA,CAAA,cAAc,GAAG,KAAK;;QAGtB,IAAA,CAAA,uBAAuB,GAAG,IAAI;;QAG9B,IAAA,CAAA,mBAAmB,GAAG,CAAC;QACvB,IAAA,CAAA,gBAAgB,GAAG,CAAC;QACpB,IAAA,CAAA,0BAA0B,GAAG,CAAC;;QAG9B,IAAA,CAAA,oBAAoB,GAAG,CAAC;QACxB,IAAA,CAAA,iBAAiB,GAAG,CAAC;;QAGrB,IAAA,CAAA,0BAA0B,GAAG,EAAE;;QAG/B,IAAA,CAAA,yBAAyB,GAAG,EAAE;QAC9B,IAAA,CAAA,2BAA2B,GAAU,EAAE;QACvC,IAAA,CAAA,sBAAsB,GAAG,EAAE;QAC3B,IAAA,CAAA,wBAAwB,GAAU,EAAE;;QAGpC,IAAA,CAAA,gBAAgB,GAAG,EAAE;QACrB,IAAA,CAAA,cAAc,GAAG,CAAC;QAClB,IAAA,CAAA,kBAAkB,GAAG,EAAE;QACvB,IAAA,CAAA,eAAe,GAAG,CAAC;QACnB,IAAA,CAAA,kBAAkB,GAAU,EAAE;QAC9B,IAAA,CAAA,cAAc,GAAU,EAAE;QAC1B,IAAA,CAAA,cAAc,GAAW,EAAE;QAC3B,IAAA,CAAA,oBAAoB,GAAW,EAAE;QACjC,IAAA,CAAA,uBAAuB,GAAmB,MAAM;QAChD,IAAA,CAAA,wBAAwB,GAAoC,SAAS;;;QAK7D,IAAA,CAAA,aAAa,GAAQ,IAAI;QACzB,IAAA,CAAA,iBAAiB,GAAW,EAAE;;QAGtC,IAAA,CAAA,QAAQ,GAAU,EAAE;QACpB,IAAA,CAAA,WAAW,GAAU,EAAE;QACvB,IAAA,CAAA,UAAU,GAAU,EAAE;QACtB,IAAA,CAAA,WAAW,GAAU,EAAE;QACvB,IAAA,CAAA,QAAQ,GAAU,EAAE;QACpB,IAAA,CAAA,KAAK,GAAU,EAAE;;;AAKjB,QAAA,IAAA,CAAA,iBAAiB,GAAQ,IAAI,CAAC;QAC9B,IAAA,CAAA,qBAAqB,GAA+C,IAAI;AACxE,QAAA,IAAA,CAAA,oBAAoB,GAAkB,IAAI,CAAC;AAC3C,QAAA,IAAA,CAAA,oBAAoB,GAAQ,IAAI,CAAC;AACjC,QAAA,IAAA,CAAA,wBAAwB,GAAW,EAAE,CAAC;;QAGtC,IAAA,CAAA,sBAAsB,GAAQ,IAAI;QAClC,IAAA,CAAA,oBAAoB,GAAW,EAAE;QACjC,IAAA,CAAA,kCAAkC,GAAY,KAAK;QACnD,IAAA,CAAA,wBAAwB,GAAU,EAAE;;QAGpC,IAAA,CAAA,UAAU,GAAG,KAAK;AAClB,QAAA,IAAA,CAAA,aAAa,GAAG,EAAE,CAAC;AACnB,QAAA,IAAA,CAAA,aAAa,GAAG,EAAE,CAAC;QACnB,IAAA,CAAA,MAAM,GAAG,CAAC;QACV,IAAA,CAAA,UAAU,GAAG,CAAC;;;QAKd,IAAA,CAAA,sBAAsB,GAAU,EAAE;QAClC,IAAA,CAAA,uBAAuB,GAAU,EAAE;QAEnC,IAAA,CAAA,qBAAqB,GAAU,EAAE;QACjC,IAAA,CAAA,sBAAsB,GAAU,EAAE;QAClC,IAAA,CAAA,iBAAiB,GAA8B,EAAE;QACjD,IAAA,CAAA,iBAAiB,GAA8B,EAAE;QAEjD,IAAA,CAAA,sBAAsB,GAAU,EAAE;QAClC,IAAA,CAAA,uBAAuB,GAAU,EAAE;QACnC,IAAA,CAAA,mBAAmB,GAA8B,EAAE;QACnD,IAAA,CAAA,mBAAmB,GAA8B,EAAE;QAEnD,IAAA,CAAA,oBAAoB,GAAU,EAAE;;;AAKxB,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAE;QACjC,IAAA,CAAA,oBAAoB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;QAElE,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,cAAc,GAAG,KAAK;QACtB,IAAA,CAAA,SAAS,GAAG,KAAK;;QAGjB,IAAA,CAAA,IAAI,GAAG,IAAI;QAu6BX,IAAA,CAAA,wBAAwB,GAAG,KAAK;QAchC,IAAA,CAAA,0BAA0B,GAAG,KAAK;QAclC,IAAA,CAAA,yBAAyB,GAAG,KAAK;IAh7B9B;;IAGH,IAAI,wBAAwB,GAAA,EAAY,OAAO,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC,CAAC;AAC9F,IAAA,IAAI,wBAAwB,CAAC,KAAY,EAAA,EAAI,IAAI,CAAC,eAAe,CAAC,wBAAwB,GAAG,KAAK,CAAC,CAAC;IAEpG,IAAI,0BAA0B,GAAA,EAAY,OAAO,IAAI,CAAC,eAAe,CAAC,0BAA0B,CAAC,CAAC;AAClG,IAAA,IAAI,0BAA0B,CAAC,KAAY,EAAA,EAAI,IAAI,CAAC,eAAe,CAAC,0BAA0B,GAAG,KAAK,CAAC,CAAC;IAExG,IAAI,+BAA+B,GAAA,EAAY,OAAO,IAAI,CAAC,eAAe,CAAC,+BAA+B,CAAC,CAAC;AAC5G,IAAA,IAAI,+BAA+B,CAAC,KAAY,EAAA,EAAI,IAAI,CAAC,eAAe,CAAC,+BAA+B,GAAG,KAAK,CAAC,CAAC;IAElH,IAAI,yBAAyB,GAAA,EAAY,OAAO,IAAI,CAAC,eAAe,CAAC,yBAAyB,CAAC,CAAC;AAChG,IAAA,IAAI,yBAAyB,CAAC,KAAY,EAAA,EAAI,IAAI,CAAC,eAAe,CAAC,yBAAyB,GAAG,KAAK,CAAC,CAAC;IAEtG,IAAI,8BAA8B,GAAA,EAAY,OAAO,IAAI,CAAC,eAAe,CAAC,8BAA8B,CAAC,CAAC;AAC1G,IAAA,IAAI,8BAA8B,CAAC,KAAY,EAAA,EAAI,IAAI,CAAC,eAAe,CAAC,8BAA8B,GAAG,KAAK,CAAC,CAAC;IAEhH,IAAI,wBAAwB,GAAA,EAAa,OAAO,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC,CAAC;AAC/F,IAAA,IAAI,wBAAwB,CAAC,KAAa,EAAA,EAAI,IAAI,CAAC,eAAe,CAAC,wBAAwB,GAAG,KAAK,CAAC,CAAC;IAErG,IAAI,cAAc,GAAA,EAAc,OAAO,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;AAC5E,IAAA,IAAI,cAAc,CAAC,KAAc,EAAA,EAAI,IAAI,CAAC,eAAe,CAAC,cAAc,GAAG,KAAK,CAAC,CAAC;IAElF,IAAI,kCAAkC,GAAA,EAAc,OAAO,IAAI,CAAC,eAAe,CAAC,kCAAkC,CAAC,CAAC;AACpH,IAAA,IAAI,kCAAkC,CAAC,KAAc,EAAA,EAAI,IAAI,CAAC,eAAe,CAAC,kCAAkC,GAAG,KAAK,CAAC,CAAC;IAE1H,IAAI,aAAa,GAAA,EAAc,OAAO,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;AAC1E,IAAA,IAAI,aAAa,CAAC,KAAc,EAAA,EAAI,IAAI,CAAC,eAAe,CAAC,aAAa,GAAG,KAAK,CAAC,CAAC;IAEhF,IAAI,aAAa,GAAA,EAAK,OAAO,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;AACjE,IAAA,IAAI,aAAa,CAAC,KAAU,EAAA,EAAI,IAAI,CAAC,eAAe,CAAC,aAAa,GAAG,KAAK,CAAC,CAAC;IAE5E,IAAI,aAAa,GAAA,EAAK,OAAO,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;AACjE,IAAA,IAAI,aAAa,CAAC,KAAU,EAAA,EAAI,IAAI,CAAC,eAAe,CAAC,aAAa,GAAG,KAAK,CAAC,CAAC;IAE5E,IAAI,iBAAiB,GAAA,EAAK,OAAO,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;AACzE,IAAA,IAAI,iBAAiB,CAAC,KAAY,EAAA,EAAI,IAAI,CAAC,eAAe,CAAC,iBAAiB,GAAG,KAAK,CAAC,CAAC;IAEtF,IAAI,cAAc,GAAA,EAAc,OAAO,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;AAC5E,IAAA,IAAI,cAAc,CAAC,KAAc,EAAA,EAAI,IAAI,CAAC,eAAe,CAAC,cAAc,GAAG,KAAK,CAAC,CAAC;IAElF,IAAI,iBAAiB,GAAA,EAAc,OAAO,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;AAClF,IAAA,IAAI,iBAAiB,CAAC,KAAc,EAAA,EAAI,IAAI,CAAC,eAAe,CAAC,iBAAiB,GAAG,KAAK,CAAC,CAAC;IAExF,IAAI,YAAY,GAAA,EAAc,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;AACxE,IAAA,IAAI,YAAY,CAAC,KAAc,EAAA,EAAI,IAAI,CAAC,eAAe,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC;IAE9E,IAAI,qBAAqB,GAAA,EAAc,OAAO,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC;AAC1F,IAAA,IAAI,qBAAqB,CAAC,KAAc,EAAA,EAAI,IAAI,CAAC,eAAe,CAAC,qBAAqB,GAAG,KAAK,CAAC,CAAC;IAEhG,IAAI,iBAAiB,GAAA,EAAc,OAAO,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;AAClF,IAAA,IAAI,iBAAiB,CAAC,KAAc,EAAA,EAAI,IAAI,CAAC,eAAe,CAAC,iBAAiB,GAAG,KAAK,CAAC,CAAC;IAExF,IAAI,eAAe,GAAA,EAAK,OAAO,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;AACrE,IAAA,IAAI,eAAe,CAAC,KAAU,EAAA,EAAI,IAAI,CAAC,eAAe,CAAC,eAAe,GAAG,KAAK,CAAC,CAAC;IAEhF,IAAI,sBAAsB,GAAA,EAAK,OAAO,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC;AACnF,IAAA,IAAI,sBAAsB,CAAC,KAAY,EAAA,EAAI,IAAI,CAAC,eAAe,CAAC,sBAAsB,GAAG,KAAK,CAAC,CAAC;IAEhG,IAAI,sBAAsB,GAAA,EAAK,OAAO,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC;AACnF,IAAA,IAAI,sBAAsB,CAAC,KAAU,EAAA,EAAI,IAAI,CAAC,eAAe,CAAC,sBAAsB,GAAG,KAAK,CAAC,CAAC;IAE9F,IAAI,wBAAwB,GAAA,EAAK,OAAO,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC,CAAC;AACvF,IAAA,IAAI,wBAAwB,CAAC,KAAU,EAAA,EAAI,IAAI,CAAC,eAAe,CAAC,wBAAwB,GAAG,KAAK,CAAC,CAAC;IAElG,IAAI,+BAA+B,GAAA,EAAK,OAAO,IAAI,CAAC,eAAe,CAAC,+BAA+B,CAAC,CAAC;AACrG,IAAA,IAAI,+BAA+B,CAAC,KAAY,EAAA,EAAI,IAAI,CAAC,eAAe,CAAC,+BAA+B,GAAG,KAAK,CAAC,CAAC;IAOlH,QAAQ,GAAA;;AAEN,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,IAAG;;YAEnD,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,KAAK,YAAY,IAAI,IAAI,CAAC,iBAAiB,EAAE,IAAI,EAAE,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;;gBAE5G,IAAI,CAAC,iBAAiB,GAAG;oBACvB,GAAG,IAAI,CAAC,iBAAiB;oBACzB,QAAQ,EAAE,IAAI,CAAC;iBAChB;YACH;iBAAO;;AAEL,gBAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC;YACpC;QACF,CAAC,CAAC,CACH;QAED,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAI;YAC5E,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC;QACnD,CAAC,CAAC,CACH;QAED,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,KAAI;YAC9E,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC;;YAGjD,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,KAAK,YAAY,IAAI,IAAI,CAAC,iBAAiB,EAAE,IAAI,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE,EAAE;AACvG,gBAAA,MAAM,QAAQ,GAAG,IAAI,KAAK;AACxB,sBAAE,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACpD,sBAAE,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAErD,IAAI,CAAC,iBAAiB,GAAG;oBACvB,GAAG,IAAI,CAAC,iBAAiB;AACzB,oBAAA,QAAQ,EAAE;iBACX;YACH;QACF,CAAC,CAAC,CACH;;AAGD,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,IAAG;AACpD,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC;QAClC,CAAC,CAAC,CACH;AAED,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,IAAG;AAC9D,YAAA,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC;QACrC,CAAC,CAAC,CACH;;;QAID,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,CACtCC,QAAM,CAAC,CAAC,QAAa,KAAK,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,EAClD,oBAAoB,CAAC,CAAC,IAAS,EAAE,IAAS,KAAK,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CACxF,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;;;AAG5B,YAAA,IAAI,IAAI,CAAC,GAAG,EAAE;AACZ,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,gBAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,EAAE;AACnD,gBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAC9C,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE;AACrC,gBAAA,OAAO,CAAC,GAAG,CAAC,CAAC,iBAAiB,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACxE,oBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACxB,gBAAA,CAAC,CAAC;YACJ;QACF,CAAC,CAAC,CACH;AAED,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,EAAE;AACnD,QAAA,IAAI,CAAC,0BAA0B,EAAE,CAAC;AAClC,QAAA,IAAI,CAAC,yBAAyB,EAAE,CAAC;;AAGjC,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACb,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE;AAC1B,gBAAA,WAAW,EAAE,KAAK;AAClB,gBAAA,kBAAkB,EAAE;AACrB,aAAA,CAAC;AAEF,YAAA,CAAC,CAAC,SAAS,CAAC,oDAAoD,EAAE;AAChE,gBAAA,WAAW,EAAE,yFAAyF;AACtG,gBAAA,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC3B,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,OAAO,EAAE,CAAC;AACV,gBAAA,WAAW,EAAE,IAAI;;AAEjB,gBAAA,cAAc,EAAE,IAAI;AACpB,gBAAA,iBAAiB,EAAE,KAAK;AACxB,gBAAA,UAAU,EAAE;AACb,aAAA,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AAElB,YAAA,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;AACpB,gBAAA,QAAQ,EAAE;AACX,aAAA,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AAElB,YAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;;YAGzD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAM,KAAI;;AAE9B,gBAAA,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,kBAAkB,CAAC;AAC/F,YAAA,CAAC,CAAC;;YAGF,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAU,KAAI;;;AAGlC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,6BAA6B,EAAE;AACvD,YAAA,CAAC,CAAC;;AAGF,YAAA,IAAK,CAAS,CAAC,kBAAkB,EAAE;;AAEjC,gBAAA,IAAI,CAAC,oBAAoB,GAAI,CAAS,CAAC,kBAAkB,CAAC;AACxD,oBAAA,gBAAgB,EAAE,EAAE;AACpB,oBAAA,iBAAiB,EAAE,IAAI;AACvB,oBAAA,mBAAmB,EAAE,IAAI;AACzB,oBAAA,mBAAmB,EAAE,IAAI;AACzB,oBAAA,kBAAkB,EAAE,CAAC,OAAY,KAAI;AACnC,wBAAA,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,EAAE;wBACrC,IAAI,IAAI,GAAG,OAAO;wBAClB,IAAI,KAAK,IAAI,GAAG;4BAAE,IAAI,GAAG,OAAO;6BAC3B,IAAI,KAAK,IAAI,EAAE;4BAAE,IAAI,GAAG,QAAQ;wBAErC,OAAO,CAAC,CAAC,OAAO,CAAC;4BACf,IAAI,EAAE,CAAA,WAAA,EAAc,KAAK,CAAA,aAAA,CAAe;4BACxC,SAAS,EAAE,CAAA,sDAAA,EAAyD,IAAI,CAAA,CAAE;4BAC1E,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE;AACzB,yBAAA,CAAC;oBACJ;AACD,iBAAA,CAAC;gBAEF,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC;;AAG5C,gBAAA,IAAI,CAAC,kBAAkB,GAAI,CAAS,CAAC,kBAAkB,CAAC;AACtD,oBAAA,gBAAgB,EAAE,EAAE;AACpB,oBAAA,iBAAiB,EAAE,IAAI;AACvB,oBAAA,mBAAmB,EAAE,IAAI;AACzB,oBAAA,mBAAmB,EAAE,IAAI;AACzB,oBAAA,kBAAkB,EAAE,CAAC,OAAY,KAAI;AACnC,wBAAA,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,EAAE;wBACrC,IAAI,IAAI,GAAG,OAAO;wBAClB,IAAI,KAAK,IAAI,GAAG;4BAAE,IAAI,GAAG,OAAO;6BAC3B,IAAI,KAAK,IAAI,EAAE;4BAAE,IAAI,GAAG,QAAQ;wBAErC,OAAO,CAAC,CAAC,OAAO,CAAC;4BACf,IAAI,EAAE,CAAA,WAAA,EAAc,KAAK,CAAA,aAAA,CAAe;4BACxC,SAAS,EAAE,CAAA,oDAAA,EAAuD,IAAI,CAAA,CAAE;4BACxE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE;AACzB,yBAAA,CAAC;oBACJ;AACD,iBAAA,CAAC;gBAEF,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC;YAC5C;QACF;;AAGA,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAC9B,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC;QAC/D;;AAGA,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;YAC5B,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,SAAS,CAAa,QAAQ,EAAE,WAAW;AACxC,iBAAA,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AACtB,iBAAA,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAC/C;QACH;AAEA,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAC9C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE;AACrC,QAAA,OAAO,CAAC,GAAG,CAAC,CAAC,iBAAiB,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,MAAK;AACvE,QAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACxB,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,sBAAsB,EAAE;IAC/B;IAEA,kBAAkB,GAAA;AAChB,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC1E,YAAA,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,IAAI;AAC1C,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC5E,YAAA,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,IAAI;AAC3C,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACxE,YAAA,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,IAAI;AACzC,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,kBAAkB,EAAE,oBAAoB,EAAE,mBAAmB,CAAC,CAAC;IACrF;IAEO,uBAAuB,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,6BAA6B,EAAE,EAAE,EAAE,EAAE,CAAC;IACxE;IAEO,yBAAyB,GAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,0BAA0B,EAAE,EAAE,EAAE,EAAE,CAAC;IACrE;IAEO,wBAAwB,GAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,yBAAyB,EAAE,EAAE,EAAE,EAAE,CAAC;IACpE;IAEA,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE;SACR;AACD,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;AAEtE,QAAA,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AACzC,YAAA,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI,IAAI,EAAE;AAC/B,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC;AACzC,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC;AAC5C,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC;AACrC,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC;AACnC,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,iBAAiB,CAAC;AACnD,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC;AACvC,QAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACxB,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,gBAAgB,CAAC,eAAe,GAAG,EAAE;AAC1C,QAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,GAAG,EAAE;AAExC,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,EAAE;AAC7C,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,cAAc,EAAE;AAC/C,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,EAAE;AAC3C,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAI;AAC5F,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;YAC3B,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;AACzC,YAAA,IAAI,CAAC,WAAW,GAAG,WAAW;;AAG9B,YAAA,MAAM,SAAS,GAAG,IAAI,GAAG,EAAE;YAC3B,CAAC,GAAG,WAAW,CAAC,CAAC,OAAO,CAAC,MAAM,IAAG;AAChC,gBAAA,IAAI,MAAM,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;oBAC1C,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;gBAClC;AACF,YAAA,CAAC,CAAC;YACF,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;;YAGpD,IAAI,CAAC,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,MAAM;AACxF,YAAA,IAAI,CAAC,iBAAiB,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,MAAM;AAExF,YAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAC9B,aAAa,EACb,SAAS,EACT,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,eAAe,CAAC,eAAe,EACpC,IAAI,CAAC,eAAe,CAAC,iBAAiB,CACvC;;YAGD,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,eAAe,EAAE;AACxB,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;;AAET,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY;aACpC,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,KAAI;;AAEjC,YAAA,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,WAAW,CAAC;;YAGhD,IAAI,gBAAgB,GAAG,OAAO;YAC9B,IAAI,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC5D,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAW,KAAI;AAChD,oBAAA,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,IAAI,EAAE;AAC/C,oBAAA,OAAO,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC,IAAI,CAAC,YAAY,IACpE,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,CACnC;AACH,gBAAA,CAAC,CAAC;YACJ;;YAGA,IAAI,IAAI,CAAC,eAAe,CAAC,wBAAwB,KAAK,QAAQ,EAAE;AAC9D,gBAAA,gBAAgB,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,MAAW,KAAK,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC;YACvF;iBAAO,IAAI,IAAI,CAAC,eAAe,CAAC,wBAAwB,KAAK,SAAS,EAAE;AACtE,gBAAA,gBAAgB,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,MAAW,KAAK,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC;YACxF;AAEA,YAAA,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE;AACnC,QAAA,CAAC,CAAC;IACN;IAEA,cAAc,GAAA;;QAEZ,IAAI,eAAe,GAAQ,EAAE;QAC7B,IAAI,IAAI,CAAC,eAAe,CAAC,0BAA0B,CAAC,MAAM,GAAG,CAAC,EAAE;;AAE9D,YAAA,MAAM,YAAY,GAAG;AACnB,gBAAA,QAAQ,EAAE,gBAAgB;AAC1B,gBAAA,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,0BAA0B;AACtD,gBAAA,UAAU,EAAE,qBAAqB;AACjC,gBAAA,IAAI,EAAE;aACP;AACD,YAAA,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC;QACpC;QACA,IAAI,IAAI,CAAC,eAAe,CAAC,+BAA+B,CAAC,MAAM,GAAG,CAAC,EAAE;;AAEnE,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC;iBACtC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;iBAC1C,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAEpB,YAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1B,gBAAA,MAAM,WAAW,GAAG;AAClB,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,KAAK,EAAE,WAAW;AAClB,oBAAA,UAAU,EAAE,aAAa;AACzB,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,IAAI,EAAE;iBACP;AACD,gBAAA,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC;YACnC;QACF;;AAGA,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,KAAI;AACjF,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;;YAG1B,IAAI,IAAI,CAAC,eAAe,CAAC,wBAAwB,KAAK,QAAQ,EAAE;AAC9D,gBAAA,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,QAAa,KAAK,QAAQ,CAAC,0BAA0B,KAAK,QAAQ,CAAC;YAC3G;iBAAO,IAAI,IAAI,CAAC,eAAe,CAAC,wBAAwB,KAAK,SAAS,EAAE;AACtE,gBAAA,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,QAAa,KAAK,QAAQ,CAAC,0BAA0B,KAAK,QAAQ,CAAC;YAC3G;AAEA,YAAA,IAAI,CAAC,UAAU,GAAG,aAAa;;AAG/B,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,MAAM;YACjI,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,MAAM;AAEjI,YAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAC9B,IAAI,CAAC,UAAU,EACf,UAAU,EACV,IAAI,CAAC,oBAAoB,EACzB,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,eAAe,CAAC,eAAe,EACpC,IAAI,CAAC,eAAe,CAAC,iBAAiB,CACvC;AACH,QAAA,CAAC,CAAC;IACJ;IAEA,YAAY,GAAA;;QAEV,IAAI,cAAc,GAAQ,EAAE;QAC5B,IAAI,IAAI,CAAC,eAAe,CAAC,yBAAyB,CAAC,MAAM,GAAG,CAAC,EAAE;;AAE7D,YAAA,MAAM,YAAY,GAAG;AACnB,gBAAA,QAAQ,EAAE,gBAAgB;AAC1B,gBAAA,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,yBAAyB;AACrD,gBAAA,UAAU,EAAE,oBAAoB;AAChC,gBAAA,IAAI,EAAE;aACP;AACD,YAAA,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC;QACnC;QACA,IAAI,IAAI,CAAC,eAAe,CAAC,8BAA8B,CAAC,MAAM,GAAG,CAAC,EAAE;;AAElE,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC;iBACrC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;iBACxC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAEpB,YAAA,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACzB,gBAAA,MAAM,WAAW,GAAG;AAClB,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,KAAK,EAAE,UAAU;AACjB,oBAAA,UAAU,EAAE,YAAY;AACxB,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,IAAI,EAAE;iBACP;AACD,gBAAA,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;YAClC;QACF;;AAGA,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAI;AACzE,YAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AAC1B,QAAA,CAAC,CAAC;IACJ;;AAGA,IAAA,UAAU,CAAC,IAAW,EAAE,IAAY,EAAE,cAAuB,KAAK,EAAA;AAChE,QAAA,MAAM,YAAY,GAAG,IAAI,KAAK,UAAU,GAAG,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,kBAAkB;AAE9F,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAC9C,IAAI,EACJ,IAAI,EACJ,YAAY,EACZ,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,eAAe,CAAC,eAAe,EACpC,IAAI,CAAC,eAAe,CAAC,iBAAiB,CACvC;;;AAID,QAAA,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACrF,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACxD,gBAAA,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC;AACrG,gBAAA,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;oBACzB,MAAM,KAAK,GAAG,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC;;;oBAGxC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE;AACxC,oBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,EAAE,CAAC;AAChD,oBAAA,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;gBACjE;YACF;QACF;IACF;IAEA,SAAS,GAAA;QACP,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,KAAI;;AAE9C,YAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE;AAChC,gBAAA,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,IAAG;;;;AAIvB,oBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,oBAAA,IAAI,aAAa;AAEjB,oBAAA,IAAI,MAAM,GAAG,GAAG,EAAE;;wBAEhB,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;oBACzC;AAAO,yBAAA,IAAI,MAAM,GAAG,GAAG,EAAE;;wBAEvB,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;oBACzC;yBAAO;;wBAEL,aAAa,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG;oBAC3C;;oBAGA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,OAAO,CAAC;oBAEzD,OAAO;AACL,wBAAA,GAAG,IAAI;AACP,wBAAA,aAAa,EAAE,aAAa;AAC5B,wBAAA,WAAW,EAAE;qBACd;AACH,gBAAA,CAAC,CAAC;YACJ;AAEA,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;;YAElB,IAAI,IAAI,CAAC,eAAe,CAAC,yBAAyB,CAAC,MAAM,KAAK,CAAC;AAC3D,gBAAA,IAAI,CAAC,eAAe,CAAC,8BAA8B,CAAC,MAAM,KAAK,CAAC;AAChE,gBAAA,IAAI,CAAC,eAAe,CAAC,0BAA0B,CAAC,MAAM,KAAK,CAAC;AAC5D,gBAAA,IAAI,CAAC,eAAe,CAAC,+BAA+B,CAAC,MAAM,KAAK,CAAC;gBACjE,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9D,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;YAC5B;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,YAAY,GAAA;QACV,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAI;AACpD,YAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;;AAGxB,YAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,yBAAyB,CAAC,mCAAmC,CAAC,IAAI,CAAC,QAAQ,CAAC;;YAGnH,IAAI,IAAI,CAAC,eAAe,CAAC,yBAAyB,CAAC,MAAM,KAAK,CAAC;AAC3D,gBAAA,IAAI,CAAC,eAAe,CAAC,8BAA8B,CAAC,MAAM,KAAK,CAAC;AAChE,gBAAA,IAAI,CAAC,eAAe,CAAC,0BAA0B,CAAC,MAAM,KAAK,CAAC;AAC5D,gBAAA,IAAI,CAAC,eAAe,CAAC,+BAA+B,CAAC,MAAM,KAAK,CAAC;AACjE,gBAAA,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC,MAAM,KAAK,CAAC;AAC1D,gBAAA,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE;AAC9C,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC;YACxC;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW,KAAI;AAC1D,YAAA,IAAI,CAAC,WAAW,GAAG,WAAW;;;AAI9B,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE;AAC1E,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC;YACxC;AACF,QAAA,CAAC,CAAC;IACJ;;AAGA,IAAA,SAAS,CAAC,KAAY,EAAA;QACpB,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAChC,IAAI,CAAC,GAAG,EACR,KAAK,EACL,IAAI,CAAC,eAAe,CAAC,eAAe,EACpC,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,eAAe,CAAC,YAAY,CAClC;IACH;IAEA,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE;AAEvC,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE;;AAE1C,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE;gBAC1C,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,IAAG;AACrD,oBAAA,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC;AAC5B,oBAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,wBAAA,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAC5C;AACF,gBAAA,CAAC,CAAC;YACJ;AACA,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE;gBACvC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,IAAG;AACnD,oBAAA,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC;AAC5B,oBAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,wBAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAC1C;AACF,gBAAA,CAAC,CAAC;YACJ;QACF;aAAO;;AAEL,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE;gBAC1C,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,IAAG;AACrD,oBAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,wBAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,MAAM,CAAC;oBAC/C;AACA,oBAAA,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AACxB,gBAAA,CAAC,CAAC;YACJ;AACA,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE;gBACvC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,IAAG;AACnD,oBAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,wBAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,MAAM,CAAC;oBAC7C;AACA,oBAAA,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AACxB,gBAAA,CAAC,CAAC;YACJ;QACF;IACF;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC;IAC7F;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;QAClC,IAAI,CAAC,UAAU,EAAE;IACnB;IAEA,sBAAsB,GAAA;QACpB,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC7D,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,YAAY;IACjE;;IAGA,gBAAgB,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE;AACZ,YAAA,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,OAAO,EAAE;AAClC,YAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE;QAC7B;IACF;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE;AACZ,YAAA,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,EAAE;AACjC,YAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE;QAC5B;IACF;IAEA,sBAAsB,GAAA;QACpB,OAAO,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CACrD,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,sBAAsB,EAC3B,IAAI,CAAC,uBAAuB,CAC7B;IACH;IAEA,oBAAoB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,CACnD,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,eAAe,CAAC,eAAe,EACpC,IAAI,CAAC,sBAAsB,EAC3B,IAAI,CAAC,uBAAuB,CAC7B;IACH;IAEA,YAAY,GAAA;AACV,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,uBAAuB,CAAC,MAAM,GAAG,CAAC;QAEpG,IAAI,CAAC,UAAU,EAAE;;YAEf,IAAI,CAAC,cAAc,EAAE;AACrB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;YAC1B;QACF;AAEA,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,sBAAsB,EAAE;AACzD,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,EAAE;;AAGrD,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE;QACzC;AACA,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,YAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE;QACvC;;QAGA,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,MAAW,KAAI;YAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;YACnD,IAAI,UAAU,IAAI,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;gBACrD,IAAI,IAAI,CAAC,eAAe,CAAC,iBAAiB,IAAI,IAAI,CAAC,oBAAoB,EAAE;AACvE,oBAAA,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC5C;qBAAO;AACL,oBAAA,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;gBACxB;YACF;AACF,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,MAAW,KAAI;YAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;YAC/C,IAAI,QAAQ,IAAI,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;gBAC/C,IAAI,IAAI,CAAC,eAAe,CAAC,iBAAiB,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACrE,oBAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC1C;qBAAO;AACL,oBAAA,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;gBACxB;YACF;AACF,QAAA,CAAC,CAAC;;QAGF,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,IAAG;AACnD,YAAA,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;AAC5B,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,mBAAmB,CAAC,YAAY,GAAG,EAAE;;AAG1C,QAAA,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC;;QAGzC,IAAI,IAAI,CAAC,eAAe,CAAC,qBAAqB,IAAI,IAAI,CAAC,wBAAwB,EAAE,EAAE;AACjF,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC;QACxC;IACF;IAEA,cAAc,GAAA;;AAEZ,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE;QACzC;AACA,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,YAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE;QACvC;;QAGA,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,MAAW,KAAI;YAC5D,IAAI,IAAI,CAAC,eAAe,CAAC,iBAAiB,IAAI,IAAI,CAAC,oBAAoB,EAAE;AACvE,gBAAA,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC5C;iBAAO;AACL,gBAAA,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;YACxB;AACF,QAAA,CAAC,CAAC;;QAGF,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,MAAW,KAAI;YAC1D,IAAI,IAAI,CAAC,eAAe,CAAC,iBAAiB,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACrE,gBAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC1C;iBAAO;AACL,gBAAA,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;YACxB;AACF,QAAA,CAAC,CAAC;;QAGF,IAAI,IAAI,CAAC,eAAe,CAAC,qBAAqB,IAAI,IAAI,CAAC,wBAAwB,EAAE,EAAE;AACjF,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC;QACxC;IACF;;AAGA,IAAA,iBAAiB,CAAC,iBAA8B,EAAA;QAC9C,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CACxC,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,KAAK,EACV,iBAAiB,EACjB,IAAI,CAAC,eAAe,CAAC,eAAe,EACpC,IAAI,CAAC,eAAe,CAAC,YAAY,CAClC;IACH;;AAGA,IAAA,kBAAkB,CAAC,QAAe,EAAE,iBAAA,GAA6B,KAAK,EAAA;AACpE,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CACrE,IAAI,CAAC,GAAG,EACR,QAAQ,EACR,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,eAAe,CAAC,iBAAiB,EACtC,IAAI,CAAC,eAAe,CAAC,eAAe,EACpC,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,eAAe,CAAC,yBAAyB,EAC9C,IAAI,CAAC,eAAe,CAAC,8BAA8B,EACnD,IAAI,CAAC,eAAe,CAAC,sBAAsB,EAC3C,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAC1C,IAAI,CAAC,eAAe,CAAC,wBAAwB,EAAE,EAC/C,CAAC,OAAgB,KAAK,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CACxD;;;AAID,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,wBAAwB,EAAE,EAAE;AACnD,YAAA,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,GAAG,mBAAmB;AAC5D,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAChC;aAAO;;AAEL,YAAA,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,KAAK,EAAE;QAChD;IACF;;;AAIA,IAAA,mBAAmB,CAAC,OAAgB,EAAA;AAClC,QAAA,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,kBAAkB,CAAC;IACxG;;AAGA,IAAA,kBAAkB,CAAC,cAAmB,EAAE,OAAA,GAAkB,GAAG,EAAA;AAC3D,QAAA,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,kBAAkB,CAAC;IACvH;;IAGA,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,kBAAkB,CAAC;IAC9F;IAEA,oBAAoB,GAAA;;AAElB,QAAA,IAAI,IAAI,CAAC,wBAAwB,EAAE,EAAE;AACnC,YAAA,IAAI,CAAC,eAAe,CAAC,eAAe,GAAG,IAAI;AAC3C,YAAA,IAAI,CAAC,eAAe,CAAC,sBAAsB,GAAG,EAAE;AAChD,YAAA,IAAI,CAAC,eAAe,CAAC,wBAAwB,GAAG,IAAI;AACpD,YAAA,IAAI,CAAC,eAAe,CAAC,+BAA+B,GAAG,EAAE;YACzD,IAAI,CAAC,mBAAmB,EAAE;QAC5B;QAEA,IAAI,CAAC,eAAe,CAAC,qBAAqB,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,qBAAqB;AAExF,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE;;YAE9C,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;QAC/C;aAAO;;YAEL,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,IAAG;AACzD,gBAAA,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;AAC5B,YAAA,CAAC,CAAC;QACJ;IACF;IAEA,aAAa,GAAA;QACX,IAAI,CAAC,eAAe,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc;QAC1E,IAAI,CAAC,YAAY,EAAE;IACrB;IAEA,gBAAgB,GAAA;QACd,IAAI,CAAC,eAAe,CAAC,iBAAiB,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,iBAAiB;QAChF,IAAI,CAAC,eAAe,EAAE;IACxB;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE;;YAEvC,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE;gBACrE,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;YACzC;iBAAO;gBACL,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC/E;QACF;aAAO;;YAEL,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE;gBACrE,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC;YAC/C;iBAAO;gBACL,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACrF;QACF;IACF;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE;;YAE1C,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE;gBACvE,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;YAC3C;iBAAO;gBACL,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjF;QACF;aAAO;;YAEL,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE;gBACvE,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,oBAAoB,CAAC;YACjD;iBAAO;gBACL,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACvF;QACF;IACF;;AAGA,IAAA,mBAAmB,CAAC,MAAW,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI;IACrE;AAEA,IAAA,iBAAiB,CAAC,MAAW,EAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI;IACnE;AAGA,IAAA,gBAAgB,CAAC,KAAW,EAAA;QAC1BC,OAAK,CAAC,MAAK;AACT,YAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI;YACpCA,OAAK,CAAC,MAAK;gBACT,IAAI,CAAC,oBAAoB,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE;AAC3D,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,iBAAiB,CAAC,KAAW,EAAA;AAC3B,QAAA,IAAI,CAAC,wBAAwB,GAAG,KAAK;IACvC;AAGA,IAAA,kBAAkB,CAAC,KAAW,EAAA;QAC5BA,OAAK,CAAC,MAAK;AACT,YAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI;YACtCA,OAAK,CAAC,MAAK;gBACT,IAAI,CAAC,sBAAsB,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE;AAC7D,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,mBAAmB,CAAC,KAAW,EAAA;AAC7B,QAAA,IAAI,CAAC,0BAA0B,GAAG,KAAK;IACzC;AAGA,IAAA,iBAAiB,CAAC,KAAW,EAAA;QAC3BA,OAAK,CAAC,MAAK;AACT,YAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;YACrCA,OAAK,CAAC,MAAK;gBACT,IAAI,CAAC,qBAAqB,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE;AAC5D,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,kBAAkB,CAAC,KAAW,EAAA;AAC5B,QAAA,IAAI,CAAC,yBAAyB,GAAG,KAAK;IACxC;AAEA,IAAA,0BAA0B,CAAC,KAAW,EAAA;QACpCA,OAAK,CAAC,MAAK;AACT,YAAA,IAAI,CAAC,eAAe,CAAC,kCAAkC,GAAG,IAAI;YAC9DA,OAAK,CAAC,MAAK;AACT,gBAAA,IAAI,CAAC,8BAA8B,EAAE,aAAa,EAAE,KAAK,EAAE;AAC7D,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,2BAA2B,CAAC,KAAW,EAAA;AACrC,QAAA,IAAI,CAAC,eAAe,CAAC,kCAAkC,GAAG,KAAK;IACjE;AAEA,IAAA,wBAAwB,CAAC,SAAkB,EAAA;QACzC,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,mBAAmB,EAAE;IAC5B;AAEA,IAAA,YAAY,CAAC,KAAK,EAAA;AAChB,QAAA,IAAI,CAAC,eAAe,CAAC,0BAA0B,GAAG,EAAE;AACpD,QAAA,IAAI,CAAC,eAAe,CAAC,+BAA+B,GAAG,EAAE;AACzD,QAAA,IAAI,CAAC,eAAe,CAAC,wBAAwB,GAAG,EAAE;AAClD,QAAA,IAAI,CAAC,eAAe,CAAC,yBAAyB,GAAG,EAAE;AACnD,QAAA,IAAI,CAAC,eAAe,CAAC,8BAA8B,GAAG,EAAE;AACxD,QAAA,IAAI,CAAC,eAAe,CAAC,wBAAwB,GAAG,KAAK;QACrD,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,mBAAmB,EAAE;IAC5B;AAEA,IAAA,4BAA4B,CAAC,UAAiB,EAAA;AAC5C,QAAA,IAAI,CAAC,eAAe,CAAC,wBAAwB,GAAG,UAAU;QAC1D,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,mBAAmB,EAAE;IAC5B;AAEA,IAAA,8BAA8B,CAAC,UAAiB,EAAA;AAC9C,QAAA,IAAI,CAAC,eAAe,CAAC,0BAA0B,GAAG,UAAU;QAC5D,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,mBAAmB,EAAE;IAC5B;AAEA,IAAA,+BAA+B,CAAC,UAAiB,EAAA;AAC/C,QAAA,IAAI,CAAC,eAAe,CAAC,+BAA+B,GAAG,UAAU;QACjE,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,mBAAmB,EAAE;IAC5B;AAEA,IAAA,0BAA0B,CAAC,MAAe,EAAA;AACxC,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,QAAQ,EAAE,MAAM;YAChB,MAAM,EAAE,MAAM,IAAI,EAAE;AACpB,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE;SACR;QACD,MAAM,OAAO,GAAgB,EAAE;QAC/B,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YAClC,OAAO,CAAC,IAAI,CAAC;AACX,gBAAA,UAAU,EAAE,MAAM;AAClB,gBAAA,QAAQ,EAAE,MAAM;gBAChB,KAAK,EAAE,MAAM,IAAI,GAAG;AACpB,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,IAAI,EAAE,WAAW;AAClB,aAAA,CAAC;QACJ;AACA,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;YACtE,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAa,KAAI;gBACxD,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,EAAE;gBACrD,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI;gBACrD,OAAO,QAAQ,CAAC,IAAI;AACtB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,uBAAuB,GAAG,eAAe;AAChD,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,6BAA6B,CAAC,UAAiB,EAAA;AAC7C,QAAA,IAAI,CAAC,eAAe,CAAC,yBAAyB,GAAG,UAAU;QAC3D,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,mBAAmB,EAAE;IAC5B;AAEA,IAAA,8BAA8B,CAAC,UAAiB,EAAA;AAC9C,QAAA,IAAI,CAAC,eAAe,CAAC,8BAA8B,GAAG,UAAU;QAChE,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,mBAAmB,EAAE;IAC5B;AAEA,IAAA,yBAAyB,CAAC,MAAe,EAAA;AACvC,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,QAAQ,EAAE,MAAM;YAChB,MAAM,EAAE,MAAM,IAAI,EAAE;AACpB,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE;SACR;QACD,MAAM,OAAO,GAAgB,EAAE;QAC/B,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YAClC,OAAO,CAAC,IAAI,CAAC;AACX,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,UAAU,EAAE,EAAE;AACd,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,IAAI,EAAE,WAAW;AAClB,aAAA,CAAC;QACJ;AACA,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;YACpE,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAY,KAAI;gBACvD,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE;gBACjD,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI;gBACjD,OAAO,OAAO,CAAC,IAAI;AACrB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,sBAAsB,GAAG,eAAe;AAC/C,QAAA,CAAC,CAAC;IACJ;IAEA,mBAAmB,GAAA;QACjB,IAAI,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC,MAAM,KAAK,CAAC;AAC1D,YAAA,IAAI,CAAC,eAAe,CAAC,0BAA0B,CAAC,MAAM,KAAK,CAAC;AAC5D,YAAA,IAAI,CAAC,eAAe,CAAC,+BAA+B,CAAC,MAAM,KAAK,CAAC;AACjE,YAAA,IAAI,CAAC,eAAe,CAAC,yBAAyB,CAAC,MAAM,KAAK,CAAC;AAC3D,YAAA,IAAI,CAAC,eAAe,CAAC,8BAA8B,CAAC,MAAM,KAAK,CAAC;AAChE,YAAA,IAAI,CAAC,eAAe,CAAC,wBAAwB,KAAK,KAAK,EAAE;AAC3D,YAAA,IAAI,CAAC,eAAe,CAAC,cAAc,GAAG,KAAK;QAC7C;aAAO;AACL,YAAA,IAAI,CAAC,eAAe,CAAC,cAAc,GAAG,IAAI;QAC5C;IACF;IAEA,wBAAwB,GAAA;;;QAGtB,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC;QACxE,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC;;AAG5E,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE;QACzC;AACA,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,YAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE;QACvC;QACA,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACjF,QAAA,IAAI,CAAC,mBAAmB,CAAC,YAAY,GAAG,EAAE;QAC1C,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACvF,QAAA,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,GAAG,EAAE;AAEhD,QAAA,IAAI,CAAC,gBAAgB,CAAC,eAAe,GAAG,EAAE;AAC1C,QAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,GAAG,EAAE;;AAGxC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE;AAErC,QAAA,UAAU,CAAC,IAAI,CAAC,MAAK;;YAEnB,kBAAkB,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,KAAI;AACxC,gBAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;oBAClD,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;gBACtD;AACF,YAAA,CAAC,CAAC;YACF,oBAAoB,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,KAAI;AAC1C,gBAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;oBACpD,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;gBACxD;AACF,YAAA,CAAC,CAAC;;YAGF,IAAI,CAAC,wBAAwB,EAAE;AACjC,QAAA,CAAC,CAAC;IACJ;IAEA,wBAAwB,GAAA;;QAGtB,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;QACnE,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;QAChE,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;;QAGlE,IAAI,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC,MAAM,KAAK,CAAC;AAC1D,YAAA,IAAI,CAAC,eAAe,CAAC,0BAA0B,CAAC,MAAM,KAAK,CAAC;AAC5D,YAAA,IAAI,CAAC,eAAe,CAAC,+BAA+B,CAAC,MAAM,KAAK,CAAC;AACjE,YAAA,IAAI,CAAC,eAAe,CAAC,yBAAyB,CAAC,MAAM,KAAK,CAAC;YAC3D,IAAI,CAAC,eAAe,CAAC,8BAA8B,CAAC,MAAM,KAAK,CAAC,EAAE;;YAEpE,IAAI,CAAC,cAAc,EAAE;;YAErB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,qBAAqB,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC,EAAE;AAC/G,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC;YACxC;YACA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACzB,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;YAC5B;YACA;QACF;;QAGA,IAAI,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1G,YAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAC9B,IAAI,CAAC,WAAW,EAChB,SAAS,EACT,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,eAAe,CAAC,eAAe,EACpC,IAAI,CAAC,eAAe,CAAC,iBAAiB,CACvC;AAED,YAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAC9B,IAAI,CAAC,UAAU,EACf,UAAU,EACV,IAAI,CAAC,oBAAoB,EACzB,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,eAAe,CAAC,eAAe,EACpC,IAAI,CAAC,eAAe,CAAC,iBAAiB,CACvC;QACH;;;AAIA,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE;QACzC;AACA,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,YAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE;QACvC;;QAGA,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,MAAW,KAAI;YAC5D,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC7B,gBAAA,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC;YAC9B;AACF,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,MAAW,KAAI;YAC1D,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC7B,gBAAA,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC;YAC9B;AACF,QAAA,CAAC,CAAC;;QAGF,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,0BAA0B,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,+BAA+B,CAAC,MAAM,GAAG,CAAC;QACvJ,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC,MAAM,GAAG,CAAC;QAChF,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,yBAAyB,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,8BAA8B,CAAC,MAAM,GAAG,CAAC;;QAGpJ,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;;AAExD,YAAA,MAAM,cAAc,GAAG,CAAC,gBAAgB,IAAI,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;;YAGvF,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE,EAAE;YACrI,MAAM,eAAe,GAAG,CAAC,iBAAiB,IAAI,mBAAmB,CAAC,GAAG,CAAC,eAAe,CAAC;;AAGtF,YAAA,IAAI,aAAa,GAAG,CAAC,eAAe;YACpC,IAAI,eAAe,EAAE;gBACnB,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,IAAI,OAAO,CAAC,IAAI;gBACrD,IAAI,SAAS,EAAE;oBACb,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,IAAS,KAAI;wBAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI;AACjD,wBAAA,OAAO,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC;AACxC,oBAAA,CAAC,CAAC;gBACJ;YACF;AAEA,YAAA,OAAO,cAAc,IAAI,eAAe,IAAI,aAAa;AAC3D,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU;AAC3C,QAAA,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU;;QAGzC,IAAI,iBAAiB,EAAE;;AAErB,YAAA,mBAAmB,CAAC,OAAO,CAAC,EAAE,IAAI,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;;AAE5D,YAAA,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;gBACnC,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE,EAAE;AACrI,gBAAA,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,EAAE,MAAM,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,OAAO,CAAC,MAAM;AAChF,gBAAA,IAAI,eAAe;AAAE,oBAAA,iBAAiB,CAAC,GAAG,CAAC,eAAe,CAAC;AAC3D,gBAAA,IAAI,aAAa;AAAE,oBAAA,iBAAiB,CAAC,GAAG,CAAC,aAAa,CAAC;AACzD,YAAA,CAAC,CAAC;QACJ;AAAO,aAAA,IAAI,eAAe,IAAI,gBAAgB,EAAE;;;;AAK9C,YAAA,gBAAgB,CAAC,OAAO,CAAC,OAAO,IAAG;AACjC,gBAAA,MAAM,eAAe,GAAG,IAAI,CAAC,yBAAyB,CAAC,oBAAoB,CACzE,OAAO,EACP,IAAI,CAAC,eAAe,CAAC,eAAe,EACpC,IAAI,CAAC,eAAe,CAAC,iBAAiB,EACtC,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,UAAU,CAChB;gBAED,IAAI,eAAe,EAAE;;AAEnB,oBAAA,IAAI,eAAe,CAAC,QAAQ,EAAE;AAC5B,wBAAA,iBAAiB,CAAC,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC;oBACjD;;AAEA,oBAAA,IAAI,eAAe,CAAC,MAAM,EAAE;AAC1B,wBAAA,iBAAiB,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC;oBAC/C;gBACF;AACF,YAAA,CAAC,CAAC;QACJ;aAAO;;AAEL,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,IAAI,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACzE;;QAGA,IAAI,eAAe,EAAE;;AAEnB,YAAA,iBAAiB,CAAC,OAAO,CAAC,EAAE,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1D;aAAO;;AAEL,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,IAAI,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACpE;;QAGA,IAAI,gBAAgB,EAAE;AACpB,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,IAAG;gBACpC,MAAM,mBAAmB,GAAG,UAAU,CAAC,SAAS,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE;AAC1E,gBAAA,IAAI,kBAAkB,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE;AAC/C,oBAAA,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,QAAQ,EAAE,EAAE,IAAI,UAAU,CAAC,UAAU;oBAC5F,IAAI,cAAc,EAAE;AAClB,wBAAA,iBAAiB,CAAC,GAAG,CAAC,cAAc,CAAC;oBACvC;;AAEA,oBAAA,IAAI,eAAe,IAAI,UAAU,CAAC,QAAQ,EAAE;AAC1C,wBAAA,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC;oBAC1C;gBACF;AACF,YAAA,CAAC,CAAC;QACJ;;QAGA,IAAI,eAAe,EAAE;AACnB,YAAA,gBAAgB,CAAC,OAAO,CAAC,OAAO,IAAG;gBACjC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,IAAI,OAAO,CAAC,IAAI;gBACrD,IAAI,SAAS,EAAE;AACb,oBAAA,SAAS,CAAC,OAAO,CAAC,CAAC,IAAS,KAAI;wBAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI;wBACjD,IAAI,QAAQ,EAAE;AACZ,4BAAA,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;wBAC/B;AACF,oBAAA,CAAC,CAAC;gBACJ;AACF,YAAA,CAAC,CAAC;QACJ;;QAGA,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,MAAW,KAAI;YAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;YACnD,IAAI,UAAU,IAAI,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;gBACnD,IAAI,IAAI,CAAC,eAAe,CAAC,iBAAiB,IAAI,IAAI,CAAC,oBAAoB,EAAE;AACvE,oBAAA,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC5C;qBAAO;AACL,oBAAA,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;gBACxB;YACF;AACF,QAAA,CAAC,CAAC;;QAGF,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,MAAW,KAAI;YAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;YAC/C,IAAI,QAAQ,IAAI,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;gBAC7C,IAAI,IAAI,CAAC,eAAe,CAAC,iBAAiB,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACrE,oBAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC1C;qBAAO;AACL,oBAAA,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;gBACxB;YACF;AACF,QAAA,CAAC,CAAC;;QAGF,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACjF,QAAA,IAAI,CAAC,mBAAmB,CAAC,YAAY,GAAG,EAAE;QAC1C,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACvF,QAAA,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,GAAG,EAAE;;QAGhD,IAAI,IAAI,CAAC,eAAe,CAAC,qBAAqB,IAAI,IAAI,CAAC,wBAAwB,EAAE,EAAE;;AAEjF,YAAA,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,KAAK,CAAC;QAClD;;QAGA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAG;AAC7C,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE;AACtC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE;AAClC,YAAA,OAAO,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;AACrE,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;IAC/B;IAEA,aAAa,CAAC,IAAyF,EAAE,IAAS,EAAA;;AAEhH,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE;YACxC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC;YAClE,IAAI,CAAC,kBAAkB,EAAE;AACzB,YAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,GAAG,IAAI;QAC7C;;AAGA,QAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACtB,YAAA,IAAI,CAAC,eAAe,CAAC,sBAAsB,GAAG,IAAI;AAClD,YAAA,IAAI,CAAC,eAAe,CAAC,eAAe,GAAG,IAAI;AAC3C,YAAA,IAAI,CAAC,eAAe,CAAC,sBAAsB,GAAG,EAAE;AAChD,YAAA,IAAI,CAAC,eAAe,CAAC,wBAAwB,GAAG,IAAI;AACpD,YAAA,IAAI,CAAC,eAAe,CAAC,+BAA+B,GAAG,EAAE;QAC3D;;AAGA,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;AAClC,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;AAEjC,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,GAAG,IAAI;AACzC,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,GAAG,IAAI;AACzC,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,GAAG,IAAI;;AAGzC,QAAA,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,EAAE,OAAO,IAAI,IAAI,EAAE,OAAO,EAAE;AACxD,YAAA,IAAI,CAAC,eAAe,CAAC,sBAAsB,GAAG;AAC5C,gBAAA,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;AAC1B,gBAAA,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC;aAC5B;;;AAID,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;;;AAInE,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC;;AAGtF,YAAA,IAAI,CAAC,eAAe,CAAC,aAAa,GAAG;AACnC,gBAAA,GAAG,IAAI;gBACP,WAAW;gBACX;aACD;;YAGD,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC;QAChD;;AAGA,QAAA,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,EAAE,IAAI,EAAE;AACrD,YAAA,IAAI,CAAC,eAAe,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC;;AAGxF,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC;YAC/D,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,GAAG,MAAM;AAC7C,gBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC;;AAEnC,gBAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;YACjC;QACF;aAAO;AACL,YAAA,IAAI,CAAC,eAAe,CAAC,iBAAiB,GAAG,EAAE;;AAE3C,YAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE;gBACzC,IAAI,CAAC,kBAAkB,EAAE;YAC3B;QACF;;QAGA,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE;QAC5B,CAAC,EAAE,GAAG,CAAC;IACT;IAEA,qBAAqB,GAAA;;AAEnB,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,IACzD,CAAC,QAAQ,CAAC,MAAM,KAAK,QAAQ,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAC3G;;AAGD,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,IACrD,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,CACnE;;AAGD,QAAA,IAAI,CAAC,yBAAyB,GAAG,EAAE;AACnC,QAAA,IAAI,CAAC,2BAA2B,GAAG,CAAC,GAAG,mBAAmB,CAAC;AAC3D,QAAA,IAAI,CAAC,sBAAsB,GAAG,EAAE;AAChC,QAAA,IAAI,CAAC,wBAAwB,GAAG,CAAC,GAAG,gBAAgB,CAAC;;AAGrD,QAAA,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;YAC9B,mBAAmB;YACnB;AACD,SAAA,CAAC;IACJ;IAEA,uBAAuB,GAAA;;AAErB,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,IACzD,CAAC,QAAQ,CAAC,MAAM,KAAK,QAAQ,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAC3G;;AAGD,QAAA,IAAI,CAAC,yBAAyB,GAAG,EAAE;AACnC,QAAA,IAAI,CAAC,2BAA2B,GAAG,CAAC,GAAG,mBAAmB,CAAC;AAC3D,QAAA,IAAI,CAAC,sBAAsB,GAAG,EAAE;AAChC,QAAA,IAAI,CAAC,wBAAwB,GAAG,EAAE;;AAGlC,QAAA,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;YAC9B,mBAAmB;AACnB,YAAA,gBAAgB,EAAE;AACnB,SAAA,CAAC;IACJ;IAEA,oBAAoB,GAAA;;AAElB,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,IACrD,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,CACnE;;AAGD,QAAA,IAAI,CAAC,yBAAyB,GAAG,EAAE;AACnC,QAAA,IAAI,CAAC,2BAA2B,GAAG,EAAE;AACrC,QAAA,IAAI,CAAC,sBAAsB,GAAG,EAAE;AAChC,QAAA,IAAI,CAAC,wBAAwB,GAAG,CAAC,GAAG,gBAAgB,CAAC;;AAGrD,QAAA,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;AAC9B,YAAA,mBAAmB,EAAE,EAAE;YACvB;AACD,SAAA,CAAC;IACJ;IAEA,8BAA8B,GAAA;;AAE5B,QAAA,IAAI,CAAC,0BAA0B,GAAG,EAAE;;AAGpC,QAAA,IAAI,CAAC,aAAa,CAAC,sBAAsB,EAAE,EAAE,CAAC;IAChD;AAEA,IAAA,kCAAkC,CAAC,MAAc,EAAA;AAC/C,QAAA,IAAI,CAAC,0BAA0B,GAAG,MAAM;IAC1C;AAEA,IAAA,iCAAiC,CAAC,MAAc,EAAA;AAC9C,QAAA,IAAI,CAAC,yBAAyB,GAAG,MAAM;QACvC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;QAE/C,IAAI,CAAC,WAAW,EAAE;;AAEhB,YAAA,IAAI,CAAC,2BAA2B,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,mBAAmB,IAAI,EAAE,CAAC,CAAC;QACzG;aAAO;;AAEL,YAAA,IAAI,CAAC,2BAA2B,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,mBAAmB,IAAI,EAAE,EAAE,MAAM,CAAC,QAAQ,IAChH,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CACnD;QACH;IACF;AAEA,IAAA,8BAA8B,CAAC,MAAc,EAAA;AAC3C,QAAA,IAAI,CAAC,sBAAsB,GAAG,MAAM;QACpC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;QAE/C,IAAI,CAAC,WAAW,EAAE;;AAEhB,YAAA,IAAI,CAAC,wBAAwB,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,gBAAgB,IAAI,EAAE,CAAC,CAAC;QACnG;aAAO;;AAEL,YAAA,IAAI,CAAC,wBAAwB,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,gBAAgB,IAAI,EAAE,EAAE,MAAM,CAAC,MAAM,IACxG,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CACjD;QACH;IACF;IAEA,qBAAqB,GAAA;;AAEnB,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC;AAC3F,QAAA,IAAI,CAAC,wBAAwB,GAAG,SAAS,CAAC;AAC1C,QAAA,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,EAAE,YAAY,CAAC;QAC3D,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;IAChE;IAEA,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,wBAAwB,GAAG,SAAS,CAAC;QAC1C,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC;QACtD,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IAC7D;IAEA,eAAe,GAAA;;QAEb,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,IAAG;YACrD,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAG;gBAClD,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,IAAI,OAAO,CAAC,SAAS;AAC1D,gBAAA,OAAO,SAAS,KAAK,OAAO,CAAC,EAAE;YACjC,CAAC,CAAC,CAAC,MAAM;YAET,OAAO;AACL,gBAAA,GAAG,OAAO;AACV,gBAAA,kBAAkB,EAAE;aACrB;AACH,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,oBAAoB,GAAG,oBAAoB;AAChD,QAAA,IAAI,CAAC,uBAAuB,GAAG,MAAM;AAErC,QAAA,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,EAAE,UAAU,CAAC;QACzD,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;IAC9D;IAEA,oBAAoB,CAAC,QAAe,EAAE,IAAY,EAAA;;AAEhD,QAAA,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,EAAE;YAChC,IAAI,CAAC,sBAAsB,EAAE;QAC/B;AAEA,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC,GAAG,QAAQ,CAAC;AACnC,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC;QACvB,IAAI,CAAC,sBAAsB,EAAE;IAC/B;IAEA,sBAAsB,GAAA;;AAEpB,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,cAAc;AAClC,QAAA,IAAI,IAAI,CAAC,cAAc,KAAK,YAAY,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE;AAC7E,YAAA,IAAI,IAAI,CAAC,wBAAwB,KAAK,SAAS,EAAE;AAC/C,gBAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC;YAChE;AAAO,iBAAA,IAAI,IAAI,CAAC,wBAAwB,KAAK,WAAW,EAAE;gBACxD,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YAC1G;;QAEF;;AAGA,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE;YAChC,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE;AACvD,YAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,IAC/B,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAChD,MAAM,CAAC,EAAE,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAC/C;QACH;;AAGA,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,QAAQ,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;gBACrC,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC;gBAC3C,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC;gBAE3C,IAAI,UAAU,GAAG,CAAC;AAClB,gBAAA,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS;oBAAE,UAAU,GAAG,CAAC;AACtD,qBAAA,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS;oBAAE,UAAU,GAAG,CAAC,CAAC;AAC5D,qBAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AACnC,oBAAA,UAAU,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC;gBAC3C;qBAAO;oBACL,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC;gBAC7D;AAEA,gBAAA,OAAO,IAAI,CAAC,uBAAuB,KAAK,KAAK,GAAG,UAAU,GAAG,CAAC,UAAU;AAC1E,YAAA,CAAC,CAAC;QACJ;AAEA,QAAA,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,MAAM;;AAGtC,QAAA,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,IAAI,CAAC,kBAAkB;AACtE,QAAA,MAAM,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC,kBAAkB;QACrD,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC;IAChE;AAEA,IAAA,wBAAwB,CAAC,MAAc,EAAA;AACrC,QAAA,IAAI,CAAC,gBAAgB,GAAG,MAAM;AAC9B,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,sBAAsB,EAAE;IAC/B;AAEA,IAAA,sBAAsB,CAAC,IAAY,EAAA;AACjC,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAC1B,IAAI,CAAC,sBAAsB,EAAE;IAC/B;AAEA,IAAA,sBAAsB,CAAC,IAAiD,EAAA;AACtE,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,MAAM;AACvC,QAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,SAAS;AAC7C,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,sBAAsB,EAAE;IAC/B;AAEA,IAAA,gCAAgC,CAAC,MAAuC,EAAA;AACtE,QAAA,IAAI,CAAC,wBAAwB,GAAG,MAAM;AACtC,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,sBAAsB,EAAE;IAC/B;AAEA,IAAA,IAAI,oBAAoB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC;IAClE;AAEA,IAAA,IAAI,qBAAqB,GAAA;AACvB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB;AACvC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc;QACnC,MAAM,KAAK,GAAa,EAAE;;AAG1B,QAAA,IAAI,KAAK,IAAI,CAAC,EAAE;AACd,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,EAAE;AAC/B,gBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACf;QACF;aAAO;;AAEL,YAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAEb,YAAA,IAAI,OAAO,GAAG,CAAC,EAAE;gBACf,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACjB;;AAGA,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC;AACtC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC;AAC5C,YAAA,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE;AACjC,gBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACf;AAEA,YAAA,IAAI,OAAO,GAAG,KAAK,GAAG,CAAC,EAAE;gBACvB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACjB;;AAGA,YAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QACnB;AAEA,QAAA,OAAO,KAAK;IACd;IAEA,iBAAiB,CAAC,MAAW,EAAE,IAAY,EAAA;;AAEzC,QAAA,IAAI,CAAC,sBAAsB,GAAG,MAAM;AACpC,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;;AAEhC,QAAA,IAAI,CAAC,kCAAkC,GAAG,KAAK;;AAE/C,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,EAAE,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE;QACxF,IAAI,CAAC,wBAAwB,GAAG,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;;AAG7F,QAAA,IAAI,CAAC,eAAe,CAAC,wBAAwB,GAAG,IAAI;AACpD,QAAA,IAAI,CAAC,eAAe,CAAC,+BAA+B,GAAG,EAAE;IAC3D;;AAGA,IAAA,WAAW,CAAC,KAAgB,EAAE,MAAW,EAAE,IAAY,EAAA;AACrD,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM;AAC3B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAE7B,QAAA,IAAI,KAAK,CAAC,YAAY,EAAE;AACtB,YAAA,KAAK,CAAC,YAAY,CAAC,aAAa,GAAG,MAAM;AACzC,YAAA,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACxD;;AAGA,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;QAC1C,UAAU,CAAC,MAAK;AACd,YAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;;YAEhC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC;QAChD,CAAC,EAAE,CAAC,CAAC;IACP;AAEA,IAAA,aAAa,CAAC,KAAgB,EAAA;QAC5B,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,KAAK,CAAC,YAAY,EAAE;AACtB,YAAA,KAAK,CAAC,YAAY,CAAC,UAAU,GAAG,MAAM;QACxC;;QAGA,MAAM,YAAY,GAAI,KAAK,CAAC,aAA6B,CAAC,OAAO,CAAC,gBAAgB,CAAC;QACnF,IAAI,YAAY,EAAE;AAChB,YAAA,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;QACzC;IACF;AAEA,IAAA,SAAS,CAAC,KAAgB,EAAA;QACxB,KAAK,CAAC,cAAc,EAAE;;QAGtB,MAAM,YAAY,GAAI,KAAK,CAAC,aAA6B,CAAC,OAAO,CAAC,gBAAgB,CAAC;QACnF,IAAI,YAAY,EAAE;AAChB,YAAA,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC;QAC5C;;QAGA,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,iBAAiB,CAAC;AAEjD,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB;QACF;;QAGA,MAAM,UAAU,GAAG,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC;QACrD,IAAI,CAAC,UAAU,EAAE;YACf;QACF;;AAGA,QAAA,MAAM,IAAI,GAAG,UAAU,CAAC,qBAAqB,EAAE;;QAG/C,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI;QACnC,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG;;QAGlC,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,KAAK,CAAC;;AAGrD,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa;AACxC,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB;;AAGhD,QAAA,IAAI,CAAC,sBAAsB,CAAC,aAAa,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,iBAAiB,CAAC;;QAGrF,IAAI,CAAC,UAAU,CAAC,CAAC,aAAa,CAAC,EAAE,iBAAiB,EAAE,IAAI,CAAC;;AAGzD,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;;QAGtB,UAAU,CAAC,MAAK;;AAEd,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,KAAK,WAAW,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,KAAK,YAAY,EAAE;;gBAE7G,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,KAAK,WAAW,EAAE;AACtD,oBAAA,IAAI,CAAC,sBAAsB,GAAG,aAAa;AAC3C,oBAAA,IAAI,CAAC,oBAAoB,GAAG,iBAAiB;AAC7C,oBAAA,IAAI,CAAC,kCAAkC,GAAG,KAAK,CAAC;AAChD,oBAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE,EAAE,iBAAiB,CAAC;gBAC7F;qBAAO,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,KAAK,YAAY,EAAE;;AAE9D,oBAAA,MAAM,QAAQ,GAAG,iBAAiB,KAAK;AACrC,0BAAE,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;AAC7D,0BAAE,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;oBAE9D,IAAI,CAAC,iBAAiB,GAAG;AACvB,wBAAA,IAAI,EAAE,iBAAiB;AACvB,wBAAA,IAAI,EAAE,aAAa;AACnB,wBAAA,QAAQ,EAAE,QAAQ;wBAClB,YAAY,EAAE,IAAI;qBACnB;gBACH;YACF;iBAAO;;AAEL,gBAAA,MAAM,QAAQ,GAAG,iBAAiB,KAAK;AACrC,sBAAE,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;AAC7D,sBAAE,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;gBAE9D,IAAI,QAAQ,EAAE;AACZ,oBAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;AAC3B,wBAAA,IAAI,EAAE,iBAAiB;AACvB,wBAAA,IAAI,EAAE,aAAa;AACnB,wBAAA,QAAQ,EAAE;AACX,qBAAA,CAAC;gBACJ;YACF;;;YAIA,MAAM,OAAO,GAAG,iBAAiB,KAAK,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa;YAC9H,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,SAAS,EAAE,EAAE,KAAK,aAAa,CAAC,EAAE,CAAC;YAEhF,IAAI,SAAS,EAAE;;AAEb,gBAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,GAAG,SAAS;AAChD,gBAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC;;AAGtC,gBAAA,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE;AAC3B,gBAAA,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,GAAG,SAAS;;AAGxD,gBAAA,MAAM,aAAa,GAAG,SAAS,CAAC,UAAU,EAAE;gBAC5C,IAAI,aAAa,EAAE;AACjB,oBAAA,MAAM,QAAQ,GAAG,iBAAiB,KAAK,UAAU,GAAG,kCAAkC,GAAG,gCAAgC;AACzH,oBAAA,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;;AAErC,oBAAA,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG;gBACnC;;AAGA,gBAAA,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC;YACpC;;AAGA,YAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,IACzD,CAAC,QAAQ,CAAC,MAAM,KAAK,QAAQ,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAC3G;AACD,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,IACrD,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,CACnE;AACD,YAAA,IAAI,CAAC,2BAA2B,GAAG,mBAAmB,CAAC,MAAM,CAAC,QAAQ,IACpE,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,WAAW,EAAE,CAAC,CACpF;AACD,YAAA,IAAI,CAAC,wBAAwB,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,IAC5D,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,CAAC,CAC/E;QACH,CAAC,EAAE,GAAG,CAAC;;AAGP,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;IAC7B;AAEA,IAAA,cAAc,CAAC,KAAgB,EAAA;;QAE7B,MAAM,YAAY,GAAI,KAAK,CAAC,aAA6B,CAAC,OAAO,CAAC,gBAAgB,CAAC;QACnF,IAAI,YAAY,EAAE;AAChB,YAAA,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC;QAC5C;;QAEA,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,iBAAiB,CAAC;IACnD;IAEA,cAAc,GAAA;;AAEZ,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE;YACxC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC;YAClE,IAAI,CAAC,kBAAkB,EAAE;AACzB,YAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,GAAG,IAAI;QAC7C;;AAGA,QAAA,IAAI,CAAC,eAAe,CAAC,sBAAsB,GAAG,IAAI;;AAGlD,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,QAAA,IAAI,CAAC,wBAAwB,GAAG,EAAE;;AAGlC,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE;AACxC,YAAA,IAAI,CAAC,eAAe,CAAC,eAAe,GAAG,IAAI;AAC3C,YAAA,IAAI,CAAC,eAAe,CAAC,sBAAsB,GAAG,EAAE;YAChD,IAAI,CAAC,mBAAmB,EAAE;AAC1B,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE;gBAC9C,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;YAC/C;QACF;AAEA,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,GAAG,KAAK;AAC1C,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,GAAG,IAAI;AACzC,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,GAAG,IAAI;;QAGzC,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE;QAC5B,CAAC,EAAE,GAAG,CAAC;IACT;IAEA,iBAAiB,CAAC,IAAY,EAAE,EAAU,EAAA;AACxC,QAAA,IAAI,CAAC,EAAE;YAAE;AAET,QAAA,IAAI,IAAI,KAAK,UAAU,EAAE;YACvB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA,YAAA,EAAe,EAAE,CAAA,CAAE,CAAC;QAChD;AAAO,aAAA,IAAI,IAAI,KAAK,SAAS,EAAE;YAC7B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA,SAAA,EAAY,EAAE,CAAA,CAAE,CAAC;QAC7C;AAAO,aAAA,IAAI,IAAI,KAAK,UAAU,EAAE;YAC9B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA,mBAAA,EAAsB,EAAE,CAAA,CAAE,CAAC;QACvD;IACF;IAEA,uBAAuB,CAAC,EAAU,EAAE,IAAY,EAAA;AAC9C,QAAA,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI;YAAE;;AAGlB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC;IAClC;AAEA,IAAA,eAAe,CAAC,MAAW,EAAA;AACzB,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE;;AAG3B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;;AAGpE,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;AAC3B,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,QAAQ,EAAE;AACX,SAAA,CAAC;IACJ;AAEA,IAAA,qBAAqB,CAAC,MAAW,EAAA;AAC/B,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE;AAE3B,QAAA,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE;;AAErC,YAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,SAAS,CAAC;QAC/C;AAAO,aAAA,IAAI,IAAI,CAAC,cAAc,KAAK,YAAY,EAAE;;AAE/C,YAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,UAAU,CAAC;QAChD;AAAO,aAAA,IAAI,IAAI,CAAC,cAAc,KAAK,UAAU,EAAE;;AAE7C,YAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,UAAU,CAAC;QAChD;aAAO;;YAEL,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,CAAC;QACxD;IACF;IAEA,qBAAqB,CAAC,MAAW,EAAE,IAAyC,EAAA;AAC1E,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE;;QAG3B,IAAI,QAAQ,GAAG,IAAI;AACnB,QAAA,IAAI,IAAI,KAAK,UAAU,EAAE;AACvB,YAAA,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAClE;AAAO,aAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AAC7B,YAAA,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAChE;;QAGA,IAAI,CAAC,iBAAiB,GAAG;AACvB,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,QAAQ,EAAE;SACX;AACD,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;;AAGjC,QAAA,IAAI,CAAC,eAAe,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC;;AAGhF,QAAA,IAAI,CAAC,eAAe,CAAC,eAAe,GAAG,IAAI;AAC3C,QAAA,IAAI,CAAC,eAAe,CAAC,sBAAsB,GAAG,EAAE;AAChD,QAAA,IAAI,CAAC,eAAe,CAAC,wBAAwB,GAAG,IAAI;AACpD,QAAA,IAAI,CAAC,eAAe,CAAC,+BAA+B,GAAG,EAAE;;AAGzD,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE;YACxC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC;AAClE,YAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,GAAG,IAAI;QAC7C;;QAGA,IAAI,CAAC,kBAAkB,EAAE;;AAGzB,QAAA,IAAI,IAAI,KAAK,UAAU,EAAE;AACvB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC;YACvD,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,GAAG,MAAM;AAC7C,gBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC;;AAGnC,gBAAA,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE;gBACnC,IAAI,OAAO,EAAE;AACX,oBAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG;gBAC7B;;AAGA,gBAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;;AAG/B,gBAAA,MAAM,YAAY,GAAG,IAAI,KAAK,UAAU,GAAG,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,kBAAkB;gBAC9F,IAAI,YAAY,IAAI,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE;;AAE1D,oBAAA,YAAY,CAAC,eAAe,CAAC,MAAM,CAAC;gBACtC;qBAAO,IAAI,QAAQ,IAAI,QAAQ,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG,EAAE;;AAEnD,oBAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC9C;YACF;iBAAO,IAAI,QAAQ,IAAI,QAAQ,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG,EAAE;;AAEnD,gBAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC9C;QACF;aAAO,IAAI,QAAQ,IAAI,QAAQ,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG,EAAE;;AAEnD,YAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC9C;IACF;IAEA,sBAAsB,GAAA;;AAEpB,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE,IAAI;AAC5B,aAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAK,IAAI,CAAC,iBAAyB,EAAE,YAAY,CAAC,EAAE;AAClH,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI;AACxC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI;;AAGxC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;YACrD,IAAI,MAAM,EAAE;;AAEV,gBAAA,IAAI,IAAI,KAAK,UAAU,EAAE;AACvB,oBAAA,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC3E,wBAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,MAAM,CAAC;oBAC/C;yBAAO,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACpC,wBAAA,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC;oBAC9B;;AAEA,oBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC;AACnE,oBAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;wBACd,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;oBACxD;oBACA,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC;gBACzD;qBAAO;AACL,oBAAA,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACvE,wBAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,MAAM,CAAC;oBAC7C;yBAAO,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACpC,wBAAA,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC;oBAC9B;;AAEA,oBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC;AACjE,oBAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;wBACd,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;oBACtD;oBACA,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;gBACvD;;AAGA,gBAAA,IAAI,MAAM,CAAC,QAAQ,EAAE;AACnB,oBAAA,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE;gBAC3B;;AAGA,gBAAA,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,EAAE;gBACzC,IAAI,aAAa,EAAE;AACjB,oBAAA,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,kCAAkC,CAAC;AAClE,oBAAA,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,gCAAgC,CAAC;gBAClE;;gBAGA,IAAI,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,KAAK,MAAM,EAAE;AAC3D,oBAAA,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,GAAG,IAAI;gBACrD;YACF;;AAGA,YAAA,IAAI,IAAI,KAAK,UAAU,EAAE;gBACvB,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACxD;iBAAO;gBACL,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACtD;;AAGA,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW;YAC9B;AACA,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;QAC/B;AAEA,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;AACjC,QAAA,IAAI,CAAC,eAAe,CAAC,iBAAiB,GAAG,EAAE;;AAG3C,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE;YACxC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC;YAClE,IAAI,CAAC,kBAAkB,EAAE;AACzB,YAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,GAAG,IAAI;QAC7C;IACF;AAEA,IAAA,iBAAiB,CAAC,QAAa,EAAA;AAC7B,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE;;AAG/B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;;AAGxE,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;AAC3B,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,QAAQ,EAAE;AACX,SAAA,CAAC;IACJ;AAEA,IAAA,gBAAgB,CAAC,OAAY,EAAA;AAC3B,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE;YAAE;;AAG7B,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;YAC3B,IAAI,EAAE,UAAU;AAChB,YAAA,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC;IACJ;IAEA,eAAe,CAAC,QAAgB,EAAE,UAAkB,EAAA;AAClD,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU;YAAE;AAE9B,QAAA,IAAI,UAAU,KAAK,UAAU,EAAE;;AAE7B,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC;YAC/D,IAAI,QAAQ,EAAE;AACZ,gBAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;;AAEhC,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC;gBACrE,IAAI,QAAQ,IAAI,QAAQ,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG,EAAE;AAC5C,oBAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC9C;YACF;QACF;AAAO,aAAA,IAAI,UAAU,KAAK,SAAS,EAAE;;AAEnC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;YAC5D,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;;AAE5B,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;gBACnE,IAAI,QAAQ,IAAI,QAAQ,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG,EAAE;AAC5C,oBAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC9C;YACF;QACF;IACF;AAEA,IAAA,mBAAmB,CAAC,IAAY,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,KAAK;;QAEvB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;IACpC;AAEA,IAAA,aAAa,CAAC,QAAgB,EAAA;QAC5B,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;QACzD;;;QAIA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;AAEjC,QAAA,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;YACrB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACzB,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEtC,YAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE;QACpC;AAAO,aAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;;AAE7B,YAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;QAC/D;aAAO;;AAEL,YAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE;QAC5D;IACF;AAEA,IAAA,sBAAsB,CAAC,IAAS,EAAE,GAAW,EAAE,GAAW,EAAE,IAAY,EAAA;;AAEtE,QAAA,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,IAAI,CAAC;;QAGnD,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC;;AAG9D,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;;AAG5B,QAAA,IAAI,IAAI,KAAK,SAAS,EAAE;YACtB,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QAChF;AAAO,aAAA,IAAI,IAAI,KAAK,UAAU,EAAE;YAC9B,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QAClF;;AAGA,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;AACrC,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;QAC5B;AACA,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE;AAC9C,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC;QACxC;IACF;AAEA,IAAA,wBAAwB,CAAC,IAAS,EAAE,IAAY,EAAE,MAAW,EAAA;;AAE3D,QAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAChC,MAAM,EACN,IAAI,EACJ,IAAI,CAAC,oBAAoB,EACzB,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,eAAe,CAAC,eAAe,EACpC,IAAI,CAAC,eAAe,CAAC,iBAAiB,EACtC,IAAI,CAAC,EAAE,CACR;;AAGD,QAAA,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAK;;AAEhG,YAAA,MAAM,cAAc,GAAG,IAAI,YAAY,CACrC,SAAS,EACT,qBAAqB,EACrB,mBAAmB,IAAI,CAAC,IAAI,CAAA,8BAAA,CAAgC,CAC7D;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC;;AAGxC,YAAA,IAAI,IAAI,KAAK,UAAU,EAAE;AACvB,gBAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,MAAM;gBACjI,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,MAAM;YACnI;AAAO,iBAAA,IAAI,IAAI,KAAK,SAAS,EAAE;gBAC7B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,MAAM;gBAC3F,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,MAAM;YAC7F;;YAGA,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,KAAK,WAAW,EAAE;AACtD,gBAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,IACzD,CAAC,QAAQ,CAAC,MAAM,KAAK,QAAQ,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAC3G;AACD,gBAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,IACrD,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,CACnE;;AAGD,gBAAA,IAAI,CAAC,eAAe,CAAC,aAAa,GAAG;oBACnC,mBAAmB;oBACnB;iBACD;;AAGD,gBAAA,IAAI,CAAC,2BAA2B,GAAG,mBAAmB,CAAC,MAAM,CAAC,QAAQ,IACpE,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,WAAW,EAAE,CAAC,CACpF;AACD,gBAAA,IAAI,CAAC,wBAAwB,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,IAC5D,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,CAAC,CAC/E;YACH;;YAGA,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,KAAK,YAAY,EAAE;gBACvD,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,UAAU;gBACjE,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,UAAU,KAAK,YAAY,MAAM,IAAI,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS,CAAC,EAAE;;oBAE5G,IAAI,CAAC,mCAAmC,EAAE;gBAC5C;YACF;;AAGA,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;AACrC,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;YAC5B;AACA,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE;AAC9C,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC;YACxC;AACF,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAG;YACf,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,KAAK,CAAC;AAChE,YAAA,MAAM,YAAY,GAAG,IAAI,YAAY,CACnC,OAAO,EACP,eAAe,EACf,CAAA,8BAAA,EAAiC,YAAY,CAAA,CAAE,CAChD;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC;AACxC,QAAA,CAAC,CAAC;IACJ;IAEA,mCAAmC,GAAA;;AAEjC,QAAA,IAAI,IAAI,CAAC,cAAc,KAAK,YAAY,EAAE;AACxC,YAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC;AAC3F,YAAA,IAAI,CAAC,cAAc,GAAG,CAAC,GAAG,kBAAkB,CAAC;QAC/C;AAAO,aAAA,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE;YAC5C,IAAI,CAAC,cAAc,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;QAC7C;;QAGA,IAAI,CAAC,sBAAsB,EAAE;IAC/B;AAEA,IAAA,uBAAuB,CAAC,IAAY,EAAA;AAClC,QAAA,IAAI,CAAC,IAAI;YAAE;;;AAIX,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,qBAAqB;AAC1B,YAAA,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,IAAI;YACxC,IAAI,CAAC,oBAAoB;;AAG1C,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,KAAK,YAAY,IAAI,IAAI,CAAC,cAAc,EAAE;AAC9E,YAAA,IAAI,IAAI,CAAC,cAAc,KAAK,YAAY;gBAAE,UAAU,GAAG,UAAU;AAC5D,iBAAA,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS;gBAAE,UAAU,GAAG,SAAS;AAC7D,iBAAA,IAAI,IAAI,CAAC,cAAc,KAAK,UAAU;gBAAE,UAAU,GAAG,SAAS;QACrE;AAEA,QAAA,IAAI,UAAU,KAAK,UAAU,EAAE;;AAE7B,YAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,0BAA0B,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACnE,gBAAA,IAAI,CAAC,eAAe,CAAC,0BAA0B,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,0BAA0B,EAAE,IAAI,CAAC;gBAC5G,IAAI,CAAC,wBAAwB,EAAE;gBAC/B,IAAI,CAAC,mBAAmB,EAAE;YAC5B;QACF;AAAO,aAAA,IAAI,UAAU,KAAK,SAAS,EAAE;;AAEnC,YAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACjE,gBAAA,IAAI,CAAC,eAAe,CAAC,wBAAwB,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,wBAAwB,EAAE,IAAI,CAAC;gBACxG,IAAI,CAAC,wBAAwB,EAAE;gBAC/B,IAAI,CAAC,mBAAmB,EAAE;YAC5B;QACF;AAAO,aAAA,IAAI,UAAU,KAAK,SAAS,EAAE;;AAEnC,YAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,yBAAyB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAClE,gBAAA,IAAI,CAAC,eAAe,CAAC,yBAAyB,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,yBAAyB,EAAE,IAAI,CAAC;gBAC1G,IAAI,CAAC,wBAAwB,EAAE;gBAC/B,IAAI,CAAC,mBAAmB,EAAE;YAC5B;QACF;IACF;AAEA,IAAA,qBAAqB,CAAC,IAAS,EAAA;;QAE7B,OAAO,IAAI,EAAE,QAAQ,IAAI,IAAI,EAAE,SAAS,IAAI,KAAK;IACnD;AAEA,IAAA,yBAAyB,CAAC,IAAS,EAAA;QACjC,OAAO,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC;IACxD;AAEA,IAAA,MAAM,mBAAmB,CAAC,IAAS,EAAE,IAAY,EAAA;AAC/C,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE;AAEvB,QAAA,MAAM,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC;;AAG3F,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;;AAG7B,QAAA,IAAI,IAAI,KAAK,UAAU,EAAE;AACvB,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,MAAM;YACjI,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,MAAM;QACnI;AAAO,aAAA,IAAI,IAAI,KAAK,SAAS,EAAE;YAC7B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,MAAM;YAC3F,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,MAAM;QAC7F;;QAGA,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,KAAK,WAAW,EAAE;AACtD,YAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,IACzD,CAAC,QAAQ,CAAC,MAAM,KAAK,QAAQ,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAC3G;AACD,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,IACrD,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,CACnE;;AAGD,YAAA,IAAI,CAAC,eAAe,CAAC,aAAa,GAAG;gBACnC,mBAAmB;gBACnB;aACD;;AAGD,YAAA,IAAI,CAAC,2BAA2B,GAAG,mBAAmB,CAAC,MAAM,CAAC,QAAQ,IACpE,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,WAAW,EAAE,CAAC,CACpF;AACD,YAAA,IAAI,CAAC,wBAAwB,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,IAC5D,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,CAAC,CAC/E;QACH;;QAGA,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,KAAK,YAAY,EAAE;YACvD,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,UAAU;YACjE,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,UAAU,KAAK,YAAY,MAAM,IAAI,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS,CAAC,EAAE;;gBAE5G,IAAI,CAAC,mCAAmC,EAAE;YAC5C;QACF;;AAGA,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,EAAE;AAChD,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,sBAAsB;;AAG3D,YAAA,IAAI,MAAM,CAAC,QAAQ,EAAE;AACnB,gBAAA,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE;YAC3B;;AAGA,YAAA,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,EAAE;YACzC,IAAI,aAAa,EAAE;AACjB,gBAAA,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,kCAAkC,CAAC;AAClE,gBAAA,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,gCAAgC,CAAC;YAClE;;AAGA,YAAA,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,GAAG,IAAI;QACrD;;AAGA,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE;YACxC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC;AAClE,YAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,GAAG,IAAI;QAC7C;;QAGA,IAAI,CAAC,kBAAkB,EAAE;IAC3B;AAEA,IAAA,MAAM,0BAA0B,GAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;YAChC;QACF;;AAGA,QAAA,IAAI,CAAC,IAAI,CAAC,kCAAkC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,EAAE;YAC7F;QACF;AAEA,QAAA,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,oBAAoB,CAAC;;AAGtF,QAAA,IAAI,CAAC,kCAAkC,GAAG,KAAK;;;IAIjD;IAEA,iBAAiB,CAAC,QAAgB,EAAE,UAAkB,EAAA;AACpD,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7D,YAAA,OAAO,EAAE;QACX;QAEA,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAG;AACrD,YAAA,IAAI,UAAU,KAAK,UAAU,EAAE;;AAE7B,gBAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ;AACtB,oBAAA,OAAO,CAAC,QAAQ;oBAChB,OAAO,CAAC,MAAM,EAAE,EAAE;AAClB,oBAAA,OAAO,CAAC,QAAQ;AAChB,oBAAA,OAAO,CAAC,SAAS,EAAE,EAAE;AAEtC,gBAAA,IAAI,QAAQ,KAAK,QAAQ,EAAE;AACzB,oBAAA,OAAO,IAAI;gBACb;;AAGA,gBAAA,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,EAAE,MAAM;AAC3C,gBAAA,IAAI,cAAc,KAAK,QAAQ,EAAE;AAC/B,oBAAA,OAAO,IAAI;gBACb;;gBAGA,MAAM,uBAAuB,GAAG,OAAO,CAAC,UAAU,EAAE,EAAE,IAAI,OAAO,CAAC,YAAY;gBAC9E,IAAI,uBAAuB,EAAE;AAC3B,oBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,uBAAuB,CAAC;oBAC/E,IAAI,UAAU,EAAE;AACd,wBAAA,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,QAAQ,EAAE,EAAE,IAAI,UAAU,CAAC,UAAU;AAC5F,wBAAA,IAAI,cAAc,KAAK,QAAQ,EAAE;AAC/B,4BAAA,OAAO,IAAI;wBACb;oBACF;gBACF;YACF;AAAO,iBAAA,IAAI,UAAU,KAAK,SAAS,EAAE;;;gBAGnC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,IAAI,OAAO,CAAC,IAAI;gBAErD,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AAC3C,oBAAA,OAAO,KAAK;gBACd;AAEA,gBAAA,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,IAAS,KAAI;oBAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI;oBACjD,OAAO,QAAQ,KAAK,QAAQ;AAC9B,gBAAA,CAAC,CAAC;YACJ;AAAO,iBAAA,IAAI,UAAU,KAAK,UAAU,EAAE;;gBAEpC,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,IAAI,OAAO,CAAC,SAAS;gBAC1D,OAAO,SAAS,KAAK,QAAQ;YAC/B;AAEA,YAAA,OAAO,KAAK;AACd,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,eAAe;IACxB;IAEA,mBAAmB,GAAA;QACjB,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,IAAG;AACzD,YAAA,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;AAC5B,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,GAAG,EAAE;;AAGhD,QAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;AAC/B,QAAA,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,KAAK,EAAE;IAChD;IAEA,wBAAwB,GAAA;AACtB,QAAA,OAAO,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC;IAClG;AAEA,IAAA,aAAa,CAAC,OAAY,EAAE,gBAAA,GAA4B,KAAK,EAAA;QAC3D,IAAI,gBAAgB,EAAE;;AAEpB,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,wBAAwB,EAAE,EAAE,KAAK,OAAO,CAAC,EAAE,EAAE;AACpE,gBAAA,IAAI,CAAC,eAAe,CAAC,wBAAwB,GAAG,IAAI;AACpD,gBAAA,IAAI,CAAC,eAAe,CAAC,+BAA+B,GAAG,EAAE;gBACzD,IAAI,CAAC,eAAe,CAAC,sBAAsB,GAAG,IAAI,CAAC;;gBAEnD,IAAI,CAAC,mBAAmB,EAAE;AAC1B,gBAAA,IAAI,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE;oBAC9C,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;gBAC/C;YACF;iBAAO;AACL,gBAAA,IAAI,CAAC,eAAe,CAAC,wBAAwB,GAAG,OAAO;gBACvD,IAAI,CAAC,eAAe,CAAC,+BAA+B,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;gBACtF,IAAI,CAAC,eAAe,CAAC,sBAAsB,GAAG,IAAI,CAAC;;gBAEnD,IAAI,CAAC,mBAAmB,EAAE;gBAC1B,IAAI,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC;YAC3C;QACF;aAAO;;AAEL,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,EAAE,KAAK,OAAO,CAAC,EAAE,EAAE;AAC3D,gBAAA,IAAI,CAAC,eAAe,CAAC,eAAe,GAAG,IAAI;AAC3C,gBAAA,IAAI,CAAC,eAAe,CAAC,sBAAsB,GAAG,EAAE;gBAChD,IAAI,CAAC,eAAe,CAAC,sBAAsB,GAAG,IAAI,CAAC;;gBAEnD,IAAI,CAAC,mBAAmB,EAAE;AAC1B,gBAAA,IAAI,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE;oBAC9C,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;gBAC/C;YACF;iBAAO;AACL,gBAAA,IAAI,CAAC,eAAe,CAAC,eAAe,GAAG,OAAO;gBAC9C,IAAI,CAAC,eAAe,CAAC,sBAAsB,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;gBAC7E,IAAI,CAAC,eAAe,CAAC,sBAAsB,GAAG,IAAI,CAAC;;gBAEnD,IAAI,CAAC,mBAAmB,EAAE;gBAC1B,IAAI,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC;YAC3C;QACF;IACF;AAEA,IAAA,iBAAiB,CAAC,OAAY,EAAA;QAC5B,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,EAAE;QACX;;QAGA,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,IAAI,OAAO,CAAC,IAAI;QAErD,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AAC3C,YAAA,OAAO,EAAE;QACX;;AAGA,QAAA,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,IAAS,KAAI;YACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI;;AAGjD,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;;AAE5D,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;;AAGzE,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE;;AAEb,gBAAA,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;;AAEhC,oBAAA,OAAO,IAAI;gBACb;;gBAEA,OAAO;AACL,oBAAA,GAAG,IAAI;AACP,oBAAA,SAAS,EAAE,MAAM,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,QAAQ,IAAI,KAAK,IAAI,KAAK;oBAC1E,SAAS,EAAE,CAAC;iBACb;YACH;YAEA,IAAI,MAAM,EAAE;gBACV,OAAO;oBACL,EAAE,EAAE,MAAM,CAAC,EAAE;oBACb,IAAI,EAAE,cAAc,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,QAAQ;AACrD,oBAAA,IAAI,EAAE,SAAS;oBACf,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,QAAQ,IAAI,KAAK;AACvD,oBAAA,SAAS,EAAE;iBACZ;YACH;;YAGA,OAAO;AACL,gBAAA,EAAE,EAAE,QAAQ;AACZ,gBAAA,IAAI,EAAE,cAAc,EAAE,IAAI,IAAI,QAAQ;AACtC,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,SAAS,EAAE,KAAK;AAChB,gBAAA,SAAS,EAAE;aACZ;AACH,QAAA,CAAC,CAAC;IACJ;;IAGA,kBAAkB,CAAC,MAAc,EAAE,QAAgB,EAAA;AACjD,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,kBAAkB,CAAC;IACvH;;IAGA,gBAAgB,CAAC,MAAW,EAAE,UAAmB,EAAA;QAC/C,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5D;AAEA,IAAA,gBAAgB,CAAC,IAAS,EAAA;;AAExB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,EAAE;AAC1C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE;AACtC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,EAAE;QAE1C,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1C,YAAA,OAAO,EAAE;QACX;QAEA,MAAM,IAAI,GAAG,EAAE;AACf,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC/C,IAAI,CAAC,IAAI,CAAC;AACR,gBAAA,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;AACpB,gBAAA,EAAE,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC;AACtB,gBAAA,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AACpB,gBAAA,IAAI,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC;AACtB,gBAAA,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;AACxB,gBAAA,MAAM,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC;AAC1B,gBAAA,KAAK,EAAE;AACR,aAAA,CAAC;QACJ;AAEA,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,mBAAmB,CAAC,SAAgB,EAAA;QAClC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AACxC,YAAA,OAAO,EAAE;QACX;QAEA,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM;YACrC,EAAE,EAAE,IAAI,CAAC,EAAE;AACX,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE;AAC1B,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,SAAS;YAC5B,KAAK,EAAE,KAAK,GAAG;AAChB,SAAA,CAAC,CAAC;IACL;IAEA,gBAAgB,CAAC,GAAQ,EAAE,KAAa,EAAA;;AAEtC,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;;AAGhC,QAAA,IAAI,CAAC,eAAe,CAAC,sBAAsB,GAAG;YAC5C,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,OAAO,EAAE,EAAE;AAC1D,YAAA,YAAY,EAAE;SACf;;QAGD,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,OAAO;QACjE,MAAM,kBAAkB,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,WAAW;QACzE,MAAM,qBAAqB,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,cAAc;QAC/E,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,SAAS;QACrE,MAAM,sBAAsB,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,eAAe;QACjF,MAAM,kBAAkB,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,WAAW;QACzE,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,SAAS;QACrE,MAAM,kBAAkB,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,WAAW;;QAGzE,IAAI,CAAC,mBAAmB,EAAE;QAC1B,IAAI,CAAC,kBAAkB,CAAC,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC;;AAGhD,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,GAAG,SAAS;AAC9C,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,GAAG;AACnC,YAAA,OAAO,EAAE,cAAc;AACvB,YAAA,OAAO,EAAE;gBACP,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,MAAM,EAAE,GAAG,CAAC,MAAM;AAClB,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,KAAK,EAAE,kBAAkB,EAAE,MAAM,IAAI;AACtC,aAAA;AACD,YAAA,WAAW,EAAE,kBAAkB;AAC/B,YAAA,cAAc,EAAE,qBAAqB;AACrC,YAAA,SAAS,EAAE,gBAAgB;AAC3B,YAAA,eAAe,EAAE,sBAAsB;AACvC,YAAA,WAAW,EAAE,kBAAkB;AAC/B,YAAA,SAAS,EAAE,gBAAgB;AAC3B,YAAA,WAAW,EAAE;SACd;IACH;IAEA,mBAAmB,CAAC,QAAgB,EAAE,UAAkB,EAAA;;AAEtD,QAAA,IAAI,CAAC,oBAAoB,GAAG,QAAQ;;QAGpC,IAAI,QAAQ,GAAQ,IAAI;AAExB,QAAA,IAAI,UAAU,KAAK,UAAU,EAAE;AAC7B,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC;YAC/D,IAAI,QAAQ,EAAE;gBACZ,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC;;gBAE/D,IAAI,CAAC,oBAAoB,GAAG;AAC1B,oBAAA,GAAG,QAAQ;AACX,oBAAA,SAAS,EAAE;iBACZ;AACD,gBAAA,IAAI,CAAC,wBAAwB,GAAG,UAAU;YAC5C;QACF;AAAO,aAAA,IAAI,UAAU,KAAK,SAAS,EAAE;AACnC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;YAC5D,IAAI,MAAM,EAAE;gBACV,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;;gBAE7D,IAAI,CAAC,oBAAoB,GAAG;AAC1B,oBAAA,GAAG,MAAM;AACT,oBAAA,SAAS,EAAE;iBACZ;AACD,gBAAA,IAAI,CAAC,wBAAwB,GAAG,SAAS;YAC3C;QACF;;QAGA,IAAI,QAAQ,IAAI,QAAQ,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG,EAAE;YAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,UAAU,CAAC;AAC5D,YAAA,MAAM,YAAY,GAAG,UAAU,KAAK,UAAU,GAAG,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,kBAAkB;AAEpG,YAAA,IAAI,MAAM,IAAI,YAAY,EAAE;;AAE1B,gBAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE;oBACxC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC;oBAClE,IAAI,CAAC,kBAAkB,EAAE;gBAC3B;AACA,gBAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,GAAG,MAAM;AAC7C,gBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC;AACnC,gBAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;;AAG/B,gBAAA,YAAY,CAAC,eAAe,CAAC,MAAM,CAAC;YACtC;iBAAO;;AAEL,gBAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC9C;QACF;IACF;IAEA,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,QAAA,IAAI,CAAC,wBAAwB,GAAG,EAAE;AAClC,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;IAClC;IAEA,kBAAkB,CAAC,OAAY,EAAE,KAAa,EAAA;;QAE5C,IAAI,KAAK,EAAE;YACT,KAAK,CAAC,eAAe,EAAE;QACzB;;AAGA,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,QAAA,IAAI,CAAC,wBAAwB,GAAG,EAAE;AAClC,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;;AAGhC,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;;AAGjC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,yBAAyB,CAAC,oBAAoB,CAClE,OAAO,EACP,IAAI,CAAC,eAAe,CAAC,eAAe,EACpC,IAAI,CAAC,eAAe,CAAC,iBAAiB,EACtC,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,KAAK,CACX;QAED,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO,CAAC,IAAI,CAAC,gDAAgD,EAAE,OAAO,CAAC,EAAE,CAAC;YAC1E;QACF;;AAGA,QAAA,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE;AACpC,YAAA,OAAO,CAAC,IAAI,CAAC,gDAAgD,EAAE,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtG;;QAGA,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;;AAEnC,YAAA,IAAI,CAAC,eAAe,CAAC,eAAe,GAAG,OAAO;YAC9C,IAAI,CAAC,eAAe,CAAC,sBAAsB,GAAG,QAAQ,CAAC,cAAc;YACrE,IAAI,CAAC,eAAe,CAAC,sBAAsB,GAAG,IAAI,CAAC;;YAGnD,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC;AAEzC,YAAA,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;AAC5B,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,OAAO,EAAE;AACP,oBAAA,KAAK,EAAE,CAAC;AACR,oBAAA,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,MAAM;oBAClC,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI;oBAClC,EAAE,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE;oBAC9B,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM;oBACtC,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI;oBAClC,QAAQ,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ;oBAC1C,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM;oBACtC,SAAS,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACpC,iBAAA;gBACD,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,eAAe,EAAE,QAAQ,CAAC,eAAe;gBACzC,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,cAAc,EAAE,QAAQ,CAAC,cAAc;gBACvC,wBAAwB,EAAE,QAAQ,CAAC;AACpC,aAAA,CAAC;QACJ;IACF;;AAGQ,IAAA,mBAAmB,CAAC,KAAY,EAAA;AACtC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;QAC1C,IAAI,cAAc,GAAG,KAAK;QAE1B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,2BAA2B,CAAC,EAAE;AAChD,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE;gBAC5C,cAAc,GAAG,IAAI;YACvB;AACA,YAAA,IAAI,CAAC,eAAe,CAAC,mBAAmB,GAAG,KAAK;QAClD;QACA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,4BAA4B,CAAC,EAAE;AACjD,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,oBAAoB,EAAE;gBAC7C,cAAc,GAAG,IAAI;YACvB;AACA,YAAA,IAAI,CAAC,eAAe,CAAC,oBAAoB,GAAG,KAAK;QACnD;;QAGA,IAAI,cAAc,EAAE;YAClB,IAAI,CAAC,eAAe,EAAE;QACxB;IACF;;AAGA,IAAA,kBAAkB,CAAC,KAAiB,EAAA;QAClC,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO;QAC3B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc;IACvD;AAEQ,IAAA,WAAW,CAAC,KAAiB,EAAA;AACnC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB;QACF;;QAGA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO;AAC1C,QAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC;AAChF,QAAA,MAAM,QAAQ,GAAG,MAAM,GAAG,QAAQ;;AAGlC,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,GAAG,QAAQ;;QAGzC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;AAE/E,QAAA,IAAI,CAAC,eAAe,CAAC,cAAc,GAAG,QAAQ;;AAG9C,QAAA,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,oBAAoB,EAAE,CAAA,EAAG,QAAQ,CAAA,GAAA,CAAK,CAAC;IACpF;IAGA,SAAS,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;QACzB;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;QAC/B,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC;;AAGhE,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE;;AAEZ,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;;AAGd,YAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,gBAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE;AAC/B,gBAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE;YACzC;AACA,YAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,gBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE;AAC7B,gBAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE;YACvC;;AAGA,YAAA,IAAI,CAAC,gBAAgB,CAAC,eAAe,GAAG,EAAE;AAC1C,YAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,GAAG,EAAE;;AAGxC,YAAA,IAAI,CAAC,mBAAmB,CAAC,YAAY,GAAG,EAAE;AAC1C,YAAA,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,GAAG,EAAE;;AAGhD,YAAA,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,KAAK,EAAE;AAC9C,YAAA,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,KAAK,EAAE;AAC5C,YAAA,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,KAAK,EAAE;AAChD,YAAA,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,KAAK,EAAE;;AAG9C,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;AACjB,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI;QACjB;IACF;+GAxiGW,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAoHnB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EACjB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAAlL,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAU,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAM,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAmK,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,yBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,yBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AArHf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,2mBC9B/B,6gRAkJA,EAAA,MAAA,EAAA,CAAA,otuBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAvD,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAwD,2BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,aAAA,EAAA,OAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,oBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,mBAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,0BAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,qBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,4BAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,8BAAA,EAAA,gCAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,wBAAA,EAAA,uCAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,0BAAA,EAAA,4BAAA,EAAA,iCAAA,EAAA,2BAAA,EAAA,gCAAA,EAAA,0BAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,gBAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,2BAAA,EAAA,oCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,+BAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,8BAAA,EAAA,6BAAA,EAAA,gCAAA,EAAA,+BAAA,EAAA,+BAAA,EAAA,8BAAA,EAAA,yBAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,gCAAA,EAAA,kCAAA,EAAA,uCAAA,EAAA,iCAAA,EAAA,sCAAA,EAAA,gCAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,wBAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,0BAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,0BAAA,EAAA,6BAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,wBAAA,EAAA,wBAAA,EAAA,sBAAA,EAAA,0BAAA,EAAA,oCAAA,EAAA,0BAAA,EAAA,iCAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,yBAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,iCAAA,EAAA,yBAAA,EAAA,yBAAA,EAAA,kCAAA,EAAA,+BAAA,EAAA,4BAAA,EAAA,wBAAA,EAAA,wBAAA,EAAA,8BAAA,EAAA,uBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDpHa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,cAGb,KAAK,EAAA,QAAA,EAAA,6gRAAA,EAAA,MAAA,EAAA,CAAA,otuBAAA,CAAA,EAAA;;0BAsHd,MAAM;2BAAC,iBAAiB;;0BACxB,MAAM;2BAAC,gBAAgB;;sBAkFzB,SAAS;uBAAC,sBAAsB;;sBAChC,SAAS;uBAAC,wBAAwB;;sBAClC,SAAS;uBAAC,uBAAuB;;sBACjC,SAAS;uBAAC,gCAAgC;;sBAkzF1C,YAAY;uBAAC,kBAAkB;;;MEjgGrB,mBAAmB,CAAA;AAa9B,IAAA,WAAA,CAAoB,UAAsB,EAAA;QAAtB,IAAA,CAAA,UAAU,GAAV,UAAU;QAZtB,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAAkB;AAC7D,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,WAAW,EAAE,CAAC;AACd,YAAA,UAAU,EAAE;AACb,SAAA,CAAC;AAEK,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;QAEnD,IAAA,CAAA,uBAAuB,GAAwB,IAAI;AAC1C,QAAA,IAAA,CAAA,qBAAqB,GAAG,KAAK,CAAC;;QAI7C,IAAI,CAAC,oBAAoB,EAAE;IAC7B;AAEA;;AAEG;AACH,IAAA,iBAAiB,CAAC,WAA2B,EAAA;AAC3C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK;AACzC,QAAA,MAAM,SAAS,GAAG;AAChB,YAAA,GAAG,MAAM;AACT,YAAA,OAAO,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC;AAC/B,YAAA,WAAW,EAAE,WAAW;YACxB,UAAU,EAAE,WAAW,CAAC,MAAM;AAC9B,YAAA,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;SAClD;AAED,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC;;AAGpC,QAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC;;AAGjC,QAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,IAAI,CAAC,iBAAiB,EAAE;QAC1B;IACF;AAEA;;AAEG;AACH,IAAA,aAAa,CAAC,UAAwB,EAAA;AACpC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK;QACzC,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,UAAU,CAAC,GAAG,CAAC;QAErE,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,WAAW,GAAG,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC;AACvD,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,gBAAA,OAAO,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC;AAC/B,gBAAA,WAAW,EAAE,WAAW;gBACxB,UAAU,EAAE,WAAW,CAAC,MAAM;AAC9B,gBAAA,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;AAClD,aAAA,CAAC;YAEF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE;gBAC3D,IAAI,CAAC,iBAAiB,EAAE;YAC1B;QACF;IACF;AAEA;;AAEG;AACH,IAAA,gBAAgB,CAAC,aAAqB,EAAA;AACpC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK;AACzC,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,aAAa,CAAC;AAE3E,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,YAAA,OAAO,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC;AAC/B,YAAA,WAAW,EAAE,WAAW;YACxB,UAAU,EAAE,WAAW,CAAC,MAAM;AAC9B,YAAA,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;AAClD,SAAA,CAAC;QAEF,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,uBAAuB,EAAE;YAC3D,IAAI,CAAC,gBAAgB,EAAE;QACzB;IACF;AAEA;;AAEG;IACH,kBAAkB,CAAC,aAAqB,EAAE,KAAa,EAAA;AACrD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK;QACzC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAG;AAC7C,YAAA,IAAI,CAAC,CAAC,GAAG,KAAK,aAAa,EAAE;gBAC3B,OAAO,EAAE,GAAG,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE;YACtC;AACA,YAAA,OAAO,CAAC;AACV,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,YAAA,GAAG,MAAM;AACT,YAAA,WAAW,EAAE;AACd,SAAA,CAAC;IACJ;AAEA;;AAEG;AACH,IAAA,eAAe,CAAC,aAAqB,EAAA;QACnC,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,aAAa,CAAC;AAC5F,QAAA,OAAO,UAAU,EAAE,YAAY,IAAI,IAAI;IACzC;AAEA;;AAEG;IACH,oBAAoB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;IACvE;AAEA;;AAEG;IACH,0BAA0B,GAAA;QACxB,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,QAAQ,CAAC;IACzF;AAEA;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO;IAC3C;AAEA;;AAEG;AACK,IAAA,qBAAqB,CAAC,UAAwB,EAAA;AACpD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;AAC5B,QAAA,MAAM,SAAS,GAAG,CAAA,EAAG,UAAU,CAAC,GAAG,6BAA6B;AAEhE,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE;AACpC,YAAA,OAAO,EAAE,UAAU,CAAC,YAAY,GAAG,EAAE,YAAY,EAAE,UAAU,CAAC,YAAY,EAAE,GAAG;AAChF,SAAA,CAAC,CAAC,IAAI,CACLlL,KAAG,CAAC,MAAK;YACP,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;AAC3C,YAAA,OAAO,EAAE,GAAG,EAAE,UAAU,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE;AAC9D,QAAA,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,GAAG,KAAI;;;AAGjB,YAAA,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC;QACvE,CAAC,CAAC,CACH;IACH;AAEA;;AAEG;IACK,mBAAmB,GAAA;AACzB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK;AACzC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;YACtD;QACF;;AAGA,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,IACpD,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CACvC;;QAGD,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,IAAG;YACnE,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,IAAG;gBACtD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,UAAU,CAAC,GAAG,CAAC;gBAC/D,IAAI,MAAM,EAAE;oBACV,OAAO;AACL,wBAAA,GAAG,UAAU;wBACb,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,eAAe,EAAE,IAAI,IAAI,EAAE;wBAC3B,gBAAgB,EAAE,MAAM,CAAC;qBAC1B;gBACH;AACA,gBAAA,OAAO,UAAU;AACnB,YAAA,CAAC,CAAC;AAEF,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,gBAAA,GAAG,MAAM;AACT,gBAAA,WAAW,EAAE,WAAW;AACxB,gBAAA,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;AAClD,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;IACK,iBAAiB,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE;AAChC,YAAA,OAAO;QACT;;;QAIA,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,mBAAmB,EAAE;AAC5B,QAAA,CAAC,EAAE,IAAI,CAAC,CAAC;;AAGT,QAAA,IAAI,CAAC,uBAAuB,GAAG,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,MAAK;YACjF,IAAI,CAAC,mBAAmB,EAAE;AAC5B,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;IACK,gBAAgB,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE;AAChC,YAAA,IAAI,CAAC,uBAAuB,CAAC,WAAW,EAAE;AAC1C,YAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI;QACrC;IACF;AAEA;;AAEG;IACH,KAAK,GAAA;QACH,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,MAAM,SAAS,GAAG;AAChB,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,WAAW,EAAE,CAAC;AACd,YAAA,UAAU,EAAE;SACb;AACD,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC;;QAGpC,IAAI,CAAC,kBAAkB,EAAE;IAC3B;AAEA;;AAEG;IACH,WAAW,GAAA;QACT,IAAI,CAAC,gBAAgB,EAAE;IACzB;AAEA;;AAEG;AACK,IAAA,iBAAiB,CAAC,MAAuB,EAAA;AAC/C,QAAA,IAAI;AACF,YAAA,YAAY,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAClE;QAAE,OAAO,GAAG,EAAE;;QAEd;IACF;AAEA;;AAEG;IACK,oBAAoB,GAAA;AAC1B,QAAA,IAAI;YACF,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,kBAAkB,CAAC;YACtD,IAAI,KAAK,EAAE;gBACT,MAAM,MAAM,GAAoB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;;AAGjD,gBAAA,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;;AAEvD,oBAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM;;;AAIrE,oBAAA,IAAI,WAAW,IAAI,CAAC,EAAE;AACpB,wBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;;;AAIjC,wBAAA,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;4BACnD,IAAI,CAAC,iBAAiB,EAAE;wBAC1B;oBACF;yBAAO;;;wBAGL,IAAI,CAAC,kBAAkB,EAAE;oBAC3B;gBACF;YACF;QACF;QAAE,OAAO,GAAG,EAAE;;YAEZ,IAAI,CAAC,kBAAkB,EAAE;QAC3B;IACF;AAEA;;AAEG;IACK,kBAAkB,GAAA;AACxB,QAAA,IAAI;AACF,YAAA,YAAY,CAAC,UAAU,CAAC,kBAAkB,CAAC;QAC7C;QAAE,OAAO,GAAG,EAAE;;QAEd;IACF;+GA5SW,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAd,IAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA,CAAA;;4FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCdY,0BAA0B,CAAA;AAKrC,IAAA,WAAA,CAAoB,mBAAwC,EAAA;QAAxC,IAAA,CAAA,mBAAmB,GAAnB,mBAAmB;QAJvC,IAAA,CAAA,aAAa,GAA2B,IAAI;QAC5C,IAAA,CAAA,UAAU,GAAG,KAAK;QACV,IAAA,CAAA,YAAY,GAAwB,IAAI;IAEe;IAE/D,QAAQ,GAAA;;AAEN,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,SAAS,CACnE,CAAC,MAAM,KAAI;AACT,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM;AAC7B,QAAA,CAAC,CACF;IACH;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;QACjC;IACF;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU;IACpC;AAEA,IAAA,wBAAwB,CAAC,UAAwB,EAAA;QAC/C,OAAO,UAAU,CAAC,QAAQ,GAAG,mBAAmB,GAAG,oBAAoB;IACzE;AAEA,IAAA,iBAAiB,CAAC,UAAwB,EAAA;QACxC,OAAO,UAAU,CAAC,QAAQ,GAAG,cAAc,GAAG,OAAO;IACvD;AAEA,IAAA,kBAAkB,CAAC,UAAwB,EAAA;AACzC,QAAA,IAAI,UAAU,CAAC,gBAAgB,KAAK,IAAI,IAAI,UAAU,CAAC,gBAAgB,GAAG,CAAC,EAAE;AAC3E,YAAA,OAAO,KAAK;QACd;AACA,QAAA,OAAO,CAAA,EAAG,UAAU,CAAC,gBAAgB,IAAI;IAC3C;AAEA,IAAA,eAAe,CAAC,UAAwB,EAAA;AACtC,QAAA,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE;AAC/B,YAAA,OAAO,OAAO;QAChB;QACA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;AAChC,QAAA,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE;AAChE,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,SAAS,IAAI,IAAI,CAAC;AAEpD,QAAA,IAAI,OAAO,GAAG,EAAE,EAAE;YAChB,OAAO,CAAA,EAAG,OAAO,CAAA,KAAA,CAAO;QAC1B;AAAO,aAAA,IAAI,OAAO,GAAG,IAAI,EAAE;YACzB,OAAO,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAA,KAAA,CAAO;QAC3C;aAAO;YACL,OAAO,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA,KAAA,CAAO;QAC7C;IACF;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;AACtD,YAAA,OAAO,aAAa;QACtB;AACA,QAAA,OAAO,CAAA,EAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAA,CAAA,EAAI,IAAI,CAAC,aAAa,CAAC,UAAU,SAAS;IACpF;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;AACtD,YAAA,OAAO,WAAW;QACpB;QACA,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,KAAK,CAAC,EAAE;AACxC,YAAA,OAAO,WAAW;QACpB;AACA,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;AAClE,YAAA,OAAO,aAAa;QACtB;AACA,QAAA,OAAO,YAAY;IACrB;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;AACtD,YAAA,OAAO,iBAAiB;QAC1B;QACA,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,KAAK,CAAC,EAAE;AACxC,YAAA,OAAO,cAAc;QACvB;AACA,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;AAClE,YAAA,OAAO,gBAAgB;QACzB;AACA,QAAA,OAAO,gBAAgB;IACzB;+GAzFW,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAiM,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,oFCVvC,0jDAqCA,EAAA,MAAA,EAAA,CAAA,88HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAhM,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FD3Ba,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBANtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,cACvB,KAAK,EAAA,QAAA,EAAA,0jDAAA,EAAA,MAAA,EAAA,CAAA,88HAAA,CAAA,EAAA;;;MEKN,mBAAmB,CAAA;IAa9B,WAAA,CACqC,eAAgC,EAC3D,KAAqB,EAAA;QADM,IAAA,CAAA,eAAe,GAAf,eAAe;QAC1C,IAAA,CAAA,KAAK,GAAL,KAAK;QAdf,IAAA,CAAA,UAAU,GAAU,EAAE;QACtB,IAAA,CAAA,UAAU,GAAU,EAAE;QACtB,IAAA,CAAA,QAAQ,GAAU,EAAE;QACpB,IAAA,CAAA,WAAW,GAAU,EAAE;QACvB,IAAA,CAAA,aAAa,GAAU,EAAE;QACzB,IAAA,CAAA,kBAAkB,GAAU,EAAE;QAC9B,IAAA,CAAA,oBAAoB,GAAU,EAAE;QAChC,IAAA,CAAA,iBAAiB,GAAU,EAAE;QAC7B,IAAA,CAAA,iBAAiB,GAAQ,IAAI;AAErB,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAE;IAKtC;IAEH,QAAQ,GAAA;QACN,IAAI,CAAC,QAAQ,EAAE;IACjB;IAEA,QAAQ,GAAA;QACJ,MAAM,QAAQ,GAAmB,EAAE;QACnC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,IAAG;YACrE,IAAI,CAAC,UAAU,GAAG,IAAI,EAAE,IAAI,IAAI,EAAE;QACtC,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,IAAG;YACnE,IAAI,CAAC,QAAQ,GAAG,IAAI,EAAE,IAAI,IAAI,EAAE;QACpC,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,IAAG;YACvE,IAAI,CAAC,WAAW,GAAG,IAAI,EAAE,IAAI,IAAI,EAAE;QACvC,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,IAAG;YACzE,IAAI,CAAC,aAAa,GAAG,IAAI,EAAE,IAAI,IAAI,EAAE;QACzC,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,0BAA0B,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,IAAG;YACnF,IAAI,CAAC,kBAAkB,GAAG,IAAI,EAAE,IAAI,IAAI,EAAE;QAC9C,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,6BAA6B,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,IAAG;YACtF,IAAI,CAAC,oBAAoB,GAAG,IAAI,EAAE,IAAI,IAAI,EAAE;QAChD,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,yBAAyB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,IAAG;YAClF,IAAI,CAAC,iBAAiB,GAAG,IAAI,EAAE,IAAI,IAAI,EAAE;QAC7C,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAK;YAC5B,IAAI,CAAC,gBAAgB,EAAE;AAC3B,QAAA,CAAC,CAAC;IACN;IAEA,gBAAgB,GAAA;AACZ,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,kBAAkB,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,oBAAoB,CAAC;AACxG,QAAA,UAAU,CAAC,OAAO,CAAC,IAAI,IAAG;AACtB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AACjB,gBAAA,IAAI,EAAE,IAAI;gBACV,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;gBACxD,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;gBACpD,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC;gBAC9D,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI;AACxD,aAAA,CAAC;AACN,QAAA,CAAC,CAAC;IACN;IAEA,mBAAmB,GAAA;AACjB,QAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU;QACvC,CAAC,GAAG,IAAI,CAAC,kBAAkB,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,IAAI,IAAG;AACnG,YAAA,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,IAAI,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC/D,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK;AACvD,YAAA,IAAI,EAAE,IAAI;YACV,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;YACxD,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;YACpD,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC;YACtD,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI;SAC9D,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAClD;IAEA,gBAAgB,CAAC,KAAY,EAAE,SAAiB,EAAA;AAC9C,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;IAC9E;IAEA,kBAAkB,CAAC,KAAY,EAAE,SAAiB,EAAA;AAChD,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,CAAA,KAAA,CAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IACrH;AAEA,IAAA,aAAa,CAAC,aAAqB,EAAA;AACjC,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC;IACpF;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;IAC/B;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;IACjC;AAjGW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,kBAcpB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAAD,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAdhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,2ECXhC,szFAkEA,EAAA,MAAA,EAAA,CAAA,8uEAAA,CAAA,EAAA,CAAA,CAAA;;4FDvDa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,cAGd,KAAK,EAAA,QAAA,EAAA,szFAAA,EAAA,MAAA,EAAA,CAAA,8uEAAA,CAAA,EAAA;;0BAgBhB,MAAM;2BAAC,iBAAiB;;;METhB,sBAAsB,CAAA;AAejC,IAAA,WAAA,CACY,MAAc,EACS,UAAe,EACtC,mBAAwC,EAAA;QAFxC,IAAA,CAAA,MAAM,GAAN,MAAM;QACiB,IAAA,CAAA,UAAU,GAAV,UAAU;QACjC,IAAA,CAAA,mBAAmB,GAAnB,mBAAmB;QAhBtB,IAAA,CAAA,OAAO,GAAG,EAAE;QACrB,IAAA,CAAA,cAAc,GAAQ,EAAE;QAExB,IAAA,CAAA,WAAW,GAAG,IAAI;QAClB,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,cAAc,GAAG,KAAK;QACtB,IAAA,CAAA,mBAAmB,GAAG,KAAK;QAC3B,IAAA,CAAA,WAAW,GAAG,KAAK;QAIX,IAAA,CAAA,eAAe,GAAQ,IAAI;QAkHnC,IAAA,CAAA,sBAAsB,GAAG,KAAK;AAC9B,QAAA,IAAA,CAAA,4BAA4B,GAA0B,IAAI,YAAY,EAAE;IA7GrE;IAEH,QAAQ,GAAA;;QAEN,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;;AAG3C,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAC/CiL,QAAM,CAAC,CAAC,KAAK,KAA6B,KAAK,YAAY,aAAa,CAAC,CAC1E,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AACpB,YAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,iBAAiB,CAAC;AACrD,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AACjF,YAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,OAAO;AACnC,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,YAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE;QACvC;AACA,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;QACnC;IACF;AAEQ,IAAA,qBAAqB,CAAC,GAAW,EAAA;QACvC,IAAI,SAAS,GAAQ,IAAI;AACzB,QAAA,IAAI,cAAc,GAAG,CAAC,CAAC;QAEvB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AAC1C,YAAA,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,SAAS,EAAE;gBAClC,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC;AACrD,gBAAA,IAAI,UAAU,GAAG,cAAc,EAAE;oBAC/B,cAAc,GAAG,UAAU;oBAC3B,SAAS,GAAG,IAAI;gBAClB;YACF;QACF;AAEA,QAAA,IAAI,CAAC,eAAe,GAAG,SAAS;IAClC;IAEQ,kBAAkB,CAAC,UAAkB,EAAE,OAAY,EAAA;AACzD,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YAClB,OAAO,CAAC,CAAC;QACX;AAEA,QAAA,IAAI,YAAY,GAAG,CAAC,CAAC;AAErB,QAAA,IAAI,OAAO,CAAC,cAAc,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;AACnE,YAAA,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,cAAc,EAAE;gBAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,KAAK,CAAC;AACzD,gBAAA,IAAI,KAAK,GAAG,YAAY,EAAE;oBACxB,YAAY,GAAG,KAAK;gBACtB;YACF;QACF;aAAO;YACL,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC;QACpE;AAEA,QAAA,OAAO,YAAY;IACrB;IAEQ,mBAAmB,CAAC,UAAkB,EAAE,QAAgB,EAAA;AAC9D,QAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAEvD,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;QACtD,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;QAExD,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC;QAC5C,MAAM,aAAa,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC;QAEhD,IAAI,aAAa,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE;YAC7C,OAAO,CAAC,CAAC;QACX;QAEA,MAAM,gBAAgB,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,KAAK,KAAK,OAAO,KAAK,WAAW,CAAC,KAAK,CAAC,CAAC;QAEhG,IAAI,CAAC,gBAAgB,EAAE;AACrB,YAAA,OAAO,CAAC,CAAC,CAAC;QACZ;QAEA,OAAO,aAAa,CAAC,MAAM;IAC7B;AAGA,IAAA,eAAe,CAAC,OAAY,EAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,eAAe,KAAK,OAAO;IACzC;AAEA,IAAA,iBAAiB,CAAC,OAAY,EAAA;IAE9B;IAEA,WAAW,CAAC,KAAK,EAAE,OAAY,EAAA;QAC7B,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO;QAEtD,IAAI,eAAe,EAAE;;QAErB;aAAO;YACL,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACrC,KAAK,CAAC,cAAc,EAAE;QACxB;IACF;AAIA,IAAA,kBAAkB,CAAC,KAAU,EAAA;QAC3BC,OAAK,CAAC,MAAK;AACT,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;YAClC,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC;AACrE,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,kBAAkB,CAAC,KAAU,EAAA;AAC3B,QAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;QACnC,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC;IACrE;AAEA,IAAA,wBAAwB,CAAC,KAAU,EAAA;AACjC,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,WAAW;IACtC;AAEA,IAAA,IAAI,yBAAyB,GAAA;QAC3B,OAAO,IAAI,CAAC,sBAAsB,IAAI,CAAC,IAAI,CAAC,WAAW;IACzD;AAnJW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,wCAiBrB,cAAc,EAAA,EAAA,EAAA,KAAA,EAAAgB,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAjBf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,+GChBnC,0uFAwDA,EAAA,MAAA,EAAA,CAAA,i+TAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAlL,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDxCa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,cAGlB,KAAK,EAAA,QAAA,EAAA,0uFAAA,EAAA,MAAA,EAAA,CAAA,i+TAAA,CAAA,EAAA;;0BAmBZ,MAAM;2BAAC,cAAc;;sBAfzB;;;AElBH;;;;;;;;;;;;;;AAcE;MAYW,iBAAiB,CAAA;AAE5B,IAAA,WAAA,CACU,SAA0C,EAClB,IAAS,EACjC,MAAc,EAAA;QAFd,IAAA,CAAA,SAAS,GAAT,SAAS;QACe,IAAA,CAAA,IAAI,GAAJ,IAAI;QAC5B,IAAA,CAAA,MAAM,GAAN,MAAM;IAGhB;AAEA,IAAA,mBAAmB,CAAC,KAAK,EAAA;AACvB,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,oBAAoB,CAAC;QAC/C,KAAK,CAAC,cAAc,EAAE;QACtB,IAAI,CAAC,KAAK,EAAE;IACd;AAEA,IAAA,kBAAkB,CAAC,KAAK,EAAA;AACtB,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,kBAAkB,CAAC;QAC7C,KAAK,CAAC,cAAc,EAAE;QACtB,IAAI,CAAC,KAAK,EAAE;IACd;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;IACxB;AAxBW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,8CAIlB,eAAe,EAAA,EAAA,EAAA,KAAA,EAAAX,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAJd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,0EC1B9B,0+BAqBA,EAAA,MAAA,EAAA,CAAA,09EAAA,CAAA,EAAA,CAAA,CAAA;;4FDKa,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAN7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,cAGb,KAAK,EAAA,QAAA,EAAA,0+BAAA,EAAA,MAAA,EAAA,CAAA,09EAAA,CAAA,EAAA;;0BAMd,MAAM;2BAAC,eAAe;;;MEjBd,kBAAkB,CAAA;AAW7B,IAAA,WAAA,CACU,MAAc,EACd,UAAqB,EACM,YAA+B,EAC1D,KAAqB,EAAA;QAHrB,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,UAAU,GAAV,UAAU;QACiB,IAAA,CAAA,YAAY,GAAZ,YAAY;QACvC,IAAA,CAAA,KAAK,GAAL,KAAK;QAbN,IAAA,CAAA,WAAW,GAAG,EAAE;QAEzB,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,WAAW,GAAG,KAAK;QACnB,IAAA,CAAA,WAAW,GAAG,KAAK;QACnB,IAAA,CAAA,YAAY,GAAG,EAAE;QACjB,IAAA,CAAA,QAAQ,GAAG,EAAE;QAEb,IAAA,CAAA,SAAS,GAAQ,EAAE;IAOnB;IAEA,YAAY,GAAA;QACV,MAAM,IAAI,GAAG,EAAE;QACf,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,EAAE;AACvD,YAAA,IAAI,EAAE,IAAI;AACX,SAAA,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAW,KAAI;AACrD,YAAA,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI;YACzB,QAAQ,IAAI;AACV,gBAAA,KAAK,UAAU;oBACb;AACF,gBAAA;oBACE;;AAEN,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,UAAU,KAAI;IAEd,WAAW,GAAA;AACT,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ;QAC3C,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC;AAEjD,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,6BAA6B,EAAE;QAE/D,IAAI,GAAG,GAAG,EAAE;QACZ,QAAQ,kBAAkB;AACxB,YAAA;gBACE;;;IAGN;IAEA,6BAA6B,GAAA;;AAE3B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;;QAGrD,MAAM,YAAY,GAAoB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAEtE,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YACvD,OAAO,MAAM,CAAC;QAChB;;QAGA,OAAO,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;IAC5C;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;IACzB;IAEA,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;IAC1B;IAEA,aAAa,GAAA;AACX,QAAA,MAAM,IAAI,GAAG;AACX,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,KAAK,EAAE,aAAa;AACpB,YAAA,OAAO,EAAE,CAAA,gCAAA,CAAkC;AAC3C,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,WAAW,EAAE,6BAA6B;AAC1C,YAAA,QAAQ,EAAE,iCAAiC;AAC3C,YAAA,cAAc,EAAE;SACjB;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACtD,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,SAAS,EAAE,KAAK;AACjB,SAAA,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAW,KAAI;AACrD,YAAA,IAAI,MAAM,EAAE,SAAS,EAAE;AACrB,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;YAC5B;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,aAAa,GAAA;QACX,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC;IACtC;AAjGW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,iEAcnB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAAD,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAdhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,mHCb/B,m3FA2FA,EAAA,MAAA,EAAA,CAAA,6yOAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAgB,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAhB,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAY,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,YAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FD9Ea,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,cAGd,KAAK,EAAA,QAAA,EAAA,m3FAAA,EAAA,MAAA,EAAA,CAAA,6yOAAA,CAAA,EAAA;;0BAgBd,MAAM;2BAAC,iBAAiB;;sBAZ1B;;;AEfH;;;;;;;;;;;;;;AAcE;SAwJc,aAAa,GAAA;AACzB,IAAA,OAAO,4CAA4C,YAAY,CAAC;AACpE;MAyNa,wBAAwB,CAAA;+GAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,iBAtN7B,QAAQ;YACR,mBAAmB;YACnB,oBAAoB;YACpB,oBAAoB;YACpB,2BAA2B;YAC3B,eAAe;YACf,sBAAsB;YACtB,sBAAsB;YACtB,mBAAmB;YACnB,0BAA0B;YAC1B,iCAAiC;YACjC,mBAAmB;YACnB,sBAAsB;YACtB,uBAAuB;YACvB,2BAA2B;YAC3B,wBAAwB;YACxB,uBAAuB;YACvB,uBAAuB;YACvB,kBAAkB;YAClB,qBAAqB;YACrB,uBAAuB;YACvB,wBAAwB;YACxB,2BAA2B;YAC3B,kBAAkB;YAClB,wBAAwB;YACxB,0BAA0B;YAC1B,sBAAsB;YACtB,wBAAwB;YACxB,2BAA2B;YAC3B,0BAA0B;YAC1B,qBAAqB;YACrB,uBAAuB;YACvB,0BAA0B;YAC1B,yBAAyB;YACzB,gBAAgB;YAChB,gBAAgB;YAChB,kBAAkB;YAClB,mBAAmB;YACnB,2BAA2B;YAC3B,oBAAoB;YACpB,yBAAyB;YACzB,wBAAwB;YACxB,iBAAiB;YACjB,oBAAoB;YACpB,eAAe;YACf,uBAAuB;YACvB,kBAAkB;YAClB,mBAAmB;YACnB,kBAAkB;YAClB,wBAAwB;YACxB,4BAA4B;YAC5B,0BAA0B;YAC1B,mBAAmB;YACnB,qBAAqB;YACrB,oBAAoB;YACpB,mBAAmB;YACnB,yBAAyB;YACzB,iBAAiB;YACjB,sBAAsB;YACtB,aAAa;YACb,8BAA8B;YAC9B,qBAAqB;YACrB,4BAA4B;YAC5B,0BAA0B;YAC1B,+BAA+B;YAC/B,6BAA6B;YAC7B,0BAA0B;YAC1B,sBAAsB;YACtB,sCAAsC;YACtC,oCAAoC;YACpC,wBAAwB;YACxB,0BAA0B;YAC1B,uBAAuB;YACvB,sBAAsB;YACtB,yBAAyB;YACzB,uBAAuB;YACvB,0BAA0B;YAC1B,mCAAmC;YACnC,iCAAiC;YACjC,0BAA0B;YAC1B,oBAAoB;YACpB,0BAA0B;YAC1B,yBAAyB;YACzB,qBAAqB;YACrB,oBAAoB;YACpB,wBAAwB;YACxB,uBAAuB;YACvB,iBAAiB;YACjB,sBAAsB;YACtB,uBAAuB;YACvB,iBAAiB;YACjB,gBAAgB;YAChB,kBAAkB;YAClB,kBAAkB;YAClB,0BAA0B;YAC1B,yBAAyB;YACzB,wBAAwB;YACxB,2BAA2B;YAC3B,2BAA2B;YAC3B,oBAAoB;YACpB,kBAAkB;YAClB,qBAAqB;YACrB,wBAAwB;YACxB,uBAAuB;YACvB,kCAAkC;YAClC,0BAA0B;YAC1B,mBAAmB;YACnB,sBAAsB;YACtB,kBAAkB;YAClB,iBAAiB;YACjB,6BAA6B;YAC7B,qBAAqB;YACrB,mCAAmC;AACnC,YAAA,oCAAoC,aAqEpC,YAAY;YACZ,WAAW;YACX,eAAe;YACf,cAAc;YACd,gBAAgB;YAChB,mBAAmB;YACnB,mBAAmB;YACnB,kBAAkB;YAClB,cAAc;YACd,eAAe;YACf,eAAe;YACf,aAAa;YACb,aAAa;YACb,YAAY;YACZ,eAAe;YACf,kBAAkB;YAClB,kBAAkB;YAClB,gBAAgB;YAChB,qBAAqB;YACrB,eAAe;AACf,YAAA,uBAAuB,aAtFvB,mBAAmB;YACnB,mBAAmB;YACnB,oBAAoB;YACpB,sBAAsB;YACtB,sBAAsB;YACtB,oBAAoB;YACpB,2BAA2B;YAC3B,eAAe;YACf,sBAAsB;YACtB,mBAAmB;YACnB,4BAA4B;YAC5B,0BAA0B;YAC1B,0BAA0B;YAC1B,iCAAiC;YACjC,2BAA2B;YAC3B,0BAA0B;YAC1B,wBAAwB;YACxB,uBAAuB;YACvB,uBAAuB;YACvB,0BAA0B;YAC1B,uBAAuB;YACvB,wBAAwB;YACxB,2BAA2B;YAC3B,qBAAqB;YACrB,gBAAgB;YAChB,kBAAkB;YAClB,qBAAqB;YACrB,yBAAyB;YACzB,aAAa;YACb,2BAA2B;YAC3B,wBAAwB;YACxB,oBAAoB;YACpB,4BAA4B;YAC5B,0BAA0B;YAC1B,+BAA+B;YAC/B,wBAAwB;YACxB,uBAAuB;YACvB,uBAAuB;YACvB,sBAAsB;YACtB,yBAAyB;YACzB,uBAAuB;YACvB,oBAAoB;YACpB,0BAA0B;YAC1B,yBAAyB;YACzB,qBAAqB;YACrB,oBAAoB;YACpB,wBAAwB;YACxB,uBAAuB;YACvB,iBAAiB;YACjB,mBAAmB;YACnB,iBAAiB;YACjB,oBAAoB;YACpB,oBAAoB;YACpB,sBAAsB;YACtB,uBAAuB;YACvB,qBAAqB;YACrB,iBAAiB;YACjB,gBAAgB;YAChB,kBAAkB;YAClB,mBAAmB;YACnB,kBAAkB;YAClB,sBAAsB;YACtB,qBAAqB;YACrB,mCAAmC;YACnC,oCAAoC,CAAA,EAAA,CAAA,CAAA;AAkC/B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,SAAA,EAZQ;AACrC,YAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,qBAAqB,EAAE;AAC/D,YAAA,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,EAAE;AACzC,YAAA,oBAAoB,CAAC;AACjB,gBAAA,MAAM,EAAE;aACT,CAAC;YACJ,qBAAqB,CAAC,MAAK;gBACvB,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACvD,OAAO,aAAa,EAAE;AACxB,YAAA,CAAC,CAAC;YACA,iBAAiB,CAAC,sBAAsB,EAAE,CAAC;AAC9C,SAAA,EAAA,OAAA,EAAA,CA/BG,YAAY;YACZ,WAAW;YACX,eAAe;YACf,cAAc;YACd,gBAAgB;YAChB,mBAAmB;YACnB,mBAAmB;YACnB,kBAAkB;YAClB,cAAc;YACd,eAAe;YACf,eAAe;YACf,aAAa;YACb,aAAa;YACb,YAAY;YACZ,eAAe;YACf,kBAAkB;YAClB,kBAAkB;YAClB,gBAAgB;YAChB,qBAAqB;YACrB,eAAe;AACf,YAAA,uBAAuB,EA9DvB,gBAAgB;YAIhB,aAAa,CAAA,EAAA,CAAA,CAAA;;4FAsER,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAvNpC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,YAAY,EAAE;wBAClB,QAAQ;wBACR,mBAAmB;wBACnB,oBAAoB;wBACpB,oBAAoB;wBACpB,2BAA2B;wBAC3B,eAAe;wBACf,sBAAsB;wBACtB,sBAAsB;wBACtB,mBAAmB;wBACnB,0BAA0B;wBAC1B,iCAAiC;wBACjC,mBAAmB;wBACnB,sBAAsB;wBACtB,uBAAuB;wBACvB,2BAA2B;wBAC3B,wBAAwB;wBACxB,uBAAuB;wBACvB,uBAAuB;wBACvB,kBAAkB;wBAClB,qBAAqB;wBACrB,uBAAuB;wBACvB,wBAAwB;wBACxB,2BAA2B;wBAC3B,kBAAkB;wBAClB,wBAAwB;wBACxB,0BAA0B;wBAC1B,sBAAsB;wBACtB,wBAAwB;wBACxB,2BAA2B;wBAC3B,0BAA0B;wBAC1B,qBAAqB;wBACrB,uBAAuB;wBACvB,0BAA0B;wBAC1B,yBAAyB;wBACzB,gBAAgB;wBAChB,gBAAgB;wBAChB,kBAAkB;wBAClB,mBAAmB;wBACnB,2BAA2B;wBAC3B,oBAAoB;wBACpB,yBAAyB;wBACzB,wBAAwB;wBACxB,iBAAiB;wBACjB,oBAAoB;wBACpB,eAAe;wBACf,uBAAuB;wBACvB,kBAAkB;wBAClB,mBAAmB;wBACnB,kBAAkB;wBAClB,wBAAwB;wBACxB,4BAA4B;wBAC5B,0BAA0B;wBAC1B,mBAAmB;wBACnB,qBAAqB;wBACrB,oBAAoB;wBACpB,mBAAmB;wBACnB,yBAAyB;wBACzB,iBAAiB;wBACjB,sBAAsB;wBACtB,aAAa;wBACb,8BAA8B;wBAC9B,qBAAqB;wBACrB,4BAA4B;wBAC5B,0BAA0B;wBAC1B,+BAA+B;wBAC/B,6BAA6B;wBAC7B,0BAA0B;wBAC1B,sBAAsB;wBACtB,sCAAsC;wBACtC,oCAAoC;wBACpC,wBAAwB;wBACxB,0BAA0B;wBAC1B,uBAAuB;wBACvB,sBAAsB;wBACtB,yBAAyB;wBACzB,uBAAuB;wBACvB,0BAA0B;wBAC1B,mCAAmC;wBACnC,iCAAiC;wBACjC,0BAA0B;wBAC1B,oBAAoB;wBACpB,0BAA0B;wBAC1B,yBAAyB;wBACzB,qBAAqB;wBACrB,oBAAoB;wBACpB,wBAAwB;wBACxB,uBAAuB;wBACvB,iBAAiB;wBACjB,sBAAsB;wBACtB,uBAAuB;wBACvB,iBAAiB;wBACjB,gBAAgB;wBAChB,kBAAkB;wBAClB,kBAAkB;wBAClB,0BAA0B;wBAC1B,yBAAyB;wBACzB,wBAAwB;wBACxB,2BAA2B;wBAC3B,2BAA2B;wBAC3B,oBAAoB;wBACpB,kBAAkB;wBAClB,qBAAqB;wBACrB,wBAAwB;wBACxB,uBAAuB;wBACvB,kCAAkC;wBAClC,0BAA0B;wBAC1B,mBAAmB;wBACnB,sBAAsB;wBACtB,kBAAkB;wBAClB,iBAAiB;wBACjB,6BAA6B;wBAC7B,qBAAqB;wBACrB,mCAAmC;wBACnC;AACH,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACL,mBAAmB;wBACnB,mBAAmB;wBACnB,oBAAoB;wBACpB,sBAAsB;wBACtB,sBAAsB;wBACtB,oBAAoB;wBACpB,2BAA2B;wBAC3B,eAAe;wBACf,sBAAsB;wBACtB,mBAAmB;wBACnB,4BAA4B;wBAC5B,0BAA0B;wBAC1B,0BAA0B;wBAC1B,iCAAiC;wBACjC,2BAA2B;wBAC3B,0BAA0B;wBAC1B,wBAAwB;wBACxB,uBAAuB;wBACvB,uBAAuB;wBACvB,0BAA0B;wBAC1B,uBAAuB;wBACvB,wBAAwB;wBACxB,2BAA2B;wBAC3B,qBAAqB;wBACrB,gBAAgB;wBAChB,kBAAkB;wBAClB,qBAAqB;wBACrB,yBAAyB;wBACzB,aAAa;wBACb,2BAA2B;wBAC3B,wBAAwB;wBACxB,oBAAoB;wBACpB,4BAA4B;wBAC5B,0BAA0B;wBAC1B,+BAA+B;wBAC/B,wBAAwB;wBACxB,uBAAuB;wBACvB,uBAAuB;wBACvB,sBAAsB;wBACtB,yBAAyB;wBACzB,uBAAuB;wBACvB,oBAAoB;wBACpB,0BAA0B;wBAC1B,yBAAyB;wBACzB,qBAAqB;wBACrB,oBAAoB;wBACpB,wBAAwB;wBACxB,uBAAuB;wBACvB,iBAAiB;wBACjB,mBAAmB;wBACnB,iBAAiB;wBACjB,oBAAoB;wBACpB,oBAAoB;wBACpB,sBAAsB;wBACtB,uBAAuB;wBACvB,qBAAqB;wBACrB,iBAAiB;wBACjB,gBAAgB;wBAChB,kBAAkB;wBAClB,mBAAmB;wBACnB,kBAAkB;wBAClB,sBAAsB;wBACtB,qBAAqB;wBACrB,mCAAmC;wBACnC;AACH,qBAAA,EAAE,OAAO,EAAE;wBACR,YAAY;wBACZ,WAAW;wBACX,eAAe;wBACf,cAAc;wBACd,gBAAgB;wBAChB,mBAAmB;wBACnB,mBAAmB;wBACnB,kBAAkB;wBAClB,cAAc;wBACd,eAAe;wBACf,eAAe;wBACf,aAAa;wBACb,aAAa;wBACb,YAAY;wBACZ,eAAe;wBACf,kBAAkB;wBAClB,kBAAkB;wBAClB,gBAAgB;wBAChB,qBAAqB;wBACrB,eAAe;wBACf;AAAwB,qBAAA,EAAE,SAAS,EAAE;AACrC,wBAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,qBAAqB,EAAE;AAC/D,wBAAA,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,EAAE;AACzC,wBAAA,oBAAoB,CAAC;AACjB,4BAAA,MAAM,EAAE;yBACT,CAAC;wBACJ,qBAAqB,CAAC,MAAK;4BACvB,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;4BACvD,OAAO,aAAa,EAAE;AACxB,wBAAA,CAAC,CAAC;wBACA,iBAAiB,CAAC,sBAAsB,EAAE,CAAC;qBAC9C,EAAE;;;ACrXD,MAAO,gBAAiB,SAAQ,iBAAiB,CAAA;AAEnD,IAAA,WAAA,CACa,UAAsB,EACI,eAAqC,EAC/D,MAAc,EACd,cAA8B,EAAA;QAEvC,KAAK,CAAC,UAAU,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,CAAC;QALjD,IAAA,CAAA,UAAU,GAAV,UAAU;QACgB,IAAA,CAAA,eAAe,GAAf,eAAe;QACzC,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,cAAc,GAAd,cAAc;IAG3B;AAES,IAAA,IAAI,KAAI;IAEjB,YAAY,GAAA;IACZ;IAEA,KAAK,CAAC,MAAc,EAAE,GAAW,EAAE,QAAgB,EAAE,QAAgB,EAAE,MAAO,EAAA;IAC9E;IAEA,MAAM,GAAA;IACN;AAEA,IAAA,YAAY,CAAC,UAAkB,EAAE,QAAgB,EAAE,QAAgB,EAAE,MAAO,EAAA;IAC5E;IAEA,wBAAwB,GAAA;AACpB,QAAA,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;IAChC;AA3BS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,8CAIb,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAAZ,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAgD,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAJnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFb,MAAM,EAAA,CAAA,CAAA;;4FAET,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAKQ,MAAM;2BAAC,gBAAgB;;;ACfhC;;;;;;;;;;;;;;AAcE;AAmBI,MAAO,eAAgB,SAAQ,eAAe,CAAA;IAIhD,WAAA,CAAqB,MAAqB,EACrB,OAAuB,EACG,eAAgC,EAC1D,UAAsB,EACtB,MAAc,EAAA;QAE/B,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,CAAC;QAN1C,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,OAAO,GAAP,OAAO;QACmB,IAAA,CAAA,eAAe,GAAf,eAAe;QACzC,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,MAAM,GAAN,MAAM;AANlB,QAAA,IAAA,CAAA,eAAe,GAAG,eAAe,CAAC,sBAAsB;IASjE;AAEA,IAAA,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,EAAA;AAC7B,QAAA,IAAI,SAAS;AACb,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM;AAC5C,QAAA,MAAM,UAAU,GAAG,aAAa,GAAG,eAAe;QAClD,MAAM,IAAI,GAAG,EAAC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAC;QAErF,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAC,IAAI,EAAC,EAAE,CAAC,CAAC,IAAI,CAC3D,UAAU,CAAC,CAAC,GAAQ,KAAI;YACpB,MAAM,KAAK,GAAG,uBAAuB;AACrC,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc;gBAAE,OAAM,GAAG;AAC1C,YAAA,OAAM,EAAC,KAAK,EAAE,KAAK,EAAC;AACxB,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,OAAY,KAAI;YACjB,IAAG,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACxB,OAAM,EAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAC;YAChC;AACA,YAAA,OAAO,OAAO;QAClB,CAAC,CAAC,CACL,CACJ;IACL;IAEA,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,GAAG,KAAK,EAAA;AAChC,QAAA,IAAI,SAAS;AACb,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM;AAC5C,QAAA,MAAM,UAAU,GAAG,aAAa,GAAG,eAAe;QAClD,MAAM,IAAI,GAAG,EAAC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAC;QAE7F,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAC,IAAI,EAAC,EAAE,CAAC,CAAC,IAAI,CAC3D,UAAU,CAAC,CAAC,GAAQ,KAAI;YACpB,MAAM,KAAK,GAAG,uBAAuB;AACrC,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc;gBAAE,OAAM,GAAG;AAC1C,YAAA,OAAM,EAAC,KAAK,EAAE,KAAK,EAAC;AACxB,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,OAAY,KAAI;YACjB,IAAG,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACxB,OAAM,EAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAC;YAChC;AACA,YAAA,OAAO,OAAO;QAClB,CAAC,CAAC,CACL,CACJ;IACL;IAEA,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,GAAG,KAAK,EAAA;AAClC,QAAA,IAAI,SAAS;AACb,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM;AAC5C,QAAA,MAAM,UAAU,GAAG,aAAa,GAAG,eAAe;QAClD,MAAM,IAAI,GAAG,EAAC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAC;QAE7F,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAC,IAAI,EAAC,EAAE,CAAC,CAAC,IAAI,CAC3D,UAAU,CAAC,CAAC,GAAQ,KAAI;YACpB,MAAM,KAAK,GAAG,uBAAuB;AACrC,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc;gBAAE,OAAM,GAAG;AAC1C,YAAA,OAAM,EAAC,KAAK,EAAE,KAAK,EAAC;AACxB,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,OAAY,KAAI;YACjB,IAAG,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACxB,OAAM,EAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAC;YAChC;AACA,YAAA,OAAO,OAAO;QAClB,CAAC,CAAC,CACL,CACJ;IACL;IAEA,KAAK,CAAC,IAAY,EAAE,MAAW,EAAE,UAAuB,EAAE,EAAE,GAAI,EAAE,SAAU,EAAA;AACxE,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM;AAC5C,QAAA,MAAM,UAAU,GAAG,aAAa,GAAG,WAAW;QAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC;AACpD,QAAA,MAAM,CAAC,MAAM,GAAG,SAAS;AACzB,QAAA,MAAM,IAAI,GAAQ,EAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAC;QACxD,IAAI,SAAS,EAAE;;;AAGX,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;YACrB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,eAAe,EAAE,QAAQ,EAAE,sBAAsB;QAC/E;QAEA,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAC,IAAI,EAAC,EAAE,CAAC,CAAC,IAAI,CAC3D,UAAU,CAAC,CAAC,GAAQ,KAAI;YACpB,MAAM,KAAK,GAAG,uBAAuB;AACrC,YAAA,IAAI,GAAG,CAAC,IAAI,IAAI,cAAc;gBAAE,OAAM,EAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAC;AACvD,YAAA,OAAM,EAAC,KAAK,EAAE,KAAK,EAAC;AACxB,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,OAAY,KAAI;AACjB,YAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACf,gBAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;YAC7B;AACA,YAAA,OAAO,OAAO;QAClB,CAAC,CAAC,CACL,CACJ;IACL;AAEA,IAAA,YAAY,CAAC,UAAkB,EAAE,EAAO,EAAE,QAAgB,EAAA;AACtD,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM;AAC5C,QAAA,MAAM,UAAU,GAAG,aAAa,GAAG,cAAc;QACjD,MAAM,IAAI,GAAG,EAAC,GAAG,EAAC,CAAA,EAAA,EAAK,UAAU,IAAI,EAAE,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE;QACzF,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAC7D,UAAU,CAAC,CAAC,GAAQ,KAAI;YACpB,MAAM,KAAK,GAAG,uBAAuB;AACrC,YAAA,IAAI,GAAG,CAAC,IAAI,IAAI,cAAc;gBAAE,OAAM,EAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAC;AACvD,YAAA,OAAM,EAAC,KAAK,EAAE,KAAK,EAAC;AACxB,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,OAAY,KAAI;YACjB,IAAG,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACxB,OAAM,EAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAC;YAChC;AAAO,iBAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACtB,gBAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;YAC7B;AACA,YAAA,IAAI,OAAO,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE;AAC3B,gBAAA,OAAO,CAAC,IAAI,GAAG,EAAE;YACrB;AACA,YAAA,OAAO,OAAO;QAClB,CAAC,CAAC,CACL,CACJ;IACL;AAES,IAAA,WAAW,CAAC,UAAkB,EAAE,EAAO,EAAE,QAAgB,EAAE,IAAS,EAAA;AACzE,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM;AAC5C,QAAA,MAAM,UAAU,GAAG,aAAa,GAAG,cAAc;AACjD,QAAA,MAAM,IAAI,GAAG;AACT,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,UAAU,EAAE,UAAU;AACtB,YAAA,EAAE,EAAE,EAAE;AACN,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,IAAI,EAAE;SACT;QACD,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAC7D,UAAU,CAAC,CAAC,GAAQ,KAAI;YACpB,MAAM,KAAK,GAAG,uBAAuB;AACrC,YAAA,IAAI,GAAG,CAAC,IAAI,IAAI,cAAc;gBAAE,OAAM,EAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAC;AACvD,YAAA,OAAM,EAAC,KAAK,EAAE,KAAK,EAAC;AACxB,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,OAAY,KAAI;YACjB,IAAG,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACxB,OAAM,EAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAC;YAChC;AACA,YAAA,OAAO,OAAO;QAClB,CAAC,CAAC,CACL,CACJ;IACL;IAES,eAAe,CAAC,EAAU,EAAE,IAAS,EAAA;AAC1C,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM;AAC5C,QAAA,MAAM,UAAU,GAAG,aAAa,GAAG,kBAAkB;QACrD,MAAM,OAAO,GAAGnB,QAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC;AACvD,QAAA,MAAM,IAAI,GAAG;AACT,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,EAAE,EAAE;SACP;QACD,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAC7D,UAAU,CAAC,CAAC,GAAQ,KAAI;YACpB,MAAM,KAAK,GAAG,uBAAuB;AACrC,YAAA,IAAI,GAAG,CAAC,IAAI,IAAI,cAAc;gBAAE,OAAM,EAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAC;AACvD,YAAA,OAAM,EAAC,KAAK,EAAE,KAAK,EAAC;AACxB,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,OAAY,KAAI;YACjB,IAAG,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACxB,OAAM,EAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAC;YAChC;AACA,YAAA,OAAO,OAAO;QAClB,CAAC,CAAC,CACL,CACJ;IACL;AAES,IAAA,gBAAgB,CAAC,YAAoB,EAAA;AAC5C,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM;AAC5C,QAAA,MAAM,UAAU,GAAG,aAAa,GAAG,uBAAuB;AAC1D,QAAA,MAAM,IAAI,GAAG;AACX,YAAA,EAAE,EAAE;SACL;QACD,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CACjE,UAAU,CAAC,CAAC,GAAQ,KAAI;YACtB,MAAM,KAAK,GAAG,uBAAuB;AACrC,YAAA,IAAI,GAAG,CAAC,IAAI,IAAI,cAAc;gBAAE,OAAM,EAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAC;AACvD,YAAA,OAAM,EAAC,KAAK,EAAE,KAAK,EAAC;AACtB,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,OAAY,KAAI;YACnB,IAAG,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBAC1B,OAAM,EAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAC;YAC9B;AACA,YAAA,OAAO,OAAO;QAChB,CAAC,CAAC,CACH,CACF;IACH;IAES,iBAAiB,CAAC,EAAU,EAAE,IAAY,EAAA;AAC/C,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM;AAC5C,QAAA,MAAM,UAAU,GAAG,aAAa,GAAG,oBAAoB;QACvD,MAAM,OAAO,GAAGA,QAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC;AACvD,QAAA,MAAM,IAAI,GAAG;AACT,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,EAAE,EAAE;SACP;QACD,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAC7D,UAAU,CAAC,CAAC,GAAQ,KAAI;YACpB,MAAM,KAAK,GAAG,uBAAuB;AACrC,YAAA,IAAI,GAAG,CAAC,IAAI,IAAI,cAAc;gBAAE,OAAM,EAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAC;AACvD,YAAA,OAAM,EAAC,KAAK,EAAE,KAAK,EAAC;AACxB,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,OAAY,KAAI;YACjB,IAAG,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACxB,OAAM,EAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAC;YAChC;AACA,YAAA,OAAO,OAAO;QAClB,CAAC,CAAC,CACL,CACJ;IACL;AAEA,IAAA,QAAQ,CAAC,EAAE,EAAA;AACP,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM;AAC5C,QAAA,MAAM,UAAU,GAAG,aAAa,GAAG,UAAU;AAC7C,QAAA,MAAM,OAAO,GAAG;AACZ,YAAA,IAAI,EAAE;AACF,gBAAA,EAAE,EAAE;AACP;SACJ;QACD,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,CAC9D,UAAU,CAAC,CAAC,GAAQ,KAAI;YACpB,MAAM,KAAK,GAAG,uBAAuB;AACrC,YAAA,IAAI,GAAG,CAAC,IAAI,IAAI,cAAc;gBAAE,OAAM,EAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAC;AACvD,YAAA,OAAM,EAAC,KAAK,EAAE,KAAK,EAAC;AACxB,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,OAAY,KAAI;YACjB,IAAG,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACxB,OAAM,EAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAC;YAChC;AACA,YAAA,OAAO,OAAO;QAClB,CAAC,CAAC,CACL,CACJ;IACL;AAEA,IAAA,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAA;AACvC,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM;AAC5C,QAAA,MAAM,UAAU,GAAG,aAAa,GAAG,YAAY;AAC/C,QAAA,MAAM,OAAO,GAAG;AACZ,YAAA,IAAI,EAAE;AACF,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,WAAW,EAAE,OAAO;AACpB,gBAAA,OAAO,EAAE;AACZ;SACJ;QACD,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,CAC9D,UAAU,CAAC,CAAC,GAAQ,KAAI;YACpB,MAAM,KAAK,GAAG,uBAAuB;AACrC,YAAA,IAAI,GAAG,CAAC,IAAI,IAAI,cAAc;gBAAE,OAAM,EAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAC;AACvD,YAAA,OAAM,EAAC,KAAK,EAAE,KAAK,EAAC;AACxB,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,OAAY,KAAI;YACjB,IAAG,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACxB,OAAM,EAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAC;YAChC;AACA,YAAA,OAAO,OAAO;QAClB,CAAC,CAAC,CACL,CACJ;IACL;AAES,IAAA,aAAa,CAAC,UAAkB,EAAE,EAAO,EAAE,QAAgB,EAAE,IAAS,EAAA;AAC3E,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM;AAC5C,QAAA,MAAM,UAAU,GAAG,aAAa,GAAG,cAAc;AACjD,QAAA,MAAM,IAAI,GAAG;AACT,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,UAAU,EAAE,UAAU;AACtB,YAAA,EAAE,EAAE,EAAE;AACN,YAAA,KAAK,EAAE,QAAQ;AACf,YAAA,IAAI,EAAE;SACT;QACD,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAC7D,UAAU,CAAC,CAAC,GAAQ,KAAI;YACpB,MAAM,KAAK,GAAG,uBAAuB;AACrC,YAAA,IAAI,GAAG,CAAC,IAAI,IAAI,cAAc;gBAAE,OAAM,EAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAC;AACvD,YAAA,OAAM,EAAC,KAAK,EAAE,KAAK,EAAC;AACxB,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,OAAY,KAAI;YACjB,IAAG,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACxB,OAAM,EAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAC;YAChC;AACA,YAAA,OAAO,OAAO;QAClB,CAAC,CAAC,CACL,CACJ;IACL;IAEA,MAAM,CAAC,IAAY,EAAE,EAAU,EAAA;AAC3B,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM;AAC5C,QAAA,MAAM,UAAU,GAAG,aAAa,GAAG,aAAa;AAChD,QAAA,MAAM,IAAI,GAAG,EAAC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAC;QAEjE,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAC,IAAI,EAAC,EAAE,CAAC,CAAC,IAAI,CAC3D,UAAU,CAAC,CAAC,GAAQ,KAAI;YACpB,MAAM,KAAK,GAAG,uBAAuB;AACrC,YAAA,IAAI,GAAG,CAAC,IAAI,IAAI,cAAc;gBAAE,OAAM,EAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAC;AACvD,YAAA,OAAM,EAAC,KAAK,EAAE,KAAK,EAAC;AACxB,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,OAAY,KAAI;YACjB,IAAG,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACxB,OAAM,EAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAC;YAChC;AACA,YAAA,OAAO,OAAO;QAClB,CAAC,CAAC,CACL,CACJ;IACL;IAEA,IAAI,CAAC,GAAG,EAAE,MAAe,EAAA;AACrB,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM;AAC5C,QAAA,MAAM,UAAU,GAAG,aAAa,GAAG,WAAW;AAC9C,QAAA,MAAM,IAAI,GAAG,EAAC,GAAG,EAAE,GAAG,EAAC;QAEvB,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAC,IAAI,EAAC,EAAE,CAAC,CAAC,IAAI,CAC3D,UAAU,CAAC,CAAC,GAAQ,KAAI;YACpB,MAAM,KAAK,GAAG,uBAAuB;AACrC,YAAA,IAAI,GAAG,CAAC,IAAI,IAAI,cAAc;gBAAE,OAAM,EAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAC;AACvD,YAAA,OAAM,EAAC,KAAK,EAAE,KAAK,EAAC;AACxB,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,OAAY,KAAI;YACjB,IAAG,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACxB,OAAM,EAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAC;YAChC;AACA,YAAA,OAAO,OAAO;QAClB,CAAC,CAAC,CACL,CACJ;IACL;AAEA;;AAEG;IACH,iBAAiB,CAAC,GAAW,EAAE,MAAe,EAAA;QAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;IACjC;AAEA,IAAA,MAAM,CAAC,IAAS,EAAA;AACZ,QAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE;AAC/B,QAAA,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;YAC1C,OAAO,MAAM,CAAC,MAAM;AACxB,QAAA,CAAC,CAAC;IACN;IAEQ,YAAY,CAAC,MAAM,EAAE,OAAc,EAAA;QACvC,IAAI,SAAS,GAAG,EAAE;QAClB,IAAI,UAAU,GAAG,MAAM;AACvB,QAAA,IAAI,QAAQ,GAAG,OAAO,EAAE,MAAM,IAAI,CAAC;AACnC,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE;YACjB,MAAM,GAAG,EAAE;QACf;QACA,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI,EAAE;YAC/B,IAAI,MAAM,CAAC,QAAQ;AAAE,gBAAA,UAAU,GAAG,MAAM,CAAC,QAAQ;YACjD,IAAI,MAAM,CAAC,QAAQ;gBAAE,QAAQ,GAAG,IAAI;YACpC,IAAI,CAAC,MAAM,CAAC,MAAM;AAAE,gBAAA,MAAM,CAAC,MAAM,GAAG,EAAE;AACtC,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;AACjD,gBAAA,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACrD;QACJ;QACA,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,KAAI;YAC9B,IAAI,SAAS,GAAG,EAAE;AAClB,YAAA,QAAQ,MAAM,CAAC,IAAI;AACf,gBAAA,KAAK,WAAW;AACZ,oBAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,UAAU;AACnD,oBAAA,SAAS,GAAG,CAAA,EAAG,MAAM,CAAC,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAA,EAAA,EAAK,MAAM,CAAC,KAAK,CAAA,CAAA,CAAG;AAC1D,oBAAA,IAAI,MAAM,CAAC,SAAS,EAAE;AAClB,wBAAA,MAAM,CAAC,SAAS,GAAG,IAAI;oBAC3B;oBACA;AACJ,gBAAA,KAAK,QAAQ;AACb,gBAAA,KAAK,OAAO;AACR,oBAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAA,EAAG,MAAM,CAAC,KAAK,CAAA,CAAE,GAAG,CAAA,CAAA,EAAI,MAAM,CAAC,KAAK,GAAG;oBACvG,SAAS,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAA,GAAA,EAAM,GAAG,EAAE;oBACzC;AACJ,gBAAA,KAAK,UAAU;AACX,oBAAA,MAAM,CAAC,SAAS,GAAG,IAAI;oBACvB,SAAS,GAAG,CAAA,EAAG,MAAM,CAAC,QAAQ,gBAAgB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,QAAQ,CAAA,aAAA,EAAgB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG;oBACvH;AACJ,gBAAA,KAAK,WAAW;AACZ,oBAAA,MAAM,CAAC,SAAS,GAAG,IAAI;AACvB,oBAAA,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC;oBAClE;AACJ,gBAAA;oBACI,SAAS,GAAG,CAAA,EAAG,MAAM,CAAC,QAAQ,cAAc,MAAM,CAAC,KAAK,CAAA,CAAA,CAAG;oBAC3D;;AAER,YAAA,IAAI,KAAK,IAAI,CAAC,EAAE;AACZ,gBAAA,SAAS,GAAG,CAAA,EAAG,SAAS,CAAA,CAAE;YAC9B;iBAAO;AACH,gBAAA,SAAS,IAAI,CAAA,KAAA,EAAQ,SAAS,CAAA,CAAE;YACpC;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,SAAS;IACpB;IAEA,kBAAkB,CAAC,GAAG,EAAE,QAAQ,EAAA;QAC5B,IAAI,MAAM,GAAG,EAAE;AACf,QAAA,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;YACd,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AACxB,gBAAA,IAAI,KAAK,GAAG,CAAC,EAAE;oBACX,MAAM,IAAI,MAAM;gBACpB;AACA,gBAAA,MAAM,IAAI,CAAA,MAAA,EAAS,QAAQ,CAAA,KAAA,EAAQ,IAAI,GAAG;AAC9C,YAAA,CAAC,CAAC;QACN;aAAO;AACH,YAAA,MAAM,GAAG,CAAA,MAAA,EAAS,QAAQ,CAAA,KAAA,EAAQ,GAAG,GAAG;QAC5C;AACA,QAAA,OAAO,MAAM;IACjB;AAEA,IAAA,WAAW,CAAC,OAAO,EAAA;QACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC;IACrC;AA9aS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,uEAMJ,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAAd,IAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAN3B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFZ,MAAM,EAAA,CAAA,CAAA;;4FAET,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAOgB,MAAM;2BAAC,gBAAgB;;;ACvCxC;;;;;;;;;;;;;;AAcE;AAmBI,MAAO,yBAA0B,SAAQ,eAAe,CAAA;IAE1D,WAAA,CAAqB,MAAqB,EACrB,OAAuB,EACN,eAAgC,EACjD,UAAsB,EACtB,MAAc,EAAA;QAE/B,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,CAAC;QAN1C,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,OAAO,GAAP,OAAO;QAEP,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,MAAM,GAAN,MAAM;IAG3B;IAEA,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,EAAE,WAAY,EAAA;QAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,IAAI,EAAE;AAC1D,QAAA,MAAM,MAAM,GAAG,WAAW,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,qBAAqB;QAChF,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,sBAAsB;QAChE,MAAM,UAAU,GAAG,GAAG,GAAG,MAAM,GAAG,GAAG,GAAG,IAAI;QAC5C,IAAI,OAAO,GAAG,EAAE;QAChB,IAAI,WAAW,EAAE;AACb,YAAA,MAAM,OAAO,GAAG;AACZ,gBAAA,cAAc,EAAE;aACnB;AACD,YAAA,OAAO,GAAG,EAAE,OAAO,EAAE;QACzB;QACA,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,CACnE,UAAU,CAAC,CAAC,GAAQ,KAAI;YACpB,MAAM,KAAK,GAAG,uBAAuB;AACrC,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc;gBAAE,OAAM,GAAG;AAC1C,YAAA,OAAM,EAAC,KAAK,EAAE,KAAK,EAAC;AACxB,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,MAAW,KAAI;AAChB,YAAA,OAAO,MAAM;QACjB,CAAC,CAAC,CACL,CACJ;IACL;IAEA,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,GAAG,KAAK,EAAA;QAChC,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,IAAI,EAAE;AAC1D,QAAA,MAAM,MAAM,GAAG,WAAW,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,qBAAqB;QAChF,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,sBAAsB;AAChE,QAAA,MAAM,UAAU,GAAG,GAAG,GAAG,MAAM,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,EAAE;QACvD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC;QAE5C,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAC7D,UAAU,CAAC,CAAC,GAAQ,KAAI;YACpB,MAAM,KAAK,GAAG,uBAAuB;AACrC,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc;gBAAE,OAAM,GAAG;AAC1C,YAAA,OAAM,EAAC,KAAK,EAAE,KAAK,EAAC;AACxB,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,MAAW,KAAI;AAChB,YAAA,OAAO,MAAM;QACjB,CAAC,CAAC,CACL,CACJ;IACL;IAEA,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,GAAG,KAAK,EAAA;QAClC,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,IAAI,EAAE;AAC1D,QAAA,MAAM,MAAM,GAAG,WAAW,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,qBAAqB;QAChF,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,sBAAsB;AAChE,QAAA,MAAM,UAAU,GAAG,GAAG,GAAG,MAAM,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,EAAE;QACvD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC;QAE5C,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAC/D,UAAU,CAAC,CAAC,GAAQ,KAAI;YACpB,MAAM,KAAK,GAAG,uBAAuB;AACrC,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc;gBAAE,OAAM,GAAG;AAC1C,YAAA,OAAM,EAAC,KAAK,EAAE,KAAK,EAAC;AACxB,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,MAAW,KAAI;AAChB,YAAA,OAAO,MAAM;QACjB,CAAC,CAAC,CACL,CACJ;IACL;IAEA,KAAK,CAAC,IAAY,EAAE,MAAW,EAAE,UAAuB,EAAE,EAAE,GAAI,EAAE,SAAU,EAAA;QACxE,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,IAAI,EAAE;AAC1D,QAAA,MAAM,aAAa,GAAG,WAAW,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,qBAAqB;QACvF,MAAM,SAAS,GAAG,iBAAiB;QACnC,MAAM,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa;QACpD,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,sBAAsB;QAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC;QACpD,MAAM,UAAU,GAAG,GAAG,GAAG,MAAM,GAAG,GAAG,GAAG,IAAI,GAAG,SAAS;QAExD,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAC,EAAE,CAAC,CAAC,IAAI,CACrD,UAAU,CAAC,CAAC,GAAQ,KAAI;YACpB,MAAM,KAAK,GAAG,uBAAuB;AACrC,YAAA,IAAI,GAAG,CAAC,IAAI,IAAI,cAAc;gBAAE,OAAM,EAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAC;AACvD,YAAA,OAAM,EAAC,KAAK,EAAE,KAAK,EAAC;AACxB,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,OAAY,KAAI;AACjB,YAAA,OAAO,OAAO;QAClB,CAAC,CAAC,CACL,CACJ;IACL;AAEA,IAAA,YAAY,CAAC,UAAkB,EAAE,EAAO,EAAE,QAAgB,EAAE,MAAY,EAAE,WAAiB,EAAE,OAAA,GAAiB,EAAE,EAAA;QAC5G,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,IAAI,EAAE;AAC1D,QAAA,MAAM,MAAM,GAAG,WAAW,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,qBAAqB;QAEhF,IAAI,SAAS,GAAG,EAAE;AAClB,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAClB,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC;QAClD;QACA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,sBAAsB,GAAG,GAAG,MAAM,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA,EAAI,EAAE,IAAI,QAAQ,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE;QAE3H,IAAI,OAAO,GAAQ,EAAE;QACrB,IAAI,WAAW,EAAE;AACb,YAAA,MAAM,OAAO,GAAG;AACZ,gBAAA,QAAQ,EAAE,WAAW;AACrB,gBAAA,cAAc,EAAE;aACnB;AACD,YAAA,OAAO,GAAG,EAAE,OAAO,EAAE;YACrB,IAAI,WAAW,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;AAC7C,gBAAA,OAAO,CAAC,YAAY,GAAG,MAAM;YACjC;QACJ;QAEA,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,CACpD,UAAU,CAAC,CAAC,GAAQ,KAAI;YACpB,MAAM,KAAK,GAAG,uBAAuB;AACrC,YAAA,IAAI,GAAG,CAAC,IAAI,IAAI,cAAc;gBAAE,OAAM,EAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAC;AACvD,YAAA,OAAM,EAAC,KAAK,EAAE,KAAK,EAAC;QACxB,CAAC,CAAC,CACL,CACJ;IACL;AAEA,IAAA,WAAW,CAAC,UAAkB,EAAE,EAAO,EAAE,QAAgB,EAAE,MAAW,EAAA;QAClE,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,IAAI,EAAE;AAC1D,QAAA,MAAM,MAAM,GAAG,WAAW,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,qBAAqB;AAChF,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,sBAAsB,GAAG,CAAA,EAAG,MAAM,IAAI,UAAU,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,QAAQ,EAAE;QAE9G,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CACxD,UAAU,CAAC,CAAC,GAAQ,KAAI;YACpB,MAAM,KAAK,GAAG,uBAAuB;AACrC,YAAA,IAAI,GAAG,CAAC,IAAI,IAAI,cAAc;gBAAE,OAAM,EAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAC;AACvD,YAAA,OAAM,EAAC,KAAK,EAAE,KAAK,EAAC;QACxB,CAAC,CAAC,CACL,CACJ;IACL;AAEA,IAAA,aAAa,CAAC,UAAkB,EAAE,EAAO,EAAE,QAAgB,EAAE,MAAW,EAAA;QACpE,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,IAAI,EAAE;AAC1D,QAAA,MAAM,MAAM,GAAG,WAAW,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,qBAAqB;AAChF,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,sBAAsB,GAAG,CAAA,EAAG,MAAM,IAAI,UAAU,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,QAAQ,EAAE;QAE9G,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC,CAAC,IAAI,CAC9D,UAAU,CAAC,CAAC,GAAQ,KAAI;YACpB,MAAM,KAAK,GAAG,uBAAuB;AACrC,YAAA,IAAI,GAAG,CAAC,IAAI,IAAI,cAAc;gBAAE,OAAM,EAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAC;AACvD,YAAA,OAAM,EAAC,KAAK,EAAE,KAAK,EAAC;QACxB,CAAC,CAAC,CACL,CACJ;IACL;IAES,eAAe,CAAC,EAAU,EAAE,IAAS,EAAA;QAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,IAAI,EAAE;AAC1D,QAAA,MAAM,MAAM,GAAG,WAAW,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,qBAAqB;AAChF,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,sBAAsB,GAAG,CAAA,EAAG,MAAM,CAAA,gBAAA,EAAmB,EAAE,CAAC,IAAI,EAAE,YAAY;AACpH,QAAA,MAAM,SAAS,GAAGc,QAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;AAClD,QAAA,MAAM,IAAI,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE;QACrC,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,IAAI,CAClD,UAAU,CAAC,CAAC,GAAQ,KAAI;YACpB,MAAM,KAAK,GAAG,uBAAuB;AACrC,YAAA,IAAI,GAAG,CAAC,IAAI,IAAI,cAAc;gBAAE,OAAM,EAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAC;AACvD,YAAA,OAAM,EAAC,KAAK,EAAE,KAAK,EAAC;QACxB,CAAC,CAAC,CACL,CACJ;IACL;AAES,IAAA,gBAAgB,CAAC,YAAoB,EAAA;QAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,IAAI,EAAE;AAC1D,QAAA,MAAM,MAAM,GAAG,WAAW,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,qBAAqB;AAChF,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,sBAAsB,GAAG,CAAA,EAAG,MAAM,CAAA,aAAA,EAAgB,YAAY,EAAE;AAC1G,QAAA,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAClD,UAAU,CAAC,CAAC,GAAQ,KAAI;YACtB,MAAM,KAAK,GAAG,uBAAuB;AACrC,YAAA,IAAI,GAAG,CAAC,IAAI,IAAI,cAAc;gBAAE,OAAM,EAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAC;AACvD,YAAA,OAAM,EAAC,KAAK,EAAE,KAAK,EAAC;QACtB,CAAC,CAAC,CACH,CACF;IACH;IAES,iBAAiB,CAAC,EAAU,EAAE,IAAI,EAAA;QACvC,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,IAAI,EAAE;AAC1D,QAAA,MAAM,MAAM,GAAG,WAAW,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,qBAAqB;AAChF,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,sBAAsB,GAAG,CAAA,EAAG,MAAM,CAAA,aAAA,EAAgB,EAAE,UAAU;AACxG,QAAA,MAAM,SAAS,GAAGA,QAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;AAClD,QAAA,MAAM,IAAI,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE;QACrC,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,IAAI,CAClD,UAAU,CAAC,CAAC,GAAQ,KAAI;YACpB,MAAM,KAAK,GAAG,uBAAuB;AACrC,YAAA,IAAI,GAAG,CAAC,IAAI,IAAI,cAAc;gBAAE,OAAM,EAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAC;AACvD,YAAA,OAAM,EAAC,KAAK,EAAE,KAAK,EAAC;QACxB,CAAC,CAAC,CACL,CACJ;IACL;AAEA,IAAA,QAAQ,CAAC,EAAE,EAAA;QACP,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,IAAI,EAAE;AAC1D,QAAA,MAAM,MAAM,GAAG,WAAW,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,qBAAqB;AAChF,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,sBAAsB,GAAG,CAAA,EAAG,MAAM,CAAA,YAAA,EAAe,EAAE,MAAM;AACnG,QAAA,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAC9C,UAAU,CAAC,CAAC,GAAQ,KAAI;YACpB,MAAM,KAAK,GAAG,uBAAuB;AACrC,YAAA,IAAI,GAAG,CAAC,IAAI,IAAI,cAAc;gBAAE,OAAM,EAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAC;AACvD,YAAA,OAAM,EAAC,KAAK,EAAE,KAAK,EAAC;QACxB,CAAC,CAAC,CACL,CACJ;IACL;AAEA,IAAA,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAA;QACvC,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,IAAI,EAAE;AAC1D,QAAA,MAAM,MAAM,GAAG,WAAW,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,qBAAqB;AAChF,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,sBAAsB,GAAG,CAAA,EAAG,MAAM,yDAAyD;AACnJ,QAAA,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,mBAAwB,KAAI;YAC5F,MAAM,EAAE,GAAG,mBAAmB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;YAC1C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ;AACrD,YAAA,MAAM,MAAM,GAAG;AACX,gBAAA,eAAe,EAAE,OAAO;AACxB,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,QAAQ,EAAE;aACb;AACD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,sBAAsB,GAAG,CAAA,EAAG,MAAM,CAAA,iCAAA,EAAoC,EAAE,EAAE;AACzH,YAAA,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAChE,QAAA,CAAC,CAAC;IACN;IAEA,MAAM,CAAC,IAAY,EAAE,EAAU,EAAA;QAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,IAAI,EAAE;AAC1D,QAAA,MAAM,MAAM,GAAG,WAAW,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,qBAAqB;QAChF,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,sBAAsB;AAChE,QAAA,MAAM,UAAU,GAAG,GAAG,GAAG,MAAM,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,EAAE;QAEvD,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,CACzD,UAAU,CAAC,CAAC,GAAQ,KAAI;YACpB,MAAM,KAAK,GAAG,uBAAuB;AACrC,YAAA,IAAI,GAAG,CAAC,IAAI,IAAI,cAAc;AAAE,gBAAA,MAAM,GAAG;AACzC,YAAA,OAAM,EAAC,KAAK,EAAE,KAAK,EAAC;AACxB,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,OAAY,KAAI;AACjB,YAAA,OAAO,OAAO;QAClB,CAAC,CAAC,CACL,CACJ;IACL;IAEA,IAAI,CAAC,OAAO,EAAE,MAAO,EAAA;QACjB,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,IAAI,EAAE;AAC1D,QAAA,MAAM,GAAG,MAAM,IAAI,WAAW,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,qBAAqB;QACpF,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,sBAAsB;QAChE,MAAM,UAAU,GAAG,GAAG,GAAG,MAAM,GAAG,GAAG,GAAG,OAAO;QAE/C,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,CACtD,UAAU,CAAC,CAAC,GAAQ,KAAI;YACpB,MAAM,KAAK,GAAG,uBAAuB;AACrC,YAAA,IAAI,GAAG,CAAC,IAAI,IAAI,cAAc;gBAAE,OAAM,EAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAC;AACvD,YAAA,OAAM,EAAC,KAAK,EAAE,KAAK,EAAC;AACxB,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,OAAY,KAAI;AACjB,YAAA,OAAO,OAAO;QAClB,CAAC,CAAC,CACL,CACJ;IACL;AAEA;;;;;AAKG;AACH,IAAA,MAAM,iBAAiB,CAAC,OAAe,EAAE,MAAe,EAAA;;QAEpD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,EAAE;;YAErC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;QACrC;;QAGA,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE;QAC3D,IAAI,CAAC,WAAW,EAAE;;YAEd,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;QACrC;QAEA,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,IAAI,EAAE;AAC1D,QAAA,MAAM,GAAG,MAAM,IAAI,WAAW,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,qBAAqB;;QAGpF,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE;;QAG7D,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;QACnD,MAAM,kBAAkB,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE;;;QAInE,MAAM,kBAAkB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,UAAe,KAAI;AAChE,YAAA,OAAO,UAAU,CAAC,QAAQ,KAAK,KAAK;AACxC,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE;;YAEjC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;QACrC;;QAGA,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,UAAe,KAAI;AACxD,YAAA,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG;YACpC,MAAM,UAAU,GAAG,aAAa,GAAG,MAAM,GAAG,GAAG,GAAG,OAAO;;;YAIzD,IAAI,OAAO,GAAQ,EAAE;;;YAKrB,OAAO,cAAc,CACjB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAC7C,GAAG,CAAC,CAAC,OAAY,MAAM;AACnB,gBAAA,OAAO,EAAE,IAAI;gBACb,GAAG,EAAE,UAAU,CAAC,GAAG;AACnB,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,KAAK,EAAE;AACV,aAAA,CAAC,CAAC,EACH,UAAU,CAAC,CAAC,GAAQ,KAAI;gBACpB,OAAO,OAAO,CAAC,OAAO,CAAC;AACnB,oBAAA,OAAO,EAAE,KAAK;oBACd,GAAG,EAAE,UAAU,CAAC,GAAG;AACnB,oBAAA,IAAI,EAAE,IAAI;AACV,oBAAA,KAAK,EAAE,GAAG,CAAC,OAAO,IAAI;AACzB,iBAAA,CAAC;YACN,CAAC,CAAC,CACL,CACJ;AACL,QAAA,CAAC,CAAC;;QAGF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;;AAG3C,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;AACjD,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;AAE9C,QAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;;AAEzB,YAAA,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC;QAC3D;;AAGA,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;;QAGrE,OAAO;AACH,YAAA,GAAG,UAAU;AACb,YAAA,WAAW,EAAE;gBACT,gBAAgB,EAAE,kBAAkB,CAAC,MAAM;gBAC3C,qBAAqB,EAAE,UAAU,CAAC,MAAM;gBACxC,iBAAiB,EAAE,MAAM,CAAC,MAAM;gBAChC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK;oBAC3B,GAAG,EAAE,CAAC,CAAC,GAAG;oBACV,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,KAAK,EAAE,CAAC,CAAC;AACZ,iBAAA,CAAC;AACL;SACJ;IACL;AAEA;;;;AAIG;AACK,IAAA,gBAAgB,CAAC,SAAgB,EAAA;AACrC,QAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AACxB,YAAA,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;QACvB;AAEA,QAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AACxB,YAAA,OAAO,SAAS,CAAC,CAAC,CAAC;QACvB;;QAGA,MAAM,OAAO,GAAU,EAAE;AACzB,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU;AAEjC,QAAA,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAG;AACzB,YAAA,MAAM,IAAI,GAAG,QAAQ,EAAE,IAAI,IAAI,EAAE;AACjC,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACrB,gBAAA,IAAI,CAAC,OAAO,CAAC,CAAC,IAAS,KAAI;;AAEvB,oBAAA,IAAI,IAAI,CAAC,EAAE,EAAE;wBACT,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;AACvB,4BAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AACpB,4BAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;wBACtB;oBACJ;yBAAO;;AAEH,wBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;oBACtB;AACJ,gBAAA,CAAC,CAAC;YACN;AACJ,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,aAAa,GAAG,SAAS,CAAC,CAAC,CAAC;AAClC,QAAA,MAAM,IAAI,GAAG,aAAa,EAAE,IAAI,IAAI,EAAE;QAEtC,OAAO;AACH,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,IAAI,EAAE;AACF,gBAAA,GAAG,IAAI;AACP,gBAAA,UAAU,EAAE;oBACR,GAAG,IAAI,CAAC,UAAU;oBAClB,UAAU,EAAE,OAAO,CAAC;AACvB;AACJ;SACJ;IACL;IAEQ,YAAY,CAAC,MAAM,EAAE,OAAc,EAAA;QACvC,IAAI,SAAS,GAAG,EAAE;QAClB,IAAI,UAAU,GAAG,MAAM;AACvB,QAAA,IAAI,QAAQ,GAAG,OAAO,EAAE,MAAM,IAAI,CAAC;AACnC,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE;AACjB,YAAA,MAAM,GAAG,IAAI,CAAC,cAAc;QAChC;QACA,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI,EAAE;YAC/B,IAAI,MAAM,CAAC,QAAQ;AAAE,gBAAA,UAAU,GAAG,MAAM,CAAC,QAAQ;YACjD,IAAI,MAAM,CAAC,QAAQ;gBAAE,QAAQ,GAAG,IAAI;YACpC,IAAI,CAAC,MAAM,CAAC,MAAM;AAAE,gBAAA,MAAM,CAAC,MAAM,GAAG,EAAE;AACtC,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;AACjD,gBAAA,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACrD;QACJ;QACA,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,KAAI;YAC9B,IAAI,SAAS,GAAG,EAAE;AAClB,YAAA,QAAQ,MAAM,CAAC,IAAI;AACf,gBAAA,KAAK,WAAW;AACZ,oBAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,WAAW;AACpD,oBAAA,SAAS,GAAG,CAAA,EAAG,MAAM,CAAC,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAA,EAAA,EAAK,MAAM,CAAC,KAAK,CAAA,CAAA,CAAG;oBAC1D;AACJ,gBAAA,KAAK,QAAQ;AACb,gBAAA,KAAK,OAAO;AACR,oBAAA,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAA,EAAG,MAAM,CAAC,KAAK,CAAA,CAAE,GAAG,CAAA,CAAA,EAAI,MAAM,CAAC,KAAK,GAAG;oBACzG,SAAS,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAA,GAAA,EAAM,GAAG,EAAE;oBACzC;AACJ,gBAAA,KAAK,UAAU;oBACX,SAAS,GAAG,CAAA,EAAG,MAAM,CAAC,QAAQ,gBAAgB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,QAAQ,CAAA,aAAA,EAAgB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG;oBACvH;AACJ,gBAAA,KAAK,WAAW;AACZ,oBAAA,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;oBACnF;AACJ,gBAAA,KAAK,SAAS;oBACV,SAAS,GAAG,CAAA,EAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAA,CAAE;oBAChD;AACJ,gBAAA;oBACI,SAAS,GAAG,CAAA,EAAG,MAAM,CAAC,QAAQ,eAAe,MAAM,CAAC,KAAK,CAAA,CAAA,CAAG;oBAC5D;;AAER,YAAA,IAAI,KAAK,IAAI,CAAC,EAAE;AACZ,gBAAA,SAAS,GAAG,CAAA,SAAA,EAAY,SAAS,CAAA,CAAE;YACvC;iBAAO;AACH,gBAAA,SAAS,IAAI,CAAA,KAAA,EAAQ,SAAS,CAAA,CAAE;YACpC;AACJ,QAAA,CAAC,CAAC;QACF,IAAI,QAAQ,EAAE;AACV,YAAA,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC;AAAE,gBAAA,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC,KAAK,GAAG,UAAU,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAI,QAAQ,GAAG,MAAM,CAAC,IAAI,GAAG,GAAG,GAAG,MAAM,CAAC,KAAK;QACjK;aAAO;AACH,YAAA,SAAS,IAAI,CAAA,OAAA,EAAU,MAAM,CAAC,KAAK,CAAA,QAAA,GAAY,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,EAAC,MAAA,EAAS,MAAM,CAAC,IAAI,CAAA,EAAA,EAAK,MAAM,CAAC,KAAK,CAAA,CAAE;QAC3H;AACA,QAAA,OAAO,SAAS;IACpB;AAES,IAAA,MAAM,CAAC,IAAI,EAAA;QAChB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC5D;IAEA,MAAM,qBAAqB,CAAC,IAAS,EAAA;AACjC,QAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE;QAC/B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;QAC3C,OAAO,MAAM,CAAC,MAAM;IACxB;AAEA,IAAA,kBAAkB,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,EAAA;QAChD,IAAI,MAAM,GAAG,EAAE;AACf,QAAA,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;YACd,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AACxB,gBAAA,IAAI,KAAK,GAAG,CAAC,EAAE;AACX,oBAAA,MAAM,IAAI,CAAA,CAAA,EAAI,QAAQ,KAAK,OAAO,GAAG,KAAK,GAAG,IAAI,GAAG;gBACxD;AACA,gBAAA,MAAM,IAAI,CAAA,MAAA,EAAS,QAAQ,CAAA,KAAA,EAAQ,IAAI,GAAG;AAC9C,YAAA,CAAC,CAAC;QACN;aAAO;AACH,YAAA,MAAM,GAAG,CAAA,MAAA,EAAS,QAAQ,CAAA,KAAA,EAAQ,GAAG,GAAG;QAC5C;AACA,QAAA,OAAO,MAAM;IACjB;AA5fS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,uEAId,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAAd,IAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAJ3B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cAFtB,MAAM,EAAA,CAAA,CAAA;;4FAET,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAKgB,MAAM;2BAAC,gBAAgB;;;MCnC3B,sBAAsB,GAAG,IAAI,cAAc,CAAM,wBAAwB;;MCEzE,gBAAgB,GAAG,IAAI,cAAc,CAAyB,kBAAkB;MAShF,sBAAsB,CAAA;AAE/B,IAAA,aAAa,CAAC,SAAiC,EAAA;AAC3C,QAAA,OAAO,SAAS,CAAC,aAAa,GAAG,SAAS,CAAC,aAAa,EAAE,GAAG,IAAI;IACrE;+GAJS,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cAFnB,MAAM,EAAA,CAAA,CAAA;;4FAET,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACZD;;;;;;;;;;;;;;AAcE;AAEI,MAAO,oBAAqB,SAAQ,KAAK,CAAA;AAC3C,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,oFAAoF,CAAC;AAC3F,QAAA,IAAI,CAAC,IAAI,GAAG,sBAAsB;IACtC;AACH;AAED,SAAS,eAAe,CAAC,KAAiB,EAAA;IACtC,IAAI,MAAM,GAAG,EAAE;AACf,IAAA,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACtD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAClF;AAEM,SAAU,mBAAmB,CAAC,OAAO,GAAG,EAAE,EAAA;AAC5C,IAAA,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC;AACrC,IAAA,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC;AAC7B,IAAA,OAAO,eAAe,CAAC,KAAK,CAAC;AACjC;AAEO,eAAe,iBAAiB,CAAC,QAAgB,EAAA;AACpD,IAAA,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE;QACjB,MAAM,IAAI,oBAAoB,EAAE;IACpC;IACA,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACxF,OAAO,eAAe,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;AAClD;AAEM,SAAU,gBAAgB,CAAC,KAAa,EAAA;IAC1C,IAAI,CAAC,KAAK,EAAE;AACR,QAAA,OAAO,IAAI;IACf;IACA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;AAC9B,IAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACpB,QAAA,OAAO,IAAI;IACf;AACA,IAAA,IAAI;QACA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACpE,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;IAC9B;IAAE,OAAO,CAAC,EAAE;AACR,QAAA,OAAO,IAAI;IACf;AACJ;AAEA;AACM,SAAU,QAAQ,CAAC,KAAa,EAAA;IAClC,MAAM,GAAG,GAAG,gBAAgB,CAAC,KAAK,CAAC,EAAE,GAAG;AACxC,IAAA,OAAO,OAAO,GAAG,KAAK,QAAQ,GAAG,GAAG,GAAG,IAAI,GAAG,SAAS;AAC3D;AAEM,SAAU,QAAQ,CAAC,KAAa,EAAA;IAClC,MAAM,GAAG,GAAG,gBAAgB,CAAC,KAAK,CAAC,EAAE,GAAG;AACxC,IAAA,OAAO,OAAO,GAAG,KAAK,QAAQ,GAAG,GAAG,GAAG,IAAI,GAAG,SAAS;AAC3D;;ACpEA;;;;;;;;;;;;;;AAcE;AAKK,MAAM,cAAc,GAAG;AAC9B;AACO,MAAM,qBAAqB,GAAG;AA2BrC;AACA;AACM,MAAO,sBAAuB,SAAQ,KAAK,CAAA;IAC7C,WAAA,CAAY,OAAe,EAAS,QAAc,EAAA;QAC9C,KAAK,CAAC,OAAO,CAAC;QADkB,IAAA,CAAA,QAAQ,GAAR,QAAQ;AAExC,QAAA,IAAI,CAAC,IAAI,GAAG,wBAAwB;IACxC;AACH;AAED;AACM,MAAO,6BAA8B,SAAQ,KAAK,CAAA;IACpD,WAAA,CAAY,OAAe,EAAS,MAAe,EAAA;QAC/C,KAAK,CAAC,OAAO,CAAC;QADkB,IAAA,CAAA,MAAM,GAAN,MAAM;AAEtC,QAAA,IAAI,CAAC,IAAI,GAAG,+BAA+B;IAC/C;AACH;AAED;;;;;;;;AAQG;MAIU,eAAe,CAAA;AAH5B,IAAA,WAAA,GAAA;QAKY,IAAA,CAAA,eAAe,GAAiC,IAAI;AAwP/D,IAAA;IAtPG,gBAAgB,GAAA;;;;;;;;;AASZ,QAAA,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,gBAAgB;IACpD;AAEA,IAAA,MAAM,gBAAgB,CAAC,aAAqB,EAAE,OAAqD,EAAA;AAC/F,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,OAAO,EAAE,QAAQ,IAAI,OAAO,CAAC;QAClF,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACnE,QAAA,MAAM,KAAK,GAAG,mBAAmB,EAAE;AACnC,QAAA,MAAM,KAAK,GAAG,mBAAmB,EAAE;AACnC,QAAA,MAAM,YAAY,GAAG,mBAAmB,CAAC,EAAE,CAAC;AAC5C,QAAA,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAI;YACtE,MAAM,IAAI,sBAAsB,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC;AACtD,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,GAAG,GAAoB;AACzB,YAAA,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;YAC/C,QAAQ;AACR,YAAA,aAAa,EAAE,EAAE;YACjB,KAAK;YACL,KAAK;YACL,YAAY;YACZ,WAAW;AACX,YAAA,QAAQ,EAAE;SACb;AAED,QAAA,IAAI,SAAc;QAClB,KAAK,MAAM,QAAQ,IAAI,CAAC,cAAc,EAAE,qBAAqB,CAAC,EAAE;AAC5D,YAAA,IAAI;AACA,gBAAA,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC;gBACnE,IAAI,aAAa,EAAE;AACf,oBAAA,GAAG,CAAC,aAAa,GAAG,aAAa;AACjC,oBAAA,GAAG,CAAC,QAAQ,GAAG,QAAQ;AACvB,oBAAA,OAAO,GAAG;gBACd;YACJ;YAAE,OAAO,GAAG,EAAE;gBACV,SAAS,GAAG,GAAG;YACnB;QACJ;QACA,MAAM,IAAI,sBAAsB,CAC5B,CAAA,mFAAA,EAAsF,WAAW,CAAA,4DAAA,CAA8D,EAC/J,SAAS,CACZ;IACL;AAEQ,IAAA,MAAM,SAAS,CAAC,QAAgB,EAAE,QAAgB,EAAE,GAAoB,EAAA;AAC5E,QAAA,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;AAC/B,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,aAAa,EAAE,MAAM;AACrB,YAAA,KAAK,EAAE,uBAAuB;YAC9B,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,KAAK,EAAE,GAAG,CAAC,KAAK;AAChB,YAAA,cAAc,EAAE,MAAM,iBAAiB,CAAC,GAAG,CAAC,YAAY,CAAC;AACzD,YAAA,qBAAqB,EAAE,MAAM;YAC7B,YAAY,EAAE,GAAG,CAAC;AACrB,SAAA,CAAC;AACF,QAAA,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,CAAA,EAAG,QAAQ,CAAA,WAAA,EAAc,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE;AACnE,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,WAAW,EAAE,MAAM;AACnB,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,OAAO,EAAE,EAAC,MAAM,EAAE,kBAAkB;AACvC,SAAA,CAAC;;QAEF,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AAClC,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;;QAE7F,OAAO,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IACzD;AAEA,IAAA,iBAAiB,CAAC,GAAoB,EAAE,QAAgB,EAAE,QAAgB,EAAA;QACtE,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAA,EAAG,GAAG,CAAC,QAAQ,CAAA,eAAA,CAAiB,EAAE,EAAC,EAAE,EAAE,GAAG,CAAC,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAC,CAAC;IAC/G;IAEA,eAAe,CAAC,GAAoB,EAAE,QAAgB,EAAA;AAClD,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAA,EAAG,GAAG,CAAC,QAAQ,CAAA,cAAA,CAAgB,EAAE,EAAC,EAAE,EAAE,GAAG,CAAC,aAAa,EAAC,EAAE,EAAC,aAAa,EAAE,CAAA,OAAA,EAAU,QAAQ,CAAA,CAAE,EAAC,CAAC;IACjI;AAEA,IAAA,aAAa,CAAC,GAAoB,EAAA;QAC9B,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAA,EAAG,GAAG,CAAC,QAAQ,aAAa,EAAE,EAAC,EAAE,EAAE,GAAG,CAAC,aAAa,EAAC,CAAC;IACvF;IAEA,UAAU,CAAC,GAAoB,EAAE,IAAY,EAAA;QACzC,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAA,EAAG,GAAG,CAAC,QAAQ,CAAA,WAAA,CAAa,EAAE,EAAC,EAAE,EAAE,GAAG,CAAC,aAAa,EAAE,IAAI,EAAC,CAAC;IAC7F;IAEQ,MAAM,WAAW,CAAC,GAAoB,EAAE,GAAW,EAAE,MAAW,EAAE,YAAA,GAAoB,EAAE,EAAA;AAC5F,QAAA,IAAI,IAAc;AAClB,QAAA,IAAI;AACA,YAAA,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;AACpB,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,WAAW,EAAE,MAAM;AACnB,gBAAA,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,EAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,YAAY,EAAC;AACtD,gBAAA,IAAI,EAAE,IAAI,eAAe,CAAC,MAAM;AACnC,aAAA,CAAC;QACN;QAAE,OAAO,GAAQ,EAAE;AACf,YAAA,OAAO,EAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAC,OAAO,EAAE,GAAG,EAAE,OAAO,IAAI,qCAAqC,EAAC,EAAC;QACrG;;;;AAKA,QAAA,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;YAClD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;YAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC;YAChD,IAAI,KAAK,EAAE;gBACP,OAAO,EAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,KAAK,EAAC,EAAC;YACvG;YACA,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC;AAChD,YAAA,IAAI,KAAK,KAAK,GAAG,CAAC,KAAK,EAAE;AACrB,gBAAA,OAAO,EAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAC,OAAO,EAAE,uCAAuC,EAAC,EAAC;YACvF;YACA,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;YAC9C,IAAI,CAAC,IAAI,EAAE;AACP,gBAAA,OAAO,EAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAC,OAAO,EAAE,yCAAyC,EAAC,EAAC;YACzF;AACA,YAAA,OAAO,EAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAC;QACjC;QAEA,IAAI,IAAI,GAAQ,IAAI;AACpB,QAAA,IAAI;AACA,YAAA,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE;QAC5B;QAAE,OAAO,CAAC,EAAE;;QAEZ;;;QAIA,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE;YACtC,OAAO,EAAC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAC;QAClE;AAEA,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;AACpD,YAAA,OAAO,EAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAC,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,mBAAmB,EAAC,EAAC;QACtF;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,EAAE,KAAK,EAAE,OAAO,IAAI,IAAI,EAAE,iBAAiB,IAAI,IAAI,EAAE;AAClE,eAAA,CAAA,yBAAA,EAA4B,IAAI,CAAC,MAAM,CAAA,CAAE;AAChD,QAAA,OAAO,EAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAC,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAC,EAAC;IACnG;AAEA,IAAA,MAAM,YAAY,CAAC,GAAoB,EAAE,IAAY,EAAA;QACjD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAA,YAAA,CAAc,EAAE;AACpD,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,WAAW,EAAE,MAAM;AACnB,YAAA,OAAO,EAAE,EAAC,MAAM,EAAE,kBAAkB,EAAC;YACrC,IAAI,EAAE,IAAI,eAAe,CAAC;AACtB,gBAAA,UAAU,EAAE,oBAAoB;gBAChC,SAAS,EAAE,GAAG,CAAC,QAAQ;gBACvB,IAAI;gBACJ,aAAa,EAAE,GAAG,CAAC,YAAY;gBAC/B,YAAY,EAAE,GAAG,CAAC;aACrB;AACJ,SAAA,CAAC;AACF,QAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE;AACjC,YAAA,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,iBAAiB,IAAI,IAAI,EAAE,KAAK,IAAI,CAAA,kCAAA,EAAqC,IAAI,CAAC,MAAM,CAAA,CAAE,CAAC;QACjH;QACA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC;IAC9C;IAEA,aAAa,CAAC,aAAqB,EAAE,YAAoB,EAAE,QAAQ,GAAG,cAAc,EAAE,QAAQ,GAAG,OAAO,EAAA;AACpG,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,OAAO,IAAI,CAAC,eAAe;QAC/B;AACA,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ;aAChF,OAAO,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC/B,QAAA,CAAC,CAAC;QACN,OAAO,IAAI,CAAC,eAAe;IAC/B;IAEQ,MAAM,SAAS,CAAC,aAAqB,EAAE,YAAoB,EAAE,QAAgB,EAAE,QAAgB,EAAA;;;;;AAKnG,QAAA,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,CAAA,EAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAA,EAAG,QAAQ,cAAc,EAAE;AACnF,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,WAAW,EAAE,MAAM;AACnB,YAAA,OAAO,EAAE,EAAC,MAAM,EAAE,kBAAkB,EAAC;YACrC,IAAI,EAAE,IAAI,eAAe,CAAC;AACtB,gBAAA,UAAU,EAAE,eAAe;AAC3B,gBAAA,SAAS,EAAE,QAAQ;AACnB,gBAAA,aAAa,EAAE;aAClB;AACJ,SAAA,CAAC;AACF,QAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC;QAChD,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,YAAY,EAAE;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC;AAC9C,YAAA,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;;AAEtB,gBAAA,MAAM,CAAC,YAAY,GAAG,YAAY;AAClC,gBAAA,MAAM,CAAC,gBAAgB,GAAG,QAAQ,CAAC,YAAY,CAAC;YACpD;AACA,YAAA,OAAO,MAAM;QACjB;AACA,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG,EAAE;AACnE,YAAA,MAAM,IAAI,6BAA6B,CACnC,IAAI,EAAE,iBAAiB,IAAI,sDAAsD,EACjF,IAAI,EAAE,KAAK,IAAI,CAAA,KAAA,EAAQ,IAAI,CAAC,MAAM,CAAA,CAAE,CACvC;QACL;AACA,QAAA,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,iBAAiB,IAAI,IAAI,EAAE,KAAK,IAAI,CAAA,iCAAA,EAAoC,IAAI,CAAC,MAAM,CAAA,CAAE,CAAC;IAChH;AAEA,IAAA,MAAM,WAAW,CAAC,aAAqB,EAAE,KAAa,EAAE,IAAsC,EAAE,QAAQ,GAAG,cAAc,EAAE,QAAQ,GAAG,OAAO,EAAA;AACzI,QAAA,IAAI;AACA,YAAA,MAAM,KAAK,CAAC,CAAA,EAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAA,EAAG,QAAQ,CAAA,aAAA,CAAe,EAAE;AACvE,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,WAAW,EAAE,MAAM;AACnB,gBAAA,OAAO,EAAE,EAAC,MAAM,EAAE,kBAAkB,EAAC;AACrC,gBAAA,IAAI,EAAE,IAAI,eAAe,CAAC,EAAC,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAC;AAChF,aAAA,CAAC;QACN;QAAE,OAAO,CAAC,EAAE;;QAEZ;IACJ;IAEQ,UAAU,CAAC,IAAS,EAAE,QAAgB,EAAA;QAC1C,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;QAC9C,OAAO;YACH,WAAW,EAAE,IAAI,CAAC,YAAY;AAC9B,YAAA,YAAY,EAAE,IAAI,CAAC,aAAa,IAAI,SAAS;AAC7C,YAAA,OAAO,EAAE,IAAI,CAAC,QAAQ,IAAI,SAAS;AACnC,YAAA,SAAS,EAAE,UAAU,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC;AACxE,YAAA,gBAAgB,EAAE,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,SAAS;YAC/E;SACH;IACL;AAEQ,IAAA,YAAY,CAAC,GAAW,EAAA;QAC5B,OAAO,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IACnC;+GAzPS,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFZ,MAAM,EAAA,CAAA,CAAA;;4FAET,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;AC5ED;;;;;;;;;;;;;;AAcE;AAWF,MAAM,gCAAgC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;AACvD,MAAM,mBAAmB,GAAG,EAAE,GAAG,IAAI;AACrC,MAAM,qBAAqB,GAAG,CAAC,GAAG,IAAI;AACtC,MAAM,mBAAmB,GAAG,EAAE,GAAG,IAAI;AACrC,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI;AAClC,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI;AAElC;;;;AAIG;MAIU,qBAAqB,CAAA;AAwB9B,IAAA,WAAA,CACsC,eAAqC,EAC/D,WAA4B,EAC5B,cAA8B,EAC9B,QAAkB,EAAA;QAHQ,IAAA,CAAA,eAAe,GAAf,eAAe;QACzC,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,QAAQ,GAAR,QAAQ;QA1BZ,IAAA,CAAA,YAAY,GAAQ,IAAI;QACxB,IAAA,CAAA,eAAe,GAAQ,IAAI;QAC3B,IAAA,CAAA,YAAY,GAAG,gBAAgB;QAC/B,IAAA,CAAA,OAAO,GAAG,KAAK;QAEN,IAAA,CAAA,MAAM,GAAG,MAAK;AAC3B,YAAA,IAAI,QAAQ,CAAC,eAAe,KAAK,SAAS,EAAE;gBACxC,IAAI,CAAC,iBAAiB,EAAE;YAC5B;AACJ,QAAA,CAAC;AACgB,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,KAAmB,KAAI;AACjD,YAAA,IAAI,KAAK,CAAC,GAAG,KAAK,eAAe,EAAE;gBAC/B;YACJ;AACA,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE;AAC1B,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;gBACvB,IAAI,CAAC,mBAAmB,EAAE;YAC9B;iBAAO;gBACH,IAAI,CAAC,IAAI,EAAE;YACf;AACJ,QAAA,CAAC;IAOE;IAEH,KAAK,GAAA;;;QAGD,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;YAChD;QACJ;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE;YACxB;QACJ;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACf,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;YACnB,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC;YAC1D,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;YAC7C,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC;AAClD,YAAA,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,EAAE,mBAAmB,CAAC;QAC3F;QACA,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,mBAAmB,EAAE;IAC9B;IAEA,IAAI,GAAA;AACA,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;AAC/B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC;AACnC,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,YAAY,GAAG,gBAAgB;QACpC,QAAQ,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC;QAC7D,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;QAChD,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC;IACzD;AAEA,IAAA,MAAM,UAAU,GAAA;QACZ,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO;QACtD,IAAI,OAAO,EAAE,QAAQ,KAAK,MAAM,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE;AACxD,YAAA,OAAO,KAAK;QAChB;AACA,QAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,YAAY;AAC7C,QAAA,IAAI;YACA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAC/C,OAAO,CAAC,gBAAgB,EACxB,gBAAgB,EAChB,OAAO,CAAC,YAAY,EACpB,IAAI,CAAC,eAAe,CAAC,YAAY,IAAI,OAAO,CAC/C;AACD,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;AAC1B,YAAA,IAAI,CAAC,YAAY,GAAG,gBAAgB;YACpC,IAAI,CAAC,mBAAmB,EAAE;AAC1B,YAAA,OAAO,IAAI;QACf;QAAE,OAAO,GAAG,EAAE;AACV,YAAA,IAAI,GAAG,YAAY,6BAA6B,EAAE;;;AAG9C,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE;gBAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO;gBACrD,IAAI,MAAM,EAAE,YAAY,IAAI,MAAM,CAAC,YAAY,KAAK;AAC7C,uBAAA,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;oBACrE,IAAI,CAAC,mBAAmB,EAAE;AAC1B,oBAAA,OAAO,IAAI;gBACf;gBACA,IAAI,CAAC,mBAAmB,EAAE;AAC1B,gBAAA,OAAO,KAAK;YAChB;;YAEA,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,OAAO,KAAK;QAChB;IACJ;AAEQ,IAAA,aAAa,CAAC,MAAW,EAAA;AAC7B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ;QAC9C,QAAQ,CAAC,OAAO,GAAG;YACf,GAAG,QAAQ,CAAC,OAAO;YACnB,EAAE,EAAE,MAAM,CAAC,WAAW;YACtB,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;YACnD,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,YAAY,EAAE,MAAM,CAAC;SACxB;AACD,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC;IACxD;IAEQ,mBAAmB,GAAA;AACvB,QAAA,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE;YACzC;QACJ;QACA,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;AAChD,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC3B,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC3B,QAAA,MAAM,QAAQ,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,gCAAgC;QAC1E,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,EAAE,mBAAmB,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE;AACzF,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,qBAAqB,CAAC;AACrE,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC;IAClE;IAEQ,aAAa,GAAA;AACjB,QAAA,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf;QACJ;AACA,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC;AAC1E,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,YAAY,CAAC;IACrE;IAEQ,iBAAiB,GAAA;QACrB,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE;YACzC;QACJ;QACA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO;AACrD,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,gBAAgB,IAAI,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC;QAC7E,IAAI,UAAU,IAAI,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;YACxC,IAAI,CAAC,mBAAmB,EAAE;YAC1B;QACJ;QACA,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;AAC9D,QAAA,IAAI,CAAC,SAAS,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,mBAAmB,EAAE;YAC5D,IAAI,CAAC,UAAU,EAAE;QACrB;IACJ;IAEQ,cAAc,GAAA;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO;QACtD,OAAO,OAAO,EAAE,QAAQ,KAAK,MAAM,IAAI,CAAC,CAAC,OAAO,EAAE,YAAY;IAClE;IAEQ,mBAAmB,GAAA;QACvB,IAAI,CAAC,IAAI,EAAE;AACX,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,YAAY,CACrC,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,CACzB,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,MAAM,EAAE;IACjD;AAvKS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,kBAyBlB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAAmL,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAzL,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAzBnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFlB,MAAM,EAAA,CAAA,CAAA;;4FAET,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BA0BQ,MAAM;2BAAC,gBAAgB;;;ACjEzB,MAAM,WAAW,GAAG;AACvB,IAAA,SAAS,EAAE;;;ACDf;;AAEG;;ACFH;;AAEG;;;;"}